Skip to content

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

Текст на компонентах изображения распознатеся с помощью технологии OCR. В качестве OCR используется open-source решение Tesseract. Однако Tesseract является очень требовательным к качеству изображения (не менее 300 dpi, отсутствие шумов, сглаженный текст).

Info

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

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

Стратегии

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

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

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

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

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

  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