OCR 与布局识别的协同工作
OCR 与布局识别的协同工作
学习目标
读完本章后,你将能够:
- 理解 PDF 文本层与扫描件的分类策略
- 掌握布局检测与 OCR 的协同流程
- 处理扫描件、手写体、多栏布局等复杂场景
- 识别印章等特殊元素的提取策略
前置知识
1. PDF 分类:文本层还是扫描件?
MinerU 在处理 PDF 时,首先判断文档类型,决定是否需要 OCR:
分类依据:
- 检查 PDF 页面中是否有可选内容(文本层)
- 如果页面无文本层,则判定为扫描件
- 混合文档(部分页面有文本层)采用混合策略
2. 布局检测 + OCR 协同流程
2.1 Pipeline 引擎的协同
关键协同点:
- 布局检测先行:先用 PP-DocLayoutV2 将页面划分为不同区域
- 区域分类路由:根据区域类型决定使用哪个子模型
- 空间信息传递:每个子模型都使用布局检测提供的边界框作为输入
- 结果融合:将各子模型的输出按阅读顺序合并
2.2 印章文字识别
MinerU 在 Pipeline 引擎中增加了印章文字的特殊处理:
印章识别特点:
- 印章文字通常呈圆形或弧形排列
- 需要多角度旋转尝试以获得最佳 OCR 结果
- OCR 置信度驱动的最佳角度选择
3. 109 种语言支持
MinerU 的 OCR 引擎(基于 PaddleOCR)支持 109 种语言的检测与识别:
语言检测流程:
- 使用 fast-langdetect 对提取的文本进行语言识别
- 根据检测结果选择对应的 OCR 语言模型
- 多语言混排文档自动切换语言模型
支持的主要语言族:
- 拉丁字母系:英语、法语、德语、西班牙语等
- 汉字系:简体中文、繁体中文、日语、韩语
- 阿拉伯字母系:阿拉伯语、波斯语等
- 斯拉夫字母系:俄语、乌克兰语等
- 印度字母系:印地语、孟加拉语等
- 其他:泰语、越南语、希伯来语等
4. 多栏布局处理
复杂排版(如学术论文、报纸)的多栏处理策略:
多栏检测关键:
- 布局检测模型能识别分栏边界
- 同一栏内的文本块按阅读顺序排列
- 跨栏元素(如通栏标题)特殊处理
5. 手写体识别
MinerU 的 OCR 引擎对手写体有一定支持:
| 手写类型 | 支持程度 | 说明 |
|---|---|---|
| 工整手写体 | 较好 | 接近印刷体的手写 |
| 草书/连笔 | 有限 | 依赖训练数据覆盖 |
| 混合手写+印刷 | 中等 | 布局检测先分离,再分别识别 |
6. 陷阱与对策
| 陷阱 | 对策 |
|---|---|
| 扫描件被误判为文本型 PDF | 检查文档:如果页面无可选内容,自动启用 OCR |
| 印章文字识别失败 | 开启印章检测功能,多角度旋转尝试 |
| 多栏文档顺序混乱 | 确保使用支持分栏检测的布局模型 |
| 多语言文档识别率低 | 开启语言自动检测,为不同区域选择对应模型 |
| 低分辨率扫描件 OCR 效果差 | 先超分辨率增强,再 OCR 识别 |
7. 设计权衡
布局检测模型的选型
| 模型 | 检测类别 | 速度 | 精度 |
|---|---|---|---|
| PP-DocLayoutV2 | 50+ 类 | 快 | 高 |
取舍:使用更大的布局检测模型可以识别更多类别(如 abstract、doc_title 等),但推理时间增加。MinerU 默认使用 PP-DocLayoutV2,在速度与精度之间取得平衡。
OCR 引擎的选型
| 方案 | 优势 | 劣势 |
|---|---|---|
| PaddleOCR PyTorch 移植 | PyTorch 生态统一,GPU 加速 | 可能与原始 Paddle 版本有差异 |
| 原始 PaddlePaddle | 官方支持,最新功能 | 需要额外安装 PaddlePaddle |
取舍:MinerU 选择 PaddleOCR 的 PyTorch 移植版本,保持技术栈统一(PyTorch),减少依赖复杂度。
参考来源
- MinerU 源码:
mineru/model/ocr/、mineru/model/layout/ - PaddleOCR 官方文档:https://github.com/PaddlePaddle/PaddleOCR
- PP-DocLayoutV2:https://github.com/PaddlePaddle/PaddleClas