30 December 2019

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

Machine learning
Это мой первый пост об оптическом распознавании текста (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 и до новых встреч!
Tags:optical character recognitiontesseractсловарьязык
Hubs: Machine learning
+6
7.7k 63
Comments 2