Indra OCR — распознавание документов на CPU

Indra OCR извлекает текст и структуру из PDF и изображений, возвращая Markdown или JSON с координатами строк и блоков. Пакет рассчитан на быструю работу на CPU.

Indra OCR — пакет с открытым исходным кодом для распознавания печатного текста и разбора структуры PDF и изображений. Распознаватель содержит около 1 млн параметров, а комплект моделей для ONNX Runtime занимает примерно 18 МБ. Проект рассчитан на обработку документов на процессоре: GPU для запуска не требуется.

Что умеет Indra OCR

Инструмент возвращает не только сплошной текст. Он определяет строки и смысловые блоки страницы, подписывает типы блоков и сохраняет порядок чтения. Результат можно получить в Markdown, обычном тексте или JSON.

Текст, структура и координаты

В JSON для каждой распознанной строки доступны текст, координаты ограничивающего прямоугольника и оценка уверенности. Для блоков указываются рамка и тип: например, заголовок раздела, список, таблица, подпись или сноска. Такая структура помогает не терять расположение элементов при поиске, индексации и последующей обработке документов.

В Markdown заголовки, абзацы и списки представлены в привычном виде, а таблицы могут сохраняться как HTML-таблицы. По умолчанию повторяющиеся колонтитулы исключаются. Для проверки результата в комплект входит локальный просмотрщик, который накладывает найденные рамки на исходную страницу.

PDF с текстовым слоем и сканы

Если в PDF уже есть пригодный для копирования текстовый слой, Indra OCR использует его и запускает распознавание там, где текст отсутствует, например внутри изображения. Для сканов и изображений применяется OCR. Поэтому цифровые PDF обычно обрабатываются быстрее, чем страницы, которые приходится полностью распознавать.

Скорость и результаты тестирования

В опубликованном Datalab замере пакет обработал 49,4 страницы в секунду на 32-ядерном процессоре AMD EPYC. На той же машине и тех же 300 страницах тестового набора PaddleOCR PP-OCRv6 показал 4,28 страницы в секунду, а Tesseract 5 — 2,92. Это пакетная производительность с отдельным рабочим процессом на каждое ядро, а не скорость на любом компьютере или время распознавания одной страницы.

В тесте OmniParseBench оценка Indra OCR по извлечению текста составила 41,3 балла; для текстовых моделей PaddleOCR PP-OCRv6 указано 35,8, для Tesseract 5 — 19,3. Это баллы конкретного набора проверок, а не процент точности. Сравнение проводилось на одинаковых страницах и с настройками по умолчанию; в режиме по умолчанию Indra может использовать текстовый слой PDF.

Что означают эти цифры на практике

Сильная сторона Indra OCR — быстрая обработка больших массивов аккуратно напечатанных документов без графического ускорителя. В бенчмарке с четырьмя виртуальными CPU одна страница занимала в медиане около 228 мс в автоматическом режиме. На реальной скорости повлияют процессор, разрешение скана, число ядер и доля страниц с текстовым слоем.

Поддерживаемые документы и ограничения

Для сканов и изображений распознаются латинские письменности (примерно 50 языков), кириллица, греческий, деванагари, бенгальское письмо и китайские иероглифы. В цифровых PDF с исправным текстовым слоем доступны и другие письменности — распознаватель извлекает текст из самого PDF.

  • Рукописный текст не поддерживается.
  • Сложные таблицы с объединёнными ячейками, многоуровневыми заголовками или переносами текста могут терять структуру.
  • Старые и выцветшие сканы распознаются хуже чистой печати.
  • Математические формулы по умолчанию передаются как обычный текст. Дополнительный режим --math формирует LaTeX, но работает медленнее.
  • Вертикальный текст не поддерживается; некоторые письменности, включая арабскую, иврит, японскую и корейскую, для сканов не входят в список OCR-языков.

Поэтому Indra OCR лучше подходит для чистых печатных документов, чем для универсального разбора сложных архивов. Если нужен отдельный локальный инструмент для распознавания текста, можно также посмотреть Light-OCR.

Установка и форматы вывода

Пакет устанавливается через Python. Поддерживается Python 3.10 и новее; разработчики указывают Linux на x86-64 и ARM64, а также macOS на Apple Silicon. Используется ONNX Runtime, PyTorch не требуется. При первом запуске модели загружаются с Hugging Face и кешируются локально.

pip install indra-ocr
indra-ocr document.pdf
indra-ocr *.pdf --out results/
indra-ocr scan.png --format json

Первая команда выводит Markdown в терминал, вторая сохраняет отдельный результат для каждого файла, третья формирует JSON с координатами строк и блоков. В Python можно подключить indra_ocr и обрабатывать страницы по одной либо запускать пакетную обработку нескольких файлов.

Лицензия

Код проекта распространяется по Apache 2.0, но для весов модели действует отдельная модифицированная лицензия OpenRAIL-M. В README авторы указывают бесплатное использование для исследований, личных проектов и стартапов с финансированием или выручкой менее 20 млн долларов, а также ограничение на конкурирующее использование с их API. Перед внедрением в коммерческий продукт стоит проверить полный текст лицензии весов и условия именно своего сценария.