paddleocrproject 复现与重构方案
更新时间:2025-11-11 作者:Lifu
概述
paddleocrproject 提供 PDF→TXT/JSON 的批处理能力,支持 CLI 与 GUI 面板、可暂停的队列执行、速度/质量报告,针对 Windows/CPU 环境做了“无黑窗口”优化(统一使用 pythonw.exe + CREATE_NO_WINDOW)。
目录与组件(来自仓库)
- 顶层脚本:restart_gui.py、check_status.py、start_gui.py、start_worker.py
- 核心/CLI:ocr_app(init/enqueue/run-worker/status/report/ocr-one)
- 脚本:scripts/gui_panel.py、run_batches.py、queue_monitor.py、sample_ocr.py、small_batch_test.py
- 存储:state/queue.db、state/pause.flag
- 输出:outputs/pocr_txt、outputs/runs/…
- 日志:logs/worker、logs/runner、logs/monitor、logs/failed
- 报告:reports/*.md
- 测试:tests/test_layout_order.py(双栏排序单测全过)
环境与依赖(CPU)
python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install -U pip
python -m pip install -U paddlepaddle paddleocr pymupdf
python -c "import fitz; from paddleocr import PaddleOCR; print('OK')"
快速使用
- 启动 GUI:
python restart_gui.py - 查看状态:
python check_status.py - 启动 Worker:
python start_worker.py
CLI 常用命令(ocr_app)
.\.venv\Scripts\python -m ocr_app.cli init
.\.venv\Scripts\python -m ocr_app.cli ocr-one --pdf "yaodian_2bu/示例.pdf" --zoom 1.6 --header-ratio 0.06 --footer-ratio 0.08
.\.venv\Scripts\python -m ocr_app.cli enqueue --dir yaodian_2bu --limit 200 --dedup
.\.venv\Scripts\python -m ocr_app.cli run-worker --max-jobs 200 --zoom 1.6 --header-ratio 0.06 --footer-ratio 0.08 --job-timeout 240
.\.venv\Scripts\python -m ocr_app.cli report --out reports/queue_speed_report.md --fold-by-name
关键实现要点
- GUI 面板:500ms 计数刷新 + 2s 日志聚合;打开目录/帮助菜单
- 队列模型:SQLite queue.db;state/pause.flag 可暂停;run_batches 自动分批
- OCR 策略:PaddleOCR mobile + PyMuPDF 渲染;页眉过滤(header_ratio)、页脚捕获(footer_ratio→JSON)
- 日志:控制台 INFO + 文件 DEBUG(utf-8-sig,PowerShell 5 兼容)
重构/复现计划(建议里程碑)
- M1 最小流水线(1-3 天)
- ocr-one + 目录初始化 + 基础日志;生成 txt 与 page-footers JSON
- M2 队列与面板(1-2 天)
- enqueue/run-worker/status/report;GUI 面板、黑窗口优化与进程管理
- M3 工程化(1-2 天)
- run_batches 挂机全库;Tail/查询优化;异常恢复与告警(可选)
验收清单
- 20 个 PDF 小批量跑通,生成报告与 JSON(页码/页脚)
- 队列 200 任务流畅运行,GUI 指标刷新无阻塞
- 日志编码正确(无中文乱码)
一键复现(示例)
cd C:\Users\lifu.liu\code\paddleocrproject
python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install -U pip
python -m pip install -U paddlepaddle paddleocr pymupdf
python restart_gui.py
python start_worker.py
依赖与版本(精确)
# Core OCR stack
paddlepaddle
paddleocr
pymupdf
# GUI (optional)
PyQt6
推荐参数与默认值
- 基础放大:
--zoom 1.6 - 页眉过滤:
--header-ratio 0.06 - 页脚捕获:
--footer-ratio 0.08→ 生成 page-footers JSON - 任务超时:
--job-timeout 240 - 单批最大任务:
--max-jobs 200