«1. Обзор

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

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

2. Tesseract

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 для извлечения текста из изображений.

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

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

tesseract baeldung.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:

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

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

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 для обработки изображений.

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

4.4. Режим OCR Engine

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

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

tesseract multiLanguageText.png output --oem 1

Режимы механизма OCR:

4.5. Tessdata

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

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

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

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

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!

4.6. Вывод

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

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

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

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

tesseract multiLanguageText.png output pdf

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

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

tesseract multiLanguageText.png output hocr

5. Tess4J

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

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

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

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

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

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);

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

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

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

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

tesseract.setHocr(true);

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

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

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

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

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

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

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

«