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. Перед внедрением в коммерческий продукт стоит проверить полный текст лицензии весов и условия именно своего сценария.