«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.
«