Перейти к основному содержимому

Оптическое распознавание символов с помощью Tesseract

· 6 мин. чтения

1. Обзор

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

В этом руководстве мы рассмотрим Tesseract, механизм оптического распознавания символов (OCR), с несколькими примерами обработки изображения в текст.

2. Тессеракт

Tesseract — это механизм OCR с открытым исходным кодом, разработанный HP, который распознает более 100 языков, а также поддерживает идеографические языки и языки с письмом справа налево. Также мы можем научить Tesseract распознавать другие языки .

Он содержит два механизма OCR для обработки изображений : механизм OCR LSTM (Long Short Term Memory) и устаревший механизм OCR, который работает путем распознавания шаблонов символов.

Механизм OCR использует библиотеку Leptonica для открытия изображений и поддерживает различные форматы вывода, такие как обычный текст, hOCR (HTML для OCR), PDF и TSV.

3. Настройка

Tesseract доступен для загрузки/установки во всех основных операционных системах.

Например, если мы используем macOS, мы можем установить механизм OCR с помощью Homebrew :

brew install tesseract

Мы заметим, что пакет содержит набор файлов языковых данных, таких как английский, а также определение ориентации и сценария (OSD) по умолчанию:

==> Installing tesseract 
==> Downloading https://homebrew.bintray.com/bottles/tesseract-4.1.1.high_sierra.bottle.tar.gz
==> Pouring tesseract-4.1.1.high_sierra.bottle.tar.gz
==> Caveats
This formula contains only the "eng", "osd", and "snum" language data files.
If you need any other supported languages, run `brew install tesseract-lang`.
==> Summary
/usr/local/Cellar/tesseract/4.1.1: 65 files, 29.9MB

Однако мы можем установить модуль tesseract-lang для поддержки других языков:

brew install tesseract-lang

Для Linux мы можем установить Tesseract с помощью команды yum :

yum install tesseract

Аналогичным образом добавим языковую поддержку:

yum install tesseract-langpack-eng
yum install tesseract-langpack-spa

Здесь мы добавили обученные языку данные для английского и испанского языков.

Для Windows мы можем получить установщики от Tesseract в UB Mannheim .

4. Командная строка Tesseract

4.1. Бежать

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

Например, давайте сделаем снимок нашего сайта:

./f181645bd123518ed9ec561114e26be5.png

Затем мы запустим команду tesseract, чтобы прочитать снимок foreach.png и записать текст в файл output.txt :

tesseract foreach.png output

Файл output.txt будет выглядеть так:

a REST with Spring Learn Spring (new!)
The canonical reference for building a production
grade API with Spring.
From no experience to actually building stuff.
y
Java Weekly Reviews

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

4.2. Языковая поддержка

По умолчанию механизм OCR использует английский язык при обработке изображений. Однако мы можем объявить язык, используя аргумент -l :

Давайте посмотрим на другой пример с многоязычным текстом:

./cdf8e4539063d47e1097d35b11f965ce.png

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

tesseract multiLanguageText.png output

Вывод будет выглядеть так:

Der ,.schnelle” braune Fuchs springt
iiber den faulen Hund. Le renard brun
«rapide» saute par-dessus le chien
paresseux. La volpe marrone rapida
salta sopra il cane pigro. El zorro
marron rapido salta sobre el perro
perezoso. A raposa marrom rapida
salta sobre 0 cao preguicoso.

Затем давайте обработаем изображение с португальским языком:

tesseract multiLanguageText.png output -l por

Таким образом, OCR-движок также распознает португальские буквы:

Der ,.schnelle” braune Fuchs springt
iber den faulen Hund. Le renard brun
«rapide» saute par-dessus le chien
paresseux. La volpe marrone rapida
salta sopra il cane pigro. El zorro
marrón rápido salta sobre el perro
perezoso. A raposa marrom rápida
salta sobre o cão preguiçoso.

Точно так же мы можем объявить комбинацию языков:

tesseract multiLanguageText.png output -l spa+por

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

4.3. Режим сегментации страницы

Tesseract поддерживает различные режимы сегментации страниц, такие как OSD, автоматическая сегментация страниц и разреженный текст.

Мы можем объявить режим сегментации страницы, используя аргумент –psm со значением от 0 до 13 для различных режимов:

tesseract multiLanguageText.png output --psm 1

Здесь, определив значение 1, мы объявили автоматическую сегментацию страницы с OSD для обработки изображений.

Давайте рассмотрим все поддерживаемые режимы сегментации страниц:

./e23eeb71be633127fe10ae079b07f73a.png

4.4. Режим механизма оптического распознавания символов

Точно так же мы можем использовать различные режимы движка, такие как устаревший и LSTM-движок, при обработке изображений.

Для этого мы можем использовать аргумент –oem со значением от 0 до 3:

tesseract multiLanguageText.png output --oem 1

Режимы двигателя OCR:

./3b38e29051f5fdf8d19160eb0ef0c0c0.png

4.5. Тессдата

Tesseract содержит два набора обученных данных для механизма LSTM OCR — наиболее обученные модели LSTM и быстрые целочисленные версии обученных моделей LSTM .

Первый обеспечивает лучшую точность, а второй — более высокую скорость обработки изображений.

Кроме того, Tesseract предоставляет комбинированные обученные данные с поддержкой как устаревшего, так и LSTM OCR.

Если мы используем устаревший механизм OCR без предоставления вспомогательных обученных данных, Tesseract выдаст ошибку:

Error: Tesseract (legacy) engine requested, but components are not present in /usr/local/share/tessdata/eng.traineddata!!
Failed loading language 'eng'
Tesseract couldn't load any languages!

Таким образом, мы должны загрузить необходимые файлы .traineddata и либо сохранить их в расположении tessdata по умолчанию, либо объявить расположение с помощью аргумента –tessdata-dir :

tesseract multiLanguageText.png output --tessdata-dir /image-processing/tessdata

4.6. Выход

Мы можем объявить аргумент, чтобы получить требуемый формат вывода.

Например, чтобы получить PDF-файл с возможностью поиска:

tesseract multiLanguageText.png output pdf

Это создаст файл output.pdf с доступным для поиска текстовым слоем (с распознанным текстом) на предоставленном изображении.

Аналогично для вывода hOCR:

tesseract multiLanguageText.png output hocr

Кроме того, мы можем использовать команды tesseract –help и tesseract –help-extra для получения дополнительной информации об использовании командной строки tesseract.

5. Тесс4Дж

Tess4J — это Java-оболочка для API-интерфейсов Tesseract, обеспечивающая поддержку OCR для различных форматов изображений, таких как JPEG, GIF, PNG и BMP.

Во-первых, давайте добавим последнюю зависимость tess4j Maven в наш pom.xml :

<dependency>
<groupId>net.sourceforge.tess4j</groupId>
<artifactId>tess4j</artifactId>
<version>4.5.1</version>
</dependency>

Затем мы можем использовать класс Tesseract , предоставленный tess4j , для обработки изображения:

File image = new File("src/main/resources/images/multiLanguageText.png");
Tesseract tesseract = new Tesseract();
tesseract.setDatapath("src/main/resources/tessdata");
tesseract.setLanguage("eng");
tesseract.setPageSegMode(1);
tesseract.setOcrEngineMode(1);
String result = tesseract.doOCR(image);

Здесь мы установили значение пути к каталогу, содержащему файлы osd.traineddata и eng.traineddata .

Наконец, мы можем проверить строковый вывод обработанного изображения:

Assert.assertTrue(result.contains("Der ,.schnelle” braune Fuchs springt"));
Assert.assertTrue(result.contains("salta sopra il cane pigro. El zorro"));

Кроме того, мы можем использовать метод setHocr для получения вывода HTML:

tesseract.setHocr(true);

По умолчанию библиотека обрабатывает изображение целиком. Однако мы можем обработать определенный участок изображения, используя объект java.awt.Rectangle при вызове метода doOCR :

result = tesseract.doOCR(imageFile, new Rectangle(1200, 200));

Подобно Tess4J, мы можем использовать платформу Tesseract для интеграции Tesseract в приложения Java. Это JNI-оболочка API-интерфейсов Tesseract, основанная на библиотеке пресетов JavaCPP .

6. Заключение

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

Во- первых, мы рассмотрели инструмент командной строки tesseract для обработки изображений вместе с набором аргументов , таких как -l , –psm и –oem .

Затем мы изучили tess4j , Java-оболочку для интеграции Tesseract в Java-приложения.

Как обычно, все реализации кода доступны на GitHub .