4.7 KiB
4.7 KiB
PP-OCRv6 本地 OCR
本项目使用 PP-OCRv6 实现图片、PDF 和目录批量 OCR。工程结构参考 ../ocr-VL1.6,CPU/GPU 环境隔离,并通过根目录 ocr.py 统一调用。
输出 Markdown 的定位是便于阅读的文字结果。本项目不实现版面分析、表格结构恢复或富文档还原。
功能
- 单图片 PP-OCRv6 识别
- 图片与 PDF 目录批处理
- PDF
hybrid/text/ocr模式 - PDF 文本层质量判断和扫描页自动 OCR
- PDF 页码选择、断点续传与覆盖重做
- TXT、简单 Markdown、归一化 JSON、Benchmark
- 可选 PaddleOCR 原始 JSON 和 OCR 可视化
- CPU/GPU 隔离,GPU 失败不回退 CPU
- 模型延迟加载,同一批次复用模型
支持三种成对的检测与识别模型规格:
| 参数 | 检测模型 | 识别模型 |
|---|---|---|
tiny |
PP-OCRv6_tiny_det |
PP-OCRv6_tiny_rec |
small |
PP-OCRv6_small_det |
PP-OCRv6_small_rec |
medium |
PP-OCRv6_medium_det |
PP-OCRv6_medium_rec |
不传参数时默认使用 medium。
安装
CPU
uv sync --project cpu
GPU
python gpu/setup_env.py --cuda cu118 --dry-run
python gpu/setup_env.py --cuda cu118
也可按目标机器使用 cu126。CUDA、驱动和 PaddlePaddle Wheel 必须相互兼容。
使用
验证环境
python ocr.py verify --device cpu
python ocr.py verify --device gpu
verify 只验证 Paddle 运行环境,不下载和初始化 OCR 模型。
单图片
# 默认 medium
python ocr.py data/images/手写01.png --device cpu
# 选择 small
python ocr.py data/images/手写01.png --device cpu --model-size small
# 选择 tiny;--model 是 --model-size 的别名
python ocr.py data/images/手写01.png --device cpu --model tiny
保存可视化和原始结果:
python ocr.py data/images/手写01.png \
--device cpu \
--save-visualization \
--save-raw-result
多轮 Benchmark:
python ocr.py data/images/手写01.png --warmup 1 --rounds 3
# 默认混合模式:优先文本层,扫描页才 OCR
python ocr.py data/documents/sample.pdf --device cpu
# 强制文本层
python ocr.py sample.pdf --pdf-mode text
# 强制全部页面 OCR
python ocr.py sample.pdf --pdf-mode ocr
# 指定页码
python ocr.py sample.pdf --pages "1-5,8,10-"
# 中断后恢复
python ocr.py sample.pdf --resume
# 删除原任务并重做
python ocr.py sample.pdf --overwrite
目录
python ocr.py data/ --device cpu
python ocr.py data/ --recursive --device cpu
目录任务串行处理文件,避免无控制并发造成内存占用和界面卡顿。
主要 PP-OCRv6 参数
--model-size tiny|small|medium
--model tiny|small|medium # --model-size 的别名
--lang ch
--text-rec-score-thresh 0.0
--text-det-limit-side-len N
--text-det-limit-type min|max
--text-det-thresh FLOAT
--text-det-box-thresh FLOAT
--text-det-unclip-ratio FLOAT
--text-recognition-batch-size 6
--return-word-box
--doc-orientation-classify / --no-doc-orientation-classify
--doc-unwarping / --no-doc-unwarping
--textline-orientation / --no-textline-orientation
默认开启文档方向分类和文本行方向分类,默认关闭文档去畸变。
输出
outputs/
├── images/
│ └── <图片名_扩展名>/
│ ├── result.txt
│ ├── result.md
│ ├── result.json
│ ├── benchmark.json
│ ├── raw-result.json # 可选
│ └── visualization.jpg # 可选
├── pdfs/
│ └── <PDF名>/
│ ├── manifest.json
│ ├── document.md
│ ├── document.json
│ └── pages/
└── batches/
result.json 使用项目自有稳定结构,主要包含:
- 文本行
- 识别置信度
- 多边形与矩形坐标
- 模型和语言信息
- 图片尺寸
- 汇总统计
PDF 混合模式
每页先提取 PDF 文本层:
有效文本层 → 直接保存文本
无效文本层 → 渲染 PNG → PP-OCRv6
纯电子 PDF 不加载 PP-OCRv6 模型。Manifest 会记录 PDF 哈希、DPI、文本层阈值和模型配置;关键配置变化时必须使用 --overwrite,不能错误续传。
能力边界
本项目只提供通用文字检测和识别:
- Markdown 是按识别顺序拼接的便读文本;
- 不恢复标题层级;
- 不恢复多栏版面;
- 不恢复表格单元格结构;
- 不提供与 PaddleOCR-VL 等价的富 Markdown。
JSON 中保留坐标,调用方可以按具体业务继续处理。
测试
uv run --project cpu pytest -q
测试使用假模型覆盖结果适配、输出路由和 PDF 混合流程,不要求每次测试都下载 OCR 模型。