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 для извлечения текста из изображений.
Например, давайте сделаем снимок нашего сайта:
Затем мы запустим команду 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 :
Давайте посмотрим на другой пример с многоязычным текстом:
Во-первых, давайте обработаем изображение с английским языком по умолчанию:
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. Режим механизма оптического распознавания символов
Точно так же мы можем использовать различные режимы движка, такие как устаревший и LSTM-движок, при обработке изображений.
Для этого мы можем использовать аргумент –oem
со значением от 0 до 3:
tesseract multiLanguageText.png output --oem 1
Режимы двигателя OCR:
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 .