☰
Indra OCR:1M参数的CPU OCR模型,比Tesseract快15倍,如何接近1B级模型精度?
2026/10/25 9:51:28 网站建设 项目流程

【免费下载链接】indra

1M param OCR model - runs on CPU, 15x faster than tesseract, close to 1B+ param models in accuracy

项目地址:https://gitcode.com/gh_mirrors/indra4/indra
点击查看免费下载

Indra OCR 是一款仅 1M 参数、纯 CPU 运行的轻量级 OCR 模型,支持 PDF 与图片转 Markdown / 文本 / JSON,实测比 Tesseract 快 15 倍,精度接近 1B+ 参数的大模型。它支持 80+ 种语言、手写体、倾斜和倒置页面,首次运行自动下载约 76 MB 模型,无需 GPU 和 PyTorch。

一、Indra OCR 凭什么“以小博大”?

先给结论——这是官方 OmniParseBench 基准(2,937 页)上,OCR 引擎“文本精度 vs 单页耗时”的对比图:

几个关键数据:

引擎文本得分表格版面单页中位耗时
Indra OCR(默认 auto 模式)46.761.192.2212 ms
Indra OCR(--math数学模式)62.759.692.0357 ms
PaddleOCR PP-StructureV355.647.871.740,958 ms
Tesseract 519.30–5,496 ms
  • 快:32 核 CPU 上约 44 页/秒,是 Tesseract 的 15 倍、PaddleOCR PP-OCR 文本模型的 10 倍;4 核上单页仅约 210 ms。
  • 准:OmniParseBench 总分 66.7(开启--math后 71.4),全面领先 PaddleOCR 完整流水线(58.4)。
  • 小:主识别器rec.onnx约 125 万参数,全部默认模型合计 7.3M 参数,基于 ONNX Runtime 推理。

💡 完整基准数据与复现脚本见 README.md 的 Benchmarks 章节和 bench/opb_indra.py。

二、快速上手:三步完成 PDF 转 Markdown

安装(只需 Python 3.10+):

pip install indra-ocr

一条命令出结果:

indra-ocr paper.pdf # Markdown 直接输出到终端 indra-ocr *.pdf --out results/ # 每个输入生成一个 .md,自动用满所有核心 indra-ocr scan.png --format json # 输出文本行、坐标框、版式块、置信度

几个常用参数:

参数作用
--format [md\|text\|json]输出格式,默认 Markdown
--mode [auto\|ocr\|text]auto优先读 PDF 文本层,读不了的页才 OCR(默认)
--math公式转成 LaTeX,总分可从 66.7 提升到 71.4
--cores N限制并行核心数
--keep-furniture在 Markdown 中保留页眉页脚
--timings输出每页各阶段的耗时

除了命令行,它还是一个很薄的 Python 库,核心实现分布在 indra_ocr/ 目录下:

import indra_ocr conv = indra_ocr.load(threads=4) for i, page in conv.convert("paper.pdf"): print(page.markdown) # 标题、列表、表格(HTML) print(page.blocks) # 按阅读顺序的版式块:label / bbox / text

可运行的示例脚本:examples/ocr_image.py(图片转 Markdown / 文本 / JSON)和 examples/quickstart.ipynb(快速上手 Notebook)。

三、揭秘:1M 参数如何逼平 1B 级大模型?

小模型通常精度吃亏,Indra OCR 的做法不是“堆参数”,而是把工程效率花在刀刃上。拆开看(主流程见 indra_ocr/pipeline.py):

1. 按书写系统分治识别:每条文本行“对号入座”

它并不用一个巨型模型硬啃所有语言,而是 4 个专用识别器 + 1 个行分类器:

  • rec.onnx:拉丁字母(约 50 种语言)、西里尔、希腊文及拉丁手写体;
  • rec_cjk.onnx:简/繁体中文、日文、韩文;
  • rec_rtl.onnx:阿拉伯、波斯、乌尔都、希伯来等右起文字(输出自动转为逻辑顺序);
  • rec_world.onnx:印地文、泰米尔、泰文、缅甸文等其余文字。

分类器把每条文本行路由到对应识别器,不确定的行会由主识别器“复核”,取置信度更高的结果(路由阈值见pipeline.py中的ROUTE_SURE)。

2. 语言模型兜底:读得不行就“重读一遍”

对置信度低的行(阈值LM_GATE),用 n-gram 语言模型做 beam search 重读,手写体和噪声页收益明显——模型包里的 46 MB 语言模型就是为它准备的(语言模型逻辑见 indra_ocr/lm.py)。

3. PDF 文本层优先,OCR 只补漏

--mode auto(默认)会先校验数字 PDF 的文本层是否可信(含对 Hindi 传统字体、Chrome 导出的右起文本层等坑的专项检查),可信就直接读文本层,不可信才启动 OCR。这招让它在“文本 + 表格 + 版面”综合得分上大幅领先,也解释了表格和版面两项的高分(92.2)。

4. 每页并行:吃满所有 CPU 核心

单页内部用多线程加速有限,真正的提速来自页间并行:每个可用核心跑一个单线程 worker 进程,一页一个任务,哪怕一个长 PDF 也能用满全部核心(进程池实现见 indra_ocr/parallel.py,命令行入口见 indra_ocr/cli.py)。

5. 角度、方向全兜底

  • 倾斜最多 45° 的页面自动扶正(page.skew),旋转 90°/180° 的页面自动转正(page.rotation,方向模型见pipeline.py中的orient.onnx逻辑);
  • 支持中/日文竖排页面(page.vertical);
  • 深色背景浅色文字(PPT、深色表头)也能读。

上图是它对双栏学术页的识别效果:彩色框是带标签的版式块(Text、Section-Header、Page-Header…),淡蓝框是文本行,全部由 JSON 输出绘制,未经人工编辑。更多真实示例见 EXAMPLES.md。

四、实战:一张斜了 30 度的扫描件

倾斜文档是传统 OCR 的重灾区。下面这页被旋转了 30°:Indra OCR 检测到倾斜(skew: -30.0),先扶正再识别,输出与正向页面一致,坐标还会映射回原页面位置:

五、诚实清单:Indra OCR 不擅长什么

它主打“干净印刷体 + 极速”,以下场景请谨慎(或考虑 Datalab 的 Chandra 平台):

  • 复杂表格:合并单元格、跨行跨列、无线表格可能错行错列;简单网格表格没问题;
  • 手写体:能读但一般(OmniParseBench 手写测试 25.2%),草书和淡铅笔字迹最差;
  • 严重退化的扫描件:老旧褪色低分辨率扫描得分仅 29.5%;
  • 列表外的文字系统:叙利亚文、藏文、蒙文等只能靠 PDF 文本层;
  • 多音变符号的拉丁语言:捷克语、冰岛语等偶尔会写错相近的变音符号。

代码为 Apache 2.0 协议,模型权重采用修改版 OpenRAIL-M 协议(研究与个人使用免费),详见 LICENSE。

六、写在最后

Indra OCR 证明了 OCR 赛道的另一条路线:不追 1B 参数规模,用“小模型 + 分治 + 工程并行”把 CPU 的性价比打满。如果你的场景是海量文档数字化、PDF 转 Markdown、RAG 数据清洗,它几乎是零 GPU 成本的首选;而复杂表格和高精度手写识别,才需要交给更大的模型。

核心源码速查:

  • 流水线总控(检测/识别/阅读顺序):indra_ocr/pipeline.py
  • 全核心并行 worker 池:indra_ocr/parallel.py
  • 命令行入口:indra_ocr/cli.py
  • 本地 Web 查看器(indra-ocr-viewer):indra_ocr/viewer.py
  • 版本演进:CHANGELOG.md

【免费下载链接】indra

1M param OCR model - runs on CPU, 15x faster than tesseract, close to 1B+ param models in accuracy

项目地址:https://gitcode.com/gh_mirrors/indra4/indra
点击查看免费下载

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询