Skip to content

Распознавание текста

NeuroControl распознает текст на изображениях и компонентах интерфейса с помощью OCR. Распознавание текста используется, например, при поиске элемента по надписи, поиске текста на уже найденном компоненте и распознавании таблиц.

В сценариях NC AI Platform параметры OCR передаются из шагов фреймворка в NeuroControl. Поставляемый фреймворк позволяет передать в NeuroControl параметр ocr_model со значением TESSERACT или NANONETS. Это выбор способа обработки запроса, а не признак того, что оба OCR-сервиса развернуты в контуре.

TESSERACT

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

Движок использует open-source решение Tesseract. Tesseract требователен к качеству изображения: для хорошего результата важны достаточное разрешение, отсутствие шумов и сглаженный текст.

Info

Подробнее про OCR Tesseract можно найти здесь

Изображения и вырезанные компоненты зачастую не отвечают требованиям Tesseract, поэтому для улучшения качества производится предварительная обработка. Параметры использования этой предобработки и режимы работы Tesseract (язык, режим сегментации страницы) вынесены в отдельные параметры. Из-за большого числа этих параметров и различных результатов их комбинаций, для управления повышением качества OCR была введена сущность Стратегия.

NANONETS

NANONETS - вариант LLM-as-OCR. Для его работы требуется отдельный сервис Nanonets-OCR и настройка подключения NeuroControl к этому сервису. Если сервис не развернут или подключение не настроено, выбор ocr_model = NANONETS в шаге не обеспечит распознавание текста: запрос будет отправлен в NeuroControl, но выполнение OCR через Nanonets завершится ошибкой обращения к сервису.

Для NANONETS можно управлять промптом распознавания текста. Стандартный промпт задается в конфигурации NeuroControl. Пользователь может переопределить его в NC AI Platform:

  • для проекта - в настройках проекта, секция «Настройки запуска фреймворков», группа NeuroControl;
  • для отдельного шага - в параметре custom_prompt этого шага.

Промпт именно переопределяет стандартный промпт OCR-инструмента, а не дополняет его. Значение выбирается по следующему приоритету:

  1. custom_prompt в параметрах конкретного шага;
  2. custom_prompt в настройках проекта;
  3. стандартный промпт OCR-инструмента.

Параметр custom_prompt применяется только при ocr_model = NANONETS. Если в шаге или в настройках проекта указан custom_prompt, но шаг выполняется с ocr_model = TESSERACT, промпт не участвует в распознавании текста.

Настройка из NC AI Platform

Во фреймворке по умолчанию OCR-движок выбирается в параметре ocr_model в NC-шагах, которые выполняют поиск текста или распознавание таблиц,

Проектный custom_prompt задается на странице настроек проекта в секции «Настройки запуска фреймворков», в группе NeuroControl. Параметры конкретного шага отображаются в панели параметров команды, см. Параметры команд.

Стратегии Tesseract

Стратегия является набором параметров обработки изображений и настройки работы Tesseract. Эти параметры подобраны эмпирически и обеспечивают более стабильное распознавание текста по сравнению с отдельными неподобранными комбинациями.

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

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

Механизм работы стратегий при распознавании элементов

Распознавание текста с использованием стратегий применяется в следующих случаях:

  1. find_by - полное распознавание, в том числе с текстом

  2. find_text - поиск текста на уже вырезанном компоненте

  3. Показ результатов прогона всех стратегий в UI NeuroMoon

  4. /api/v2/find/text - Альтернатива find_text для удобства использования

Find_by

За использование стратегии отвечает необязательный query-параметр ocr_strategy.

Info

Стоит помнить, что в find_by распознавание текста будет производиться если только передан запрашиваемый текст или тип TextElement. Описание концепций распознавания

Если этот параметр не передать, то будет произведен прогон стратегий последовательно до тех пор, пока не будет найдено совпадение или не пройдут все стратегии

Warning

Последовательный прогон длится гораздо дольше, чем асинхронный (кроме тех случаев, когда результат было найден на первой стратегии). В будущем, возможно, везде будет использован асинхронный прогон всех стратегий. В таком случае отсутствие стратегии является более худшим методом прогона всех стратегий, который вернет первое попавшееся совпадение.

Если явно указана стратегия, будет использоваться только указанная стратегия.

Если указан текст (для TextElement) и передано значение all, то будет произведен асинхронный прогон всех стратегий. Будет возвращен лучший результат (для всех типов в find_by).

Info

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

Warning

При поиске TextElement с помощью локализации Tesseract при прогоне всех стратегий не будут задействованы стратегии find_text и main. Это связано с параметром сегментации страницы в этих стратегиях.

Find_text и прогон стратегий в UI

Find_text и прогон стратегий в UI практически реализуют одно и то же и обладают одинаковым поведением. Так как в find_text и в прогоне стратегий UI передается уже вырезанный компонент, будут возвращены результаты всех стратегий.

alt_text

Info

Формат словарей списка components :
  - name - наименование стратегии
  - text - распознанный текст, полученный с использованием стратегии, указанной в name

Результаты прогона UI и работы find_text на одном компоненте должны быть одинаковыми. Также они должны быть одинаковыми с результатами работы find_by если ищется не TextElement

Warning

Результаты, полученные с find_by с поиском TextElement, а затем уже выбранные оттуда отдельные компоненты пропущенные через find_text и UI могут и скорее всего будут отличаться от того, что выдал find_by. Это связано с различными механизмами работы: TextElement (с локализацией Tesseract) обрабатывает исходную картинку целиком, а в find_text обрабатывается только один компонент

/api/v2/find/text

Возвращает список уникальных значений, полученных после прогона стратегий без и с использованием нейронной сети для локализации текста. Аналогичен двум запросам на /find_text с различными значениями параметра yolo_loc, затрачивая при этом меньше времени за счет асинхронности запросов к OCR.

Параметры стратегий

lang: str = "rus"
psm: int = 6
zoom: float = 1.5
cut: Union[int, float] = 0
cut_policy: str = "left_right"
thresholding: bool = False
text_post_processing: bool = True
remove_halo: bool = False
use_cache: bool = False

Наименования стратегий

find_text, find_button, find_text_bbox, find_text_bbox_default, find_with_threshold

Info

Увидеть список стратегий и их параметры можно в блоке OCR Strategy в Swagger