Это мой первый пост об оптическом распознавании текста (OCR) с использованием Tesseract. Tesserast это очень популярная open source библиотека для OCR поддерживаемая Google, которая дает высокие результаты точности и поддерживает более 100 языков. В этом посте я расскажу как можно работать со стандартным словарем для языковой модели Tesseract и настроить его под свои нужды. Кому интересно, прошу под кат.
Для распознавания текста на конкретном языке Tesseract использует языковые модели и словари. Языковая модель содержит в себе значения параметров модели нейронной сети и другие данные обучения. Например, языковая модель для английского языка хранится в файле eng.traineddata. Пользователь может создать свой список слов для Tesseract так, чтобы Tesseract мог научиться их распознавать.
Tesseract позволяет расширять стандартный словарь для любого поддерживаемого языка добавлением собственных слов либо обучить языковую модель полностью заменив слова стандартного словаря своими словами.
Tesseract использует специальные файлы .dawg для различных категорий слов в словаре. Например, файл .word-dawg используется для основных слов словаря, а файл freq-dawg — для наиболее часто встречающихся слов. Более подробную информацию по вопросу можно найти здесь.
Данное руководство можно применить для версий 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:
Кроме самой библиотеки Tesseract эта команда также установит все необходимые инструменты для обучения языковой модели (training tools).
Для начала расширим языковую модель своими словами. Для примера мы хотим расширить модель для английского языка. Создадим обычный текстовый файл с названием wordlistfile и добавим в него слова, которые мы хотим добавить в словарь модели, по одному с новой строки.
Затем перейдет в папку tessdata. Нам нужны права root для выполнения операций в этой системной папке
Скопируем файл wordlistfile в эту папку. Распакуем файл языковой модели eng.traineddata в папку traineddat_backup
Эта команда извлекает все файлы, необходимые для компиляции языковой модели в папку traineddat_backup.
Теперь создадим файл eng.lstm-word-dawg из нашего файла wordlistfile с помощью утилиты wordlistfile
и скомпилируем новый файл языковой модели eng.traineddata
Мы получим файл языковой модели eng.traineddata из наших собственных слов словаря.
Теперь обучим языковую модель eng полностью заменив слова стандартного словаря своими словами. Сначала нам нужно сделать бэкап всех файлов dawg (.lstm-word-dawg, .lstm-freq-dawg итд), находящихся в папке traineddat_backup, поскольку мы заменим их новыми. Просто создадим папку tmp и перенесем в нее все файлы dawg.
После этого скопируем наш файл eng.lstm-word-dawg, созданный ранее, в папку traineddat_backup. Перейдем в эту папку и скомпилируем новую языковую модель
где output — имя текстового файла для записи результата OCR или ‘stdout’ для вывода в терминал.
Tesseract использует файлы конфигурации (простые текстовые файлы, содержащие переменные и их значения в виде «ключ — значение», разделенные пробелами), которые позволяют пользователю контролировать результат OCR. Вы можете создать собственную конфигурацию (myconf) и поместить ее в папку configs внутри папки tessdata и указать имя конфигурации при использовании Tesseract:
где 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). Более подробно о параметрах управления можно прочитать здесь.
Я использовал такие значения в своем конфиге:
Это позволило распознать некоторые слова из моего словаря.
Пока на этом все. Всем удачи в использовании Tesseract для задачи OCR и до новых встреч!
Языковые модели и словари 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 и до новых встреч!
aragont
Не стоит использовать sudo su по каждому поводу. Лучше скопировать языковые файлы в домашний каталог и установить переменную окружения:
cp -a /usr/share/tesseract/tessdata/ ~
export TESSDATA_PREFIX=~/tessdata
vovaekb90 Автор
Спасибо за совет!