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 は、CPU 上で動作する小型(約 1 M パラメータ)の光学文字認識モデルです。最大 毎秒 49 ページ(4 つの x86 vCPU で 1 ページあたり約 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 スタイルのインライン数式を出力する分類器と 2 番目の認識器を追加します。
  • ローカルビューア – 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 コアごとに 1 つのワーカーを生成します。


出力構造

  • markdown – フォーマットされたテキスト(見出し、リスト、表は HTML)。--keep-furniture を使用しない限り、ヘッダー/フッターは省略されます。
  • text – プレーンテキスト、検出された行ごとに 1 行。
  • 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 テキストレイヤー経由でのみ機能します。
  • 非常に劣化した、または低解像度のスキャン。
  • 縦書きテキスト、バナー幅のページ、エンジニアリング図面のラベル、または 200 dpi で 100 MP を超えるページ。 これらの場合、著者は Datalab マネージドプラットフォームを介して、より高精度で GPU 対応のモデル Chandra を推奨しています。

ライセンスと商用利用

  • コード – 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 は、印刷文書に対して高速で妥当な精度を提供し、豊富なレイアウト出力と使いやすい CLI/Python API を備えた、軽量で CPU 専用の OCR エンジンです。クリーンな PDF や画像のバッチ処理に理想的で、複雑な表、手書き、非ラテン文字の制限を許容できる場合に最適です。

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト