Tesseract OCR tips — создание своего словаря для повышения эффективности OCR

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.
Это мой первый пост об оптическом распознавании текста (OCR) с использованием Tesseract. Tesserast это очень популярная open source библиотека для OCR поддерживаемая Google, которая дает высокие результаты точности и поддерживает более 100 языков. В этом посте я расскажу как можно работать со стандартным словарем для языковой модели Tesseract и настроить его под свои нужды. Кому интересно, прошу под кат.

Языковые модели и словари Tesseract


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

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

Tesseract использует специальные файлы .dawg для различных категорий слов в словаре. Например, файл .word-dawg используется для основных слов словаря, а файл freq-dawg — для наиболее часто встречающихся слов. Более подробную информацию по вопросу можно найти здесь.

Кастомизация языковой модели Tesseract


Данное руководство можно применить для версий Tesseract 3.0.5 и 4.0.0. Единственное отличие Tesseract 4.0.0 от более ранней 3.0.х в том, что в версии 4 в основе Tesseract лежит модель LSTM и файлы словаря dawg имеют расширение lstm--dawg (в версии v3.0.5 они имеют расширение -dawg). Так например файл наиболее часто встречающихся слов теперь имеет расширение lstm-freq-dawg вместо freq-dawg, а файл unicharset получил расширение lstm-unicharset (ранее .unicharset).

Для начала установим библиотеку Tesseract OCR. В этом туториале я использую ОС Ubuntu (я использовал Ubuntu 18.04) и Tesseract v4. Просто установим Tesseract с помощью пакета apt:

sudo apt update && sudo apt install tesseract-ocr

Кроме самой библиотеки Tesseract эта команда также установит все необходимые инструменты для обучения языковой модели (training tools).

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

Затем перейдет в папку tessdata. Нам нужны права root для выполнения операций в этой системной папке

sudo su

Скопируем файл wordlistfile в эту папку. Распакуем файл языковой модели eng.traineddata в папку traineddat_backup

combine_tessdata -u eng.traineddata traineddat_backup/eng.

Эта команда извлекает все файлы, необходимые для компиляции языковой модели в папку traineddat_backup.

Теперь создадим файл eng.lstm-word-dawg из нашего файла wordlistfile с помощью утилиты wordlistfile

wordlist2dawg wordlistfile eng.lstm-word-dawg traineddat_backup/eng.lstm-unicharset

и скомпилируем новый файл языковой модели eng.traineddata

combine_tessdata -o eng.traineddata eng.lstm-word-dawg

Мы получим файл языковой модели eng.traineddata из наших собственных слов словаря.

Теперь обучим языковую модель eng полностью заменив слова стандартного словаря своими словами. Сначала нам нужно сделать бэкап всех файлов dawg (.lstm-word-dawg, .lstm-freq-dawg итд), находящихся в папке traineddat_backup, поскольку мы заменим их новыми. Просто создадим папку tmp и перенесем в нее все файлы dawg.

После этого скопируем наш файл eng.lstm-word-dawg, созданный ранее, в папку traineddat_backup. Перейдем в эту папку и скомпилируем новую языковую модель

combine_tessdata eng.
</source
Чтобы использовать новую языковую модель ее нужно скопировать в папку tessdata и дать любое название из трех букв (например cus - custom). 

Чтобы проверить OCR с Tesseract на новой модели выполним команду:

<source lang="bash">
tesseract <image> -l <your_model> <output>

где output — имя текстового файла для записи результата OCR или ‘stdout’ для вывода в терминал.

Файлы конфигурации в Tesseract OCR


Tesseract использует файлы конфигурации (простые текстовые файлы, содержащие переменные и их значения в виде «ключ — значение», разделенные пробелами), которые позволяют пользователю контролировать результат OCR. Вы можете создать собственную конфигурацию (myconf) и поместить ее в папку configs внутри папки tessdata и указать имя конфигурации при использовании Tesseract:

tesseract <image> <options> myconf

где options: out — имя файла для вывода результата или ‘stdout’,-l — языковая модель, — psm — метод постраничной сегментации (Page segmentation method).

Tesseract предоставляет множество параметров управления для настройки вывода и повышения точности OCR. Так здесь есть переменные, контролирующие использование словарей, например исключение слов, которых нет в word_dawg / user_words (language_model_penalty_non_freq_dict_word и language_model_penalty_non_dict_word). Более подробно о параметрах управления можно прочитать здесь.

Я использовал такие значения в своем конфиге:

language_model_penalty_non_freq_dict_word 1
language_model_penalty_non_dict_word 1

Это позволило распознать некоторые слова из моего словаря.

Пока на этом все. Всем удачи в использовании Tesseract для задачи OCR и до новых встреч!
Источник: https://habr.com/ru/post/466571/


Интересные статьи

Интересные статьи

Наверняка многие ведут учет сделок и следят за состоянием своего портфеля в Google-таблицах или в Excel. Раньше мне приходилось вручную вносить информацию о каждом купленном или прода...
Сегодня я хотел бы показать вам, как создать свой собственный Publisher в новом фреймворке от Apple Combine.
От скорости сайта зависит многое: количество отказов, брошенных корзин. Согласно исследованию Google, большинство посетителей не ждёт загрузки больше 3 секунд и уходит к конкурентам. Бывает, что сайт ...
Это вторая часть цикла статей про разбор сетевого трафика мобильной MMORPG. Примерные темы цикла: Разбор формата сообщений между сервером и клиентом. Написание прослушивающего приложения дл...
В данной статье я хочу рассказать про две возможности NGINX Ingress, связанные с отображением персонализированных страниц с ошибками, а также о существующих в них ограничениях и способах их о...