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

Создать контейнер Ubuntu

1. Откройте терминал.

2. Извлеките образ Ubuntu Docker:

docker pull ubuntu

Если вас интересует конкретная версия, вы можете указать ее:

docker pull ubuntu:22.04

3. Запустите образ Docker:

docker run -ti --rm ubuntu /bin/bash

Примечание. По умолчанию образ Docker Ubuntu не имеет доступной команды lsb_release. Вместо этого вы можете использовать команду cat для проверки информации об ОС.

4. Проверьте версию ОС:

cat /etc/os-release

Если пакет lsb-release не установлен, обновите исходники пакета и установите его:

apt update && apt install lsb-core

Еще раз проверьте версию ОС:

lsb_release -a

5. Создайте общий каталог между вашей хост-системой и контейнером Docker: в терминале контейнера создайте каталог с именем Docker_Share:

mkdir -p Docker_Share

Убедитесь, что каталог создан:

ls

6. В отдельном терминале на хост-компьютере проверьте идентификатор текущего работающего контейнера:

docker ps

Запишите идентификатор контейнера.

7. Сохраните состояние контейнера Docker как новый образ:

docker commit -p container_id new_image_name

Например:

docker commit -p 3409ehfu384f myubuntu

Замените container_id на идентификатор контейнера, полученный на предыдущем шаге, а new_image_name на желаемое имя нового образа.

8. Убедитесь, что новый образ был создан:

docker images

9. Остановите Docker-контейнер:

docker stop container_id

Замените container_id на полученный ранее ID контейнера.

10. Перезапустите контейнер с общими данными:

docker run -ti -v /host/machine/dir:/Docker_Share image_name /bin/bash

Например:

docker run -ti -v C:\training_data:/Docker_Share myubuntu /bin/bash

Замените /host/machine/dir на путь к каталогу на хост-компьютере, которым вы хотите поделиться с контейнером, image_name на имя нового образа, созданного на предыдущем шаге, и /bin/bash, чтобы запустить контейнер с терминалом.

Установите Tesseract 5 в контейнер

1. В терминале контейнера обновите исходники пакета и установите Git:

apt update && apt install git

2. Клонируйте репозиторий Tesseract:

git clone https://github.com/tesseract-ocr/tesseract.git

Убедитесь, что каталог tesseract создан:

ls

3. Установите необходимые для Tesseract вспомогательные библиотеки:

apt update && apt install autoconf automake libtool pkg-config libpng-dev libjpeg8-dev libtiff5-dev zlib1g-dev libwebpdemux2 libwebp-dev libopenjp2-7-dev libgif-dev libarchive-dev libcurl4-openssl-dev libicu-dev libpango1.0-dev libcairo2-dev libleptonica-dev

4. Перейдите в каталог /tesseract:

cd /tesseract

5. Запустите скрипт autogen.sh:

./autogen.sh

6. Запускаем скрипт configure:

./configure

7. Соберите и установите Tesseract OCR 5:

make
make install
ldconfig

8. Установите средства обучения Tesseract:

make training
make training-install

9. Клонируйте репозиторий tesstrain:

git clone https://github.com/tesseract-ocr/tesstrain.git

10. Перейдите в каталог tesstrain:

cd /tesseract/tesstrain

11. Установите wget и необходимые библиотеки Python:

apt update && apt install wget python3-pip
pip install -r requirements.txt

12. Получить языковые данные:

make tesseract-langdata

Получить тренировочные данные

Для обучения модели Tesseract OCR вам потребуются следующие обучающие данные:

  • [lang].[font].exp[number].tif (файл изображения строковой строки)
  • [lang].[font].exp[number].gt.txt (наземный текстовый файл)

Например:

  • chi_tra.DFKai.exp0.tif
  • chi_tra.DFKai.exp0.gt.txt

Необязательные обучающие данные включают в себя:

  • [язык].[шрифт].exp[номер].box

Файлы .box содержат информацию о позициях символов на изображении, улучшая процесс обучения и точность модели.

Переместите все обучающие данные в каталог, общий для контейнера Docker. Например, если ваш общий каталог на хост-компьютере — C:\training_data, поместите все файлы .gt.txt, .tif и .box в этот каталог.

Следите за новостями, в которых я подробно расскажу о процессе создания обучающих данных.

Организуйте тренировочные данные

1. Скопируйте тренировочные данные из общего каталога в соответствующее место:

cp -r /Docker_Share /tesseract/tesstrain/data/[lang].[font]-ground-truth

Замените [lang].[font] информацией о соответствующем языке и шрифте.

2. Скачайте нужные вам файлы обучаемых данных из репозитория tessdata_best. Обязательно загрузите файл eng.traineddata для любого языка, который вы изучаете. Например, если вы тренируете традиционный китайский (чи_тра), загрузите файл chi_tra.traineddata.

3. Переместите загруженные файлы обучаемых данных в общий каталог. Например, переместите eng.traineddata и chi_tra.traineddata в C:\training_data на хост-компьютере.

4. Переместите файлы обучаемых данных в каталог обучения по умолчанию:

mv /Docker_Share/*.traineddata /usr/local/share/tessdata/

Теперь ваши обучающие данные организованы и готовы для обучения новой модели.

Начать обучение

1. Перейдите в каталог обучения:

cd /tesseract/tesstrain

2. Если у вас есть файлы .box и вы хотите избежать их перезаписи в процессе обучения, измените Makefile:

apt update && apt install nano
cd /tesseract/tesstrain
nano Makefile

Найдите строки, начинающиеся с %.box, и закомментируйте их.

Оригинальные строки:

%.box: %.png %.gt.txt
    PYTHONIOENCODING=utf-8 $(PY_CMD) $(GENERATE_BOX_SCRIPT) -i "$*.png" -t "$*.gt.txt" > "$@"

%.box: %.bin.png %.gt.txt
    PYTHONIOENCODING=utf-8 $(PY_CMD) $(GENERATE_BOX_SCRIPT) -i "$*.bin.png" -t "$*.gt.txt" > "$@"

%.box: %.nrm.png %.gt.txt
    PYTHONIOENCODING=utf-8 $(PY_CMD) $(GENERATE_BOX_SCRIPT) -i "$*.nrm.png" -t "$*.gt.txt" > "$@"

%.box: %.raw.png %.gt.txt
    PYTHONIOENCODING=utf-8 $(PY_CMD) $(GENERATE_BOX_SCRIPT) -i "$*.raw.png" -t "$*.gt.txt" > "$@"

%.box: %.tif %.gt.txt
    PYTHONIOENCODING=utf-8 $(PY_CMD) $(GENERATE_BOX_SCRIPT) -i "$*.tif" -t "$*.gt.txt" > "$@"

Модифицированные строки:

# %.box: %.png %.gt.txt
#    PYTHONIOENCODING=utf-8 $(PY_CMD) $(GENERATE_BOX_SCRIPT) -i "$*.png" -t "$*.gt.txt" > "$@"

# %.box: %.bin.png %.gt.txt
#    PYTHONIOENCODING=utf-8 $(PY_CMD) $(GENERATE_BOX_SCRIPT) -i "$*.bin.png" -t "$*.gt.txt" > "$@"

# %.box: %.nrm.png %.gt.txt
#    PYTHONIOENCODING=utf-8 $(PY_CMD) $(GENERATE_BOX_SCRIPT) -i "$*.nrm.png" -t "$*.gt.txt" > "$@"

# %.box: %.raw.png %.gt.txt
#    PYTHONIOENCODING=utf-8 $(PY_CMD) $(GENERATE_BOX_SCRIPT) -i "$*.raw.png" -t "$*.gt.txt" > "$@"

# %.box: %.tif %.gt.txt
#    PYTHONIOENCODING=utf-8 $(PY_CMD) $(GENERATE_BOX_SCRIPT) -i "$*.tif" -t "$*.gt.txt" > "$@"

Нажмите Ctrl + O, а затем Enter, чтобы сохранить измененный Makefile.

Нажмите Ctrl + X, чтобы выйти из редактора.

3. Начните обучение новой модели:

make training MODEL_NAME=[lang].[font] TESSDATA=/usr/local/share/tessdata

Замените [lang].[font] информацией о соответствующем языке и шрифте.

4. Если вы хотите доработать существующую модель, используйте параметр START_MODEL:

make training MODEL_NAME=[lang].[font] START_MODEL=[lang] TESSDATA=/usr/local/share/tessdata

Замените [lang].[font] информацией о соответствующем языке и шрифте.

После обучения вы можете найти обученные данные новой модели в выходном пути по умолчанию:

cd /tesseract/tesstrain/data/[lang].[font]
ls

Замените [lang].[font] информацией о соответствующем языке и шрифте.

6. Скопируйте обученные данные новой модели в общий каталог:

cp /tesseract/tesstrain/data/[lang].[font]/[lang].[font].traineddata /Docker_Share

Замените [lang].[font] информацией о соответствующем языке и шрифте.

Файл обучаемых данных теперь будет доступен в общем каталоге на вашем хост-компьютере.

Ссылка

Подробные инструкции и дополнительную информацию можно найти на следующих ресурсах: