Tesseract — это кроссплатформенный механизм распознавания текста с открытым исходным кодом, первоначально разработанный Hewlett Packard, но в настоящее время поддерживаемый Google. В этом посте я хочу поделиться некоторыми полезными советами о том, как добиться от него максимальной производительности. Я не буду описывать основы, которые можно найти в официальных документах.

0. Знайте свои данные

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

1. Настройте параметры

Теперь к реальным советам, связанным с Tesseract. Вот список наиболее важных параметров Tesseract:

  • Обученные данные. На момент написания статьи пакет tesseract-ocr-eng APT для Ubuntu 18.10 изначально имел ужасную производительность, вероятно, из-за поврежденных обучающих данных. Скачать файл данных отдельно здесь и добавить параметр --tessdata-dir при вызове движка из консоли.
  • Режим сегментации страницы (--psm). Это влияет на то, как Tesseract разбивает изображение на строки текста и слова. Выберите тот, который лучше всего подходит для вас.

Автоматический режим намного медленнее, чем более конкретные, и может повлиять на производительность. Иногда можно реализовать простой конвейер извлечения полей для конкретного домена и объединить его с режимом сегментации страниц по одной строке (7) или по одному слову (8).

  • Режим двигателя (--oem). Tesseract имеет несколько режимов работы двигателя с разной производительностью и скоростью. Tesseract 4 представил дополнительный режим нейронной сети LSTM, который часто работает лучше всего. К сожалению, пока нет поддержки LSTM на Android fork.

  • Белый список персонажей (-c tessedit_char_whitelist="XYZ"). В версии 4 белые списки поддерживаются только в устаревшем режиме движка (--oem 0).

Вот пример изображения в градациях серого с соответствующим исполняемым вызовом Tesseract:

2. Исправить перекос

Tesseract обычно успешно исправляет перекос до 5 градусов. Однако лучше всего исправить поворот изображения перед передачей его в OCR.

3. Не обрезайте изображение слишком близко

Tesseract ожидает, что изображение будет иметь несколько пустых полей (фонового цвета) вокруг текста. Это редко случается, когда текстовые области извлекаются автоматически, и вы можете задаться вопросом, почему производительность OCR такая плохая. Чтобы это исправить, просто добавьте изображения с фоновым цветом на 20% высоты строки текста. Давайте посмотрим, как обрезка повлияет на OCR изображения выше:

Он по-прежнему выглядит прекрасно читаемым, но вот что мы получаем при попытке его распознавания:

4. Постобработка результатов OCR

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

  • Числовые и текстовые поля. Если вы ожидаете, что поле или отдельное «слово» будет состоять из цифр или букв, примените правильную замену неоднозначных символов. Это наиболее распространенные:

  • Словарные слова. Для текста, который, как ожидается, будет состоять из словарных слов, выполняйте проверку словаря на небольшом дистанции редактирования или используйте библиотеку проверки орфографии. Несмотря на то, что Tesseract имеет встроенную функциональность, у меня она часто не работала так, как ожидалось.
  • Пунктуация. Такие символы, как -.,;, трудно распознаются. Если, скажем, вам нужно разобрать дату, считайте, что у вас их нет. Используйте регулярное выражение, например: [0-9]{2}[-\\. ]{1,2}[0-9]{2}[-\\. ]{1,2}(19|20)[0-9]{2}

Наконец, обратитесь к Руководству по производительности Tesseract для получения дополнительных идей. Удачи!

Первоначально опубликовано на ai-facets.org.