Indra OCR Review: Datalab’s 1M-Param CPU OCR (~49 Pages/sec)

Indra OCR is Datalab’s open OCR package built around a ~1M-parameter recognition model. Searches for indra ocr typically want throughput claims, install steps, and what the markdown/JSON outputs include. Per Datalab’s Oct 13, 2026 blog and the Hugging Face model card, Indra targets clean print on CPU: about 49 pages per second on 32 cores, with layout boxes and reading order—not just a text dump.

This review summarizes public docs from Datalab, Hugging Face, and GitHub (datalab-to/indra). Benchmarks below are vendor-run OmniParseBench / throughput tables unless noted.

What you get

  • ~1M-param main recognizer (rec.onnx); about 18 MB of models on ONNX Runtime—no PyTorch required
  • ~49 pages/s on 32 CPU cores (Datalab: 49.4 pps mean of 3 runs on 300 OmniParseBench pages); single-page latency ~230 ms median on 4 x86 vCPUs in default auto mode
  • Outputs: markdown, plain text, or JSON with line boxes, layout block labels, reading order, confidences, and per-page timings
  • Digital PDFs: prefers a usable text layer; OCRs only what is missing (hybrid / auto mode)
  • Optional local viewer: indra-ocr-viewer draws boxes and reading order over each page
GitHub repository page screenshot for datalab-to/indra

Install and quickstart

Python 3.10+. Dependencies include ONNX Runtime, OpenCV, and pypdfium2. Models download from Hugging Face on first run (or set INDRA_OCR_MODEL_DIR / --model-dir).

pip install indra-ocr

indra-ocr paper.pdf                   # markdown to stdout
indra-ocr *.pdf --out results/        # one .md per file, all cores
indra-ocr scan.png --format json      # lines, boxes, layout blocks
indra-ocr paper.pdf --mode ocr --timings
indra-ocr paper.pdf --math            # opt-in LaTeX for math lines
indra-ocr-viewer                      # local viewer (default http://localhost:8765)

From Python:

import indra_ocr

conv = indra_ocr.load()
for i, page in conv.convert("paper.pdf"):
    print(page.source, page.timings["total_ms"])
    print(page.markdown)

For batches, indra_ocr.convert_many runs one single-threaded worker per core, one page per task (guard with if __name__ == "__main__": on macOS/Windows). Useful CLI flags include --format md|text|json, --mode auto|ocr|text, --cores N, --keep-furniture, and --dpi (default 200 for PDF render).

Outputs worth caring about

Each page object can expose:

  • markdown — headings, paragraphs, lists; tables as HTML; headers/footers omitted unless --keep-furniture
  • lines — box + text + confidence
  • blocks — labeled layout blocks in reading order (Text, Section-Header, List-Group, Table, Caption, Footnote, Form, TOC, page header/footer, etc.)
  • source — text, ocr, hybrid, or error
  • Optional --math for inline LaTeX on math lines (off by default; slower; math models download only when enabled)

Vendor benchmark snapshot

OmniParseBench (16,288 tests / 2,937 pages), x86, 4 vCPUs, one page at a time, default settings—figures from Datalab:

Engine Headline Text Tables Layout Median ms/page
Indra OCR (auto) 62.1 41.3 56.4 88.6 228
Indra OCR (OCR only) 57.5 33.5 50.9 88.2 303
Indra OCR --math 66.8 57.5 54.8 88.1 ~360
PaddleOCR PP-OCR text (via RapidOCR) — 35.8 0.0 — 2,685
Tesseract 5 — 19.3 0.0 — 5,496
PaddleOCR PP-StructureV3 58.4 55.6 47.8 71.7 40,958

Throughput on the same machine (OCR mode, pages/s): Indra 7.3 / 14.2 / 27.2 / 49.4 at 4/8/16/32 cores versus roughly 0.65–4.28 for PP-OCR text models and 0.78–2.92 for Tesseract 5 in Datalab’s table. Datalab markets ~11–17× faster than those OCR engines on 32 cores, and notes digital text-layer pages can be faster still (median ~130 ms vs ~304 ms for OCR pages in one throughput run).

Languages and limits

  • OCR scripts (scans/images): Latin (~50 languages), Cyrillic, Greek, Devanagari, Bengali, Chinese (simplified & traditional)
  • Digital PDF text layer: any script Datalab checked across many language families (including Arabic, Hebrew, Thai, Japanese, Korean); RTL order preserved when the layer is used
  • Weak spots (documented): complex/merged-cell tables, handwriting (~8% on OmniParseBench handwriting tests), degraded old scans (~20% on old-scan tests), vertical text, scripts outside the OCR list on pure images, math unless --math is on

For harder documents, Datalab points to its managed Chandra OCR on the Datalab platform (higher accuracy positioning, separate product/pricing, with SOC 2 Type 2 and related enterprise notes on the HF page).

License

Per Hugging Face: code is Apache 2.0; model weights use a modified OpenRAIL-M (free for research, personal use, and startups under $20M funding/revenue; competitive-use restrictions vs Datalab’s API). Broader commercial licensing is via Datalab pricing.

Who should try it

  • CPU-only pipelines that need high throughput on clean digital or lightly scanned print
  • Teams that want layout-aware markdown/JSON without standing up a heavy GPU OCR stack
  • Classification / segmentation preprocessing where “good enough” text plus structure matters more than perfect table reconstruction
  • Not ideal as a sole engine for handwriting, nasty tables, or non-supported scripts on scans

Bottom line

Indra OCR is a deliberately small, fast CPU OCR from Datalab: ~1M params, ~49 pps on 32 cores in vendor tests, and practical markdown/JSON with boxes. Install with pip install indra-ocr, start in auto mode, enable --math only when needed, and read the OpenRAIL weight terms before commercial deployment.

Sources

Sources verified Oct 17, 2026 (Pacific Time)

RSS
Follow by Email