datalab-to/indra
1M param OCR model - runs on CPU, 15x faster than tesseract, close to 1B+ param models in accuracy
什么是 Indra OCR?
Indra OCR 是一个微型(约 1 M 参数)光学字符识别模型,可在 CPU 上运行。它能够以高达 49 页/秒(在 4 个 x86 vCPU 上每页约 230 ms)的速度读取 PDF 和图像,并将结果输出为 Markdown、纯文本或带有详细布局信息的 JSON。
主要特性
- 速度 – 在相同硬件上比 Tesseract/PaddleOCR 快 11-17 倍。
- 准确性 – OmniParseBench 头条得分 62.1,超过 PaddleOCR 的完整流程(58.4)。
- 布局感知 – 每行和块都有边界框,块标签(标题、表格、标题、脚注等)和阅读顺序。
- 混合 PDF 处理 – 当 PDF 的原生文本层通过质量检查时使用它;否则回退到 OCR,节省工作量。
- 体积小 – 约 18 MB ONNX 模型,无需 PyTorch,使用 ONNX Runtime、OpenCV 和 pypdfium2 运行。
- 多语言 OCR – 拉丁文、西里尔文、希腊文、天城文、孟加拉文、中文(简体和繁体)。数字 PDF 通过文本层支持任何文字。
- 可选数学支持 –
--math标志添加一个分类器和第二个识别器,输出 LaTeX 风格的行内数学。 - 本地查看器 –
indra-ocr-viewer显示带有叠加框、Markdown、JSON 和计时的页面。
快速开始(CLI)
pip install indra-ocr # 安装包
indra-ocr paper.pdf # 将 Markdown 输出到标准输出
indra-ocr *.pdf --out results/ # 每个文件一个 .md,使用所有核心
indra-ocr scan.png --format json # 带有行、框、置信度的 JSON
indra-ocr-viewer # 打开 http://localhost:8765
首次运行会从 Hugging Face 下载 ONNX 模型(约 18 MB)。
Python API(基本示例)
import indra_ocr
conv = indra_ocr.load(threads=4) # 自动模式(文本层 + OCR)
for i, page in conv.convert("paper.pdf"):
print(page.markdown) # 带有标题、表格等的 Markdown
print(page.blocks) # 带有标签的布局块列表
对于批量转换,使用 indra_ocr.convert_many([...], cores=None),它为每个 CPU 核心生成一个工作进程。
输出结构
markdown– 格式化文本(标题、列表、表格为 HTML)。除非使用--keep-furniture,否则省略页眉/页脚。text– 纯文本,每检测到一行一行。lines–Line(box, text, confidence)对象列表。blocks– 带有label、bbox、text的布局块,按阅读顺序排列。source–text(PDF 层)、ocr、hybrid或error。timings– 每个阶段的毫秒数,以及总计。- 其他元数据,如
rotation、skew和解释处理路径的简短note。
何时使用 Indra OCR 与托管服务
Indra OCR 在干净的印刷文档上表现出色,此时纯 CPU 速度至关重要。它不适合:
- 具有合并单元格或跨行单元格的复杂表格。
- 手写文本。
- OCR 列表之外的文字(阿拉伯文、希伯来文、泰文、日文、韩文)——这些仅通过 PDF 文本层工作。
- 非常退化或低分辨率的扫描件。
- 垂直文本、横幅宽页面、工程图标签或超过 100 MP 的 200 dpi 页面。 对于这些情况,作者推荐他们更高精度、GPU 支持的模型 Chandra,通过 Datalab 托管平台使用。
许可与商业使用
- 代码 – Apache 2.0。
- 模型权重 – 修改后的 OpenRAIL-M(免费用于研究、个人使用和收入低于 2000 万美元的初创公司)。与 Datalab API 竞争的商业使用需要单独许可(参见定价页面)。
安装说明
pip install indra-ocr # 稳定版本
# 或最新的 GitHub 版本
pip install git+https://github.com/datalab-to/indra.git
# 可选的 Tesseract 比较支持
pip install "indra-ocr[tesseract]"
支持 Python 3.10+、Linux(x86_64 和 aarch64)和 macOS(Apple silicon)。该包自动拉取 ONNX Runtime、OpenCV 和 pypdfium2。
基准测试概览
| 指标 | Indra OCR(默认) | PaddleOCR PP‑OCRv6(仅文本) | Tesseract 5 |
|---|---|---|---|
| 吞吐量(页/秒)– 32 核 | 49.4 | 4.28 | 2.92 |
| 每页中位延迟 | 228 ms | 2 685 ms | 5 496 ms |
| OmniParseBench 头条 | 62.1 | – | – |
| 文本得分 | 41.3 | 35.8 | 19.3 |
| 表格得分 | 56.4 | 0.0 | 0.0 |
| 布局得分 | 88.6 | – | – |
了解更多
- 主页: https://www.datalab.to
- Hugging Face 上的模型: https://huggingface.co/datalab-to/indra-ocr
- 文档与 Playground: https://documentation.datalab.to 和 https://www.datalab.to/playground
- Discord 社区: https://discord.gg/KuZwXNGnfH
TL;DR
Indra OCR 是一个轻量级、纯 CPU 的 OCR 引擎,为印刷文档提供高速度和不错的准确性,具有丰富的布局输出和易于使用的 CLI/Python API。它非常适合批量处理干净的 PDF 或图像,当您需要快速获得结果并能容忍其在复杂表格、手写或非拉丁文字上的局限性时。
相关
- 项目
- 项目
- 项目
- 项目