indra-ocr vs Tesseract vs PaddleOCR:OmniParseBench 2937页基准测试与吞吐量完整对比
indra-ocr vs Tesseract vs PaddleOCR:OmniParseBench 2937页基准测试与吞吐量完整对比
本文对 indra-ocr、Tesseract 和 PaddleOCR 三大 OCR 工具做一次完整对比:精度与速度。indra-ocr 是一款只有约 100 万参数的轻量级 CPU OCR 模型,能把 PDF 和图片转换为 Markdown、纯文本或带边框坐标的 JSON,在 32 核 CPU 上最高可达 49.4 页/秒,无需 GPU、不依赖 PyTorch。下面基于 OmniParseBench 全部 2,937 页测试数据,看看三者到底差多少。
三款 OCR 工具速览
| 工具 | 定位 | 模型规模 | 单页中位耗时(x86, 4 核) |
|---|---|---|---|
| indra-ocr | 轻量极速 CPU OCR | 约 1M 参数,ONNX 模型约 18 MB | 228 ms |
| Tesseract 5 | 经典开源 OCR,输出纯文本行 | 英文模型 | 5,496 ms |
| PaddleOCR PP-StructureV3 | 完整文档结构流水线(版面+表格+公式) | 多模型组合 | 40,958 ms |
可以看到量级差异:同样是纯 CPU 环境,indra-ocr 处理一页只需约 0.23 秒,而 PaddleOCR 的完整结构流水线要 40 秒以上。
OmniParseBench 2937 页基准:精度对比
OmniParseBench 包含 2,937 页文档、16,288 个通过/失败测试,涵盖文本、表格、版面三大维度。测试在同一台 x86 机器上运行:每个引擎 4 vCPU、逐页处理、相同页面、相同评分器、默认配置,保证公平。
| 引擎 | 综合得分 | 文本 | 表格 | 版面 |
|---|---|---|---|---|
| indra-ocr(auto 模式) | 62.1 | 41.3 | 56.4 | 88.6 |
indra-ocr --math 模式 |
66.8 | 57.5 | 54.8 | 88.1 |
| PaddleOCR PP-StructureV3 | 58.4 | 55.6 | 47.8 | 71.7 |
| PaddleOCR PP-OCRv6 small(仅文本) | – | 35.8 | 0.0 | – |
| Tesseract 5(英文模型) | – | 19.3 | 0.0 | – |
几个关键结论:
- 综合得分:indra-ocr 默认模式 62.1 分,超过 PaddleOCR 完整流水线(58.4);开启
--math后达 66.8 分,文本单项也反超(57.5 vs 55.6) - 版面识别:88.6 分遥遥领先,PaddleOCR 为 71.7,Tesseract 和 PP-OCR 文本模型根本不输出版面信息
- 表格:Tesseract 和 PP-OCR 文本模型只能输出文本行,表格得分为 0
- 中文测试(136 项):indra-ocr 64.7 分,与 PP-OCRv5 移动端中文模型(65.4)基本持平,PP-StructureV3 为 68.4
CPU 吞吐量完整对比:每秒 49.4 页
吞吐量测试同样使用 OmniParseBench 的 300 页样本,同一台 AMD EPYC 机器、无 GPU、纯 OCR 模式,每个核一个单线程 worker 进程:
| 引擎 | 4 核 | 8 核 | 16 核 | 32 核 |
|---|---|---|---|---|
| indra-ocr | 7.3 页/s | 14.2 | 27.2 | 49.4 |
| PaddleOCR PP-OCRv6 small | 0.65 | 1.24 | 2.42 | 4.28 |
| Tesseract 5 | 0.78 | 1.37 | 2.27 | 2.92 |
| PaddleOCR PP-StructureV3 | ≤ 0.022 | ≤ 0.044 | ≤ 0.089 | ≤ 0.18 |
32 核下,indra-ocr 是 PP-OCR 文本模型的 11.5 倍、Tesseract 的 16.9 倍、PP-StructureV3 的约 280 倍。 单页延迟方面,4 核 vCPU 上约 230 ms/页,比 Tesseract 和 PaddleOCR 快 12–24 倍。
还有一个容易被忽略的优势:indra-ocr 对数字 PDF 会直接读取文本层(支持任意文字系统),只对缺失部分做 OCR,--mode 参数可在 auto(混合)、ocr(强制识别)、text(仅文本层)之间切换。
真实文档识别效果
下面两张图是 indra-ocr 在 OmniParseBench 真实页面上的输出:彩色框是带标签的版面块(标题、列表、表格、图注等),淡蓝色框是文本行,全部由 JSON 输出直接绘制。
↑ 扫描的信件是上下颠倒的:indra-ocr 自动把页面转正,按正确阅读顺序识别双栏内容,并找出各标题位置。
↑ 含两个表格的期刊页面,表格以 HTML 形式输出并保留图注。
快速上手 indra-ocr:一条命令安装
pip install indra-ocr
要求 Python 3.10+,自动安装 ONNX Runtime、OpenCV 和 pypdfium2,不装 PyTorch。首次运行会从模型仓库下载约 18 MB 的模型并缓存。常用命令:
indra-ocr paper.pdf # PDF 转 Markdown 输出到终端
indra-ocr *.pdf --out results/ # 批量处理,每个输入一个 .md,用满所有核心
indra-ocr scan.png --format json # 输出文本行、边框、版面块和置信度
indra-ocr paper.pdf --math # 公式输出为 LaTeX
Python 调用也很简单:indra_ocr.load() 加载引擎,convert 逐页转换,每页返回 markdown、lines(带坐标和置信度)、blocks(按阅读顺序的版面块)和 timings。需要可视化对比时,indra-ocr-viewer 提供本地 Web 查看器,可叠显识别结果并直接与 Tesseract 对比。
模型文件说明(本仓库内容即为一套完整 ONNX 模型):
| 文件 | 作用 |
|---|---|
| rec.onnx | 主识别器,约 1M 参数,负责拉丁文字 |
| rec_cjk.onnx | 中文识别器,含汉字的内容自动路由到此 |
| det.onnx | 文本行检测 |
| orient.onnx | 页面方向判定(自动转正倒置页面) |
| order.onnx | 阅读顺序排序 |
| script.onnx | 文字系统分类 |
| mathcls.onnx、math_enc.onnx | 公式模式(--math)分类与编码器 |
| config.json | 模型清单与框架声明(onnxruntime) |
已知局限,先了解再选型 ⚠️
indra-ocr 为「干净印刷体 + 极速」而设计,以下场景不适合:
- 复杂表格:合并单元格、跨行文本、嵌套表头、无线框表格,单元格可能错位
- 手写体:不支持(OmniParseBench 手写测试约 8%)
- OCR 列表之外的文字系统:扫描/图片只支持拉丁、西里尔、希腊、天城文、孟加拉文和中文;阿拉伯文、日文假名、韩文等只能通过数字 PDF 的文本层读取
- 老旧褪色扫描件:低质量老扫描准确率仅约 20%
另外数学公式默认输出为纯文本(--math 开启后单项得分从 14.3 提升到 56.5,但整页耗时会增加约 30–35%),也不支持竖排文字。
如何选择:选型建议清单
| 你的场景 | 推荐 |
|---|---|
| 大批量干净印刷文档、纯 CPU 环境、要求秒级吞吐 | ✅ indra-ocr(本仓库模型) |
| PDF 批量转 Markdown/JSON 并需要版面块和阅读顺序 | ✅ indra-ocr |
| 遗留脚本、对精度要求不高、只想跑个纯文本行 | Tesseract |
| 复杂文档高精度解析(复杂表格、公式、印章)、可接受分钟级耗时 | PaddleOCR PP-StructureV3 |
| 手写字迹、严重退化扫描件 | 以上三款都不理想,建议使用专门的大规模 OCR 服务 |
一句话总结:在 CPU 环境处理干净印刷体文档,indra-ocr 以 200 倍于 PaddleOCR 完整流水线的速度跑出了更高的综合得分(62.1 vs 58.4),是目前「速度 × 精度」性价比最突出的选择;追求极限结构精度且不在乎耗时,再考虑 PaddleOCR。
更多细节可参阅项目说明 README.md,完整的 CLI 参数、Python API 和基准复现步骤(bench/opb_indra.py)均有文档。



