这是一个基于 PaddleOCR-VL-1.6 的批量 OCR 工作流,适合处理扫描版 PDF,尤其适合古籍、影印书、论文集、资料汇编这类“漏一段就很麻烦”的文献。
它解决的核心问题是:OCR 看起来成功了,但其实中间漏了一大段。
常见情况包括:
- 一整页传给 OCR 后,某个大文本块只识别出第一行或前几行。
- 原始 OCR 本来还可以,补救 OCR 反而更差,却把好结果覆盖掉。
- 批量处理几百页后,很难知道哪些页漏识别、乱码、空页误判或标题丢失。
这个项目的做法是:不相信单次 OCR 结果,而是为每一页建立一套检查流程。
原始 OCR
补救 OCR 候选
质量判断
最终 Markdown
质量报告
人工复核页面
- 自动调用
PaddleOCR-VL-1.6批量识别 PDF。 - 保留原始 OCR 结果,不直接覆盖。
- 发现疑似“大块漏识别”的区域后,自动切成小块/行图重新 OCR。
- 只有补救结果明显更好时才接受,避免“误补救污染”。
- 对整本书做视觉覆盖审计,找出“图像上有字,但 OCR 很短或为空”的页面。
- 生成 Markdown、CSV 质量报告和 HTML 复核面板。
- 支持每本书单独配置特殊乱码词、页眉清理规则和回归测试。
需要 Python 3.10 或更高版本。
pip install -r requirements.txt还需要安装 Poppler,因为脚本会用 pdftoppm 渲染 PDF 页面。
macOS:
brew install poppler推荐用环境变量:
export PADDLEOCR_ACCESS_TOKEN="你的 token"也可以在当前项目目录新建 .paddleocr.env,内容如下:
PADDLEOCR_ACCESS_TOKEN=你的 token
.paddleocr.env 已经在 .gitignore 中,不应该提交到 GitHub。
把 input.pdf 换成你的 PDF:
python scripts/paddle_vl_batch_ocr.py input.pdf --output ocr_full_paddle_vl --workers 4
python scripts/visual_ocr_audit.py input.pdf --ocr-root ocr_full_paddle_vl
python scripts/rebuild_ocr_reports.py --ocr-root ocr_full_paddle_vl --merged-name input_ocr_merged.md
python scripts/generate_review_panel.py input.pdf --ocr-root ocr_full_paddle_vl然后打开:
ocr_full_paddle_vl/review_panel/index.html
这个页面会把高风险页的原图、最终文本、原始 OCR、补救结果和质量信息放在一起,方便快速复核。
常用结果在这里:
ocr_full_paddle_vl/markdown_final_v2/ 每页最终 Markdown
ocr_full_paddle_vl/*_merged.md 合并后的整本 OCR 文本
ocr_full_paddle_vl/ocr_quality_report_v2.csv 每页质量统计
ocr_full_paddle_vl/ocr_deep_audit_v2.md 深度审计报告
ocr_full_paddle_vl/manual_review_list_v2.md 需要复核的页
ocr_full_paddle_vl/visual_coverage_audit_v2.md 视觉覆盖审计
ocr_full_paddle_vl/review_panel/index.html HTML 复核面板
不要把某一本书的特殊问题写死到脚本里。新书应该单独建立配置:
python scripts/paddle_vl_batch_ocr.py input.pdf --write-config-template ocr_project_config.json只有在确认某本书确实反复出现某类乱码、页眉、页脚时,才把规则写进这个文件。
示例见:
examples/ocr_project_config.example.json
如果你已经知道某些页很容易出错,可以为这本书建立回归测试:
python scripts/regression_check.py --write-template --cases ocr_regression_cases.json
python scripts/regression_check.py --ocr-root ocr_full_paddle_vl --cases ocr_regression_cases.json这可以防止后续修改脚本时,把已经修好的页面又弄坏。
示例见:
examples/ocr_regression_cases.example.json
这个项目最重要的原则是:
primary OCR 永远保留
fallback 只是候选
final 必须经过质量判断
高风险页必须进入复核清单
更详细的规则见: