Skip to content

ocr ​

Сервис распознавания сканов и фотографий: как устроена фоновая задача, какие модели используются и какие у сервиса слабые места.

Назначение ​

Принимает скан, фотографию страницы или PDF, состоящий из изображений, и распознаёт текст. Определяет разметку страницы, находит таблицы, читает текст. Возвращает два файла: markdown для чтения и json с постраничным текстом.

В платформе источник называется OCR. Репозиторий называется paleograph, внутренняя настройка сервиса называет его ocr-mcp.

Про имя hippocampus

Заголовок файла README в репозитории paleograph называет сервис hippocampus. Это устаревшая надпись: в коде, настройках и тестах такого имени нет ни разу. На архитектурной схеме продукта Hippocampus нарисован внутри базы знаний, а не здесь.

Инструменты ​

Три инструмента, модель видит два.

ИнструментКто вызываетНазначение
init_eva_sessionТолько RuntimeПривязка сессии
parseМодельЗапуск распознавания, возвращает номер задачи
parse_resultМодельОпрос состояния задачи

Распознавание идёт минутами, поэтому оно построено как фоновая задача. Модели предписано опрашивать состояние примерно раз в 15 секунд.

Особая форма параметров

В отличие от остальных сервисов, параметры здесь передаются не по отдельности, а одним вложенным объектом payload. Это стоит проверить на стенде: платформа должна надёжно формировать именно такую форму вызова.

Что за ним стоит ​

Механизм распознавания выбирается настройкой.

НастройкаЧто используется
recognitor (по умолчанию)Закрытая сборка ZeBrains, объединяющая несколько механизмов распознавания
got_ocrGOT-OCR2.0
qwen_mlxQwen2.5-VL, только на процессорах Apple

В зависимостях закреплены Surya OCR, PaddleOCR вместе с PaddlePaddle, EasyOCR, а также torch и transformers.

ПараметрЗначение
Разрешение отрисовки PDF200 точек на дюйм
Предел длины ответа модели распознавания4096 токенов
УстройствоВидеокарта в основном режиме, Apple MPS в режиме для разработки
Закрытый источник пакетовТребуется для установки закрытых зависимостей

Точный состав моделей неизвестен

Основной механизм распознавания это закрытый пакет, которого нет на диске. По зависимостям видно, какие семейства он может использовать, но не видно, какие именно контрольные точки моделей и каких версий там внутри. Ещё в двух файлах зависимостей указаны разные версии этого пакета. Список моделей нужно подтверждать у команды.

Ограничения ​

ОграничениеПодробности
Форматы у открытых механизмовТолько изображения и PDF. Описание сервиса при этом обещает ещё и офисные форматы, но открытые механизмы их не читают
Предел размера файлаОтсутствует вообще. Единственный сервис без такой проверки
Одновременная работаОдин рабочий поток. Все распознавания идут строго по очереди
Таймаут задачиОтсутствует
ПерезапускВсе задачи и очередь теряются без предупреждения
Повторный опрос готовой задачиПервый опрос забирает результат и удаляет задачу. Второй опрос вернёт ошибку «задача неизвестна»
Одновременных задач в памятиПять. При шестой самая старая молча вытесняется

Модель загружается заново на каждый документ

По умолчанию включён режим, при котором модель выгружается из памяти после каждой работы и загружается снова на следующей. Это экономит память, но стоимость загрузки модели платится за каждый документ.

Имена файлов результата берутся такими, какими их создал механизм распознавания. Два документа с одинаковым началом имени затрут результаты друг друга.

Замечание по безопасности ​

Настройка логирования в этом сервисе состоит из нескольких строк и не содержит скрытия чувствительных значений. Обращения к файлам чата идут с ключом доступа в адресе, а значит ключ попадает в логи в открытом виде.

Все остальные сервисы, кроме searcher, это скрытие выполняют, и оно же требуется их общим внутренним регламентом. Это единственный настоящий пробел в обращении с секретами среди переданных сервисов.

Развёртывание ​

ПараметрЗначение
ТранспортТолько Streamable HTTP, задан в коде
ПортВ настройках 8002, в описании и примере окружения 8802
Образpython:3.12, плюс системные библиотеки для работы с изображениями
Файл для docker composeОтсутствует

Разные значения порта

Порт указан в трёх местах и двумя разными значениями. На стенде источник OCR подключён по порту 8802, значит рабочее значение именно это.

Документация платформы EVA