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 – –

了解更多


TL;DR

Indra OCR 是一个轻量级、纯 CPU 的 OCR 引擎,为印刷文档提供高速度和不错的准确性,具有丰富的布局输出和易于使用的 CLI/Python API。它非常适合批量处理干净的 PDF 或图像,当您需要快速获得结果并能容忍其在复杂表格、手写或非拉丁文字上的局限性时。

相关

  • 项目
  • 项目
  • 项目
  • 项目