zhch158_admin 94bd0837ff refactor: Replace debug mode with log level argument for improved logging 1 hete
..
README.md 94bd0837ff refactor: Replace debug mode with log level argument for improved logging 1 hete
__init__.py 7980eebb36 feat: Introduce DotsOCR vLLM batch processing tool 2 hete
main.py 94bd0837ff refactor: Replace debug mode with log level argument for improved logging 1 hete
processor.py 94bd0837ff refactor: Replace debug mode with log level argument for improved logging 1 hete

README.md

DotsOCR vLLM 批量处理工具

基于 DotsOCR 的批量文档处理工具,支持 PDF 和图片文件的批量处理。

功能特性

  • ✅ 统一输入接口:支持 PDF 文件、图片文件、图片目录、文件列表(.txt)、CSV 文件
  • ✅ 自动判断输入类型:根据输入路径自动识别文件类型并处理
  • ✅ 页面范围支持:PDF 文件和图片目录支持指定页面范围(如 1-5,7,9-12
  • ✅ 成功判断优化:基于输出文件存在性判断处理是否成功
  • ✅ 数字标准化:自动将全角数字转换为半角(可选)
  • ✅ Dry run 模式:验证配置和输入,不执行实际处理
  • ✅ 调试模式:保存原始版本用于对比
  • ✅ 并发处理:支持多线程并发处理(可选)
  • ✅ 进度显示:实时显示处理进度和统计信息

安装依赖

conda activate py312

# 安装 DotsOCR
pip install dots-ocr

# 安装其他依赖
pip install loguru tqdm pillow

使用方法

基本用法

# 处理单个PDF文件
python main.py --input document.pdf --output_dir ./output

# 处理图片目录
python main.py --input ./images/ --output_dir ./output

# 处理文件列表
python main.py --input file_list.txt --output_dir ./output

# 处理CSV文件(失败的文件)
python main.py --input results.csv --output_dir ./output

高级用法

# 指定页面范围(PDF或图片目录)
python main.py --input document.pdf --output_dir ./output --pages "1-5,7"

# 只处理前10页(PDF或图片目录)
python main.py --input document.pdf --output_dir ./output --pages "-10"

# 从第5页到最后(PDF或图片目录)
python main.py --input document.pdf --output_dir ./output --pages "5-"

# 仅验证配置(dry run)
python main.py --input document.pdf --output_dir ./output --dry_run

# 使用 DEBUG 日志级别获取详细错误信息
python main.py --input document.pdf --output_dir ./output --log_level DEBUG

# 指定服务器地址
python main.py --input document.pdf --output_dir ./output --ip 10.192.72.11 --port 8101

# 调整批次大小
python main.py --input ./images/ --output_dir ./output --batch_size 4

# 禁用数字标准化
python main.py --input document.pdf --output_dir ./output --no-normalize

# 启用并发处理
python main.py --input ./images/ --output_dir ./output --use_threading --max_workers 3

参数说明

输入输出参数

  • --input, -i: 输入路径(必需)

    • PDF 文件:自动转换为图片处理
    • 图片文件:直接处理
    • 图片目录:扫描所有图片文件
    • 文件列表(.txt):每行一个文件路径
    • CSV 文件:读取失败的文件列表
  • --output_dir, -o: 输出目录(必需)

DotsOCR vLLM 参数

  • --ip: vLLM 服务器 IP(默认: 127.0.0.1
  • --port: vLLM 服务器端口(默认: 8101
  • --model_name: 模型名称(默认: DotsOCR
  • --prompt_mode: 提示模式(默认: prompt_layout_all_en
    • 可选值:dict_promptmode_to_prompt.keys() 中的所有模式
  • --min_pixels: 最小像素数(默认: MIN_PIXELS
  • --max_pixels: 最大像素数(默认: MAX_PIXELS
  • --dpi: PDF 转图片的 DPI(默认: 200

处理参数

  • --batch_size: 批次大小(默认: 1
  • --pages, -p: 页面范围(PDF和图片目录有效)
    • 格式:"1-5,7,9-12"(第1-5页、第7页、第9-12页)
    • "1-":从第1页到最后
    • "-10":前10页
  • --collect_results: 收集处理结果到指定CSV文件

并发参数

  • --use_threading: 启用多线程并发处理
  • --max_workers: 最大并发工作线程数(默认: 3,应与 vLLM data-parallel-size 匹配)

功能开关

  • --no-normalize: 禁用数字标准化(默认启用)
  • --dry_run: 仅验证配置,不执行处理

日志参数

  • --log_level: 日志级别(DEBUG, INFO, WARNING, ERROR,默认: INFO
  • --log_file: 日志文件路径

输出格式

输出目录结构:

output_dir/
├── filename.md              # Markdown 内容
├── filename.json            # Layout info JSON
├── filename_layout.jpg      # 布局可视化图片
├── filename_original.md     # 原始 Markdown(如果启用标准化且发生变化)
└── filename_original.json   # 原始 JSON(如果启用标准化且发生变化)

成功判断标准

处理成功的判断标准:

  • 输出目录中存在对应的 .md 文件
  • 输出目录中存在对应的 .json 文件

如果两个文件都存在,则认为处理成功。

统计信息

处理完成后会显示:

  • 文件统计:总文件数、成功数、失败数、跳过数
  • 性能指标:总耗时、吞吐量、平均处理时间

结果会保存到 {output_dir}_results.json 文件中。

示例

示例1:处理PDF文件

python main.py \
  --input /path/to/document.pdf \
  --output_dir ./output \
  --pages "1-10" \
  --ip 10.192.72.11 \
  --port 8101 \
  --log_level DEBUG

示例2:批量处理图片目录(并发)

python main.py \
  --input /path/to/images/ \
  --output_dir ./output \
  --batch_size 4 \
  --use_threading \
  --max_workers 3 \
  --log_file ./processing.log

示例3:Dry run 验证

python main.py \
  --input /path/to/document.pdf \
  --output_dir ./output \
  --dry_run

示例4:处理失败的文件(从CSV)

python main.py \
  --input processed_files.csv \
  --output_dir ./output \
  --ip 10.192.72.11 \
  --port 8101

注意事项

  1. 服务器连接:确保 DotsOCR vLLM 服务器正在运行并可访问
  2. 内存使用:处理大文件时注意内存使用情况
  3. 文件命名:PDF 页面会转换为 filename_page_001.png 格式
  4. 页面范围:页面编号从 1 开始(不是 0)
  5. 并发处理:使用 --use_threading 时,确保 --max_workers 与 vLLM 服务器的 data-parallel-size 匹配

故障排查

问题:连接服务器失败

  • 检查服务器地址和端口是否正确
  • 确认服务器是否正在运行
  • 检查网络连接和防火墙设置

问题:处理失败

  • 使用 --log_level DEBUG 获取详细错误信息和 traceback
  • 检查输出目录权限
  • 查看日志文件获取更多信息

问题:输出文件不存在

  • 检查处理是否真的失败(查看错误信息)
  • 确认输出目录路径正确
  • 检查磁盘空间是否充足

问题:并发处理性能不佳

  • 确保 --max_workers 与 vLLM 服务器的 data-parallel-size 匹配
  • 检查服务器资源使用情况
  • 调整 --batch_size 参数

相关工具

  • ocr_utils: OCR 工具包,提供 PDF 处理、文件处理等功能
  • DotsOCR: 文档解析框架

与 MinerU 工具的差异

  1. 输出格式:DotsOCR 输出 _layout.jpg,MinerU 输出 _layout.pdf
  2. 服务器参数:DotsOCR 使用 --ip--port,MinerU 使用 --server_url
  3. 提示模式:DotsOCR 支持多种 prompt_mode,MinerU 使用固定的提示方式
  4. 并发处理:DotsOCR 支持可选的并发处理(--use_threading),MinerU 仅支持单进程