Optische Zeichenerkennung mit Tesseract

1. Übersicht

Mit dem Fortschritt der Technologie in der KI und im maschinellen Lernen benötigen wir Werkzeuge, um Text in Bildern zu erkennen.

In diesem Tutorial werden wir Tesseract, eine OCR-Engine (Optical Character Recognition), mit einigen Beispielen für die Bild-zu-Text-Verarbeitung untersuchen.

2. Tesseract

Tesseract ist eine von HP entwickelte Open-Source-OCR-Engine, die mehr als 100 Sprachen erkennt und ideografische Sprachen sowie Sprachen von rechts nach links unterstützt. Auch wir können Tesseract trainieren , andere Sprachen zu erkennen .

Es enthält zwei OCR-Engines für die Bildverarbeitung - eine LSTM-OCR-Engine (Long Short Term Memory) und eine ältere OCR-Engine, die Zeichenmuster erkennt.

Die OCR-Engine verwendet die Leptonica-Bibliothek zum Öffnen der Bilder und unterstützt verschiedene Ausgabeformate wie Nur-Text, hOCR (HTML für OCR), PDF und TSV.

3. Setup

Tesseract kann auf allen gängigen Betriebssystemen heruntergeladen / installiert werden.

Wenn wir beispielsweise macOS verwenden, können wir die OCR-Engine mit Homebrew installieren:

brew install tesseract 

Wir werden feststellen, dass das Paket standardmäßig eine Reihe von Sprachdatendateien wie Englisch sowie Orientierungs- und Skripterkennung (OSD) enthält:

==> Installing tesseract ==> Downloading //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

Wir können jedoch das Modul tesseract-lang installieren, um andere Sprachen zu unterstützen:

brew install tesseract-lang

Für Linux können wir Tesseract mit dem Befehl yum installieren :

yum install tesseract

Fügen wir ebenfalls Sprachunterstützung hinzu:

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

Hier haben wir die sprachlich geschulten Daten für Englisch und Spanisch hinzugefügt.

Für Windows können wir die Installer von Tesseract bei UB Mannheim beziehen.

4. Tesseract-Befehlszeile

4.1. Lauf

Wir können das Tesseract-Befehlszeilentool verwenden, um Text aus Bildern zu extrahieren.

Lassen Sie uns zum Beispiel einen Schnappschuss unserer Website machen:

Dann werden wir den Lauf Tesserakts Befehl lesen baeldung.png Snapshot und den Text in der schreiben output.txt Datei:

tesseract baeldung.png output

Die Datei output.txt sieht folgendermaßen aus:

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

Wir können beobachten, dass Tesseract nicht den gesamten Inhalt des Bildes verarbeitet hat. Weil die Genauigkeit der Ausgabe von verschiedenen Parametern wie Bildqualität, Sprache, Seitensegmentierung, trainierten Daten und der für die Bildverarbeitung verwendeten Engine abhängt.

4.2. Sprachunterstützung

Standardmäßig verwendet die OCR-Engine bei der Verarbeitung der Bilder Englisch. Wir können die Sprache jedoch mit dem Argument -l deklarieren :

Schauen wir uns ein anderes Beispiel mit mehrsprachigem Text an:

Lassen Sie uns zunächst das Bild mit der englischen Standardsprache verarbeiten:

tesseract multiLanguageText.png output 

Die Ausgabe sieht folgendermaßen aus:

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.

Dann verarbeiten wir das Bild mit der portugiesischen Sprache:

tesseract multiLanguageText.png output -l por

Die OCR-Engine erkennt also auch portugiesische Buchstaben:

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.

Ebenso können wir eine Kombination von Sprachen deklarieren:

tesseract multiLanguageText.png output -l spa+por

Hier verwendet die OCR-Engine hauptsächlich Spanisch und dann Portugiesisch für die Bildverarbeitung. Die Ausgabe kann jedoch je nach der von uns angegebenen Reihenfolge der Sprachen unterschiedlich sein.

4.3. Seitensegmentierungsmodus

Tesseract unterstützt verschiedene Seitensegmentierungsmodi wie OSD, automatische Seitensegmentierung und spärlichen Text.

We can declare the page segmentation mode by using the –psm argument with a value of 0 to 13 for various modes:

tesseract multiLanguageText.png output --psm 1

Here, by defining a value of 1, we've declared the Automatic page segmentation with OSD for image processing.

Let's take a look of all the page segmentation modes supported:

4.4. OCR Engine Mode

Similarly, we can use various engine modes like legacy and LSTM engine while processing the images.

For this, we can use the –oem argument with a value of 0 to 3:

tesseract multiLanguageText.png output --oem 1

The OCR engine modes are:

4.5. Tessdata

Tesseract contains two sets of trained data for the LSTM OCR engine – best trained LSTM models and fast integer versions of trained LSTM models.

The former provides better accuracy, and the latter offers better speed in image processing.

Also, Tesseract provides a combined trained data with support for both legacy and LSTM OCR engine.

If we use the Legacy OCR engine without providing the supporting trained data, Tesseract will throw an error:

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!

So, we should download the required .traineddata files and either keep them in the default tessdata location or declare the location using the –tessdata-dir argument:

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

4.6. Output

We can declare an argument to get the required output format.

For instance, to get searchable PDF output:

tesseract multiLanguageText.png output pdf

This will create the output.pdf file with the searchable text layer (with recognized text) on the image provided.

Similarly, for hOCR output:

tesseract multiLanguageText.png output hocr

Also, we can use tesseract –help and tesseract –help-extra commands for more information on the tesseract command-line usage.

5. Tess4J

Tess4J is a Java wrapper for the Tesseract APIs that provides OCR support for various image formats like JPEG, GIF, PNG, and BMP.

First, let's add the latest tess4j Maven dependency to our pom.xml:

 net.sourceforge.tess4j tess4j 4.5.1 

Then, we can use the Tesseract class provided by tess4j to process the image:

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

Here, we've set the value of the datapath to the directory location that contains osd.traineddata and eng.traineddata files.

Finally, we can verify the String output of the image processed:

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

Additionally, we can use the setHocr method to get the HTML output:

tesseract.setHocr(true);

By default, the library processes the entire image. However, we can process a particular section of the image by using the java.awt.Rectangle object while calling the doOCR method:

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

Similar to Tess4J, we can use Tesseract Platform to integrate Tesseract in Java applications. This is a JNI wrapper of the Tesseract APIs based on the JavaCPP Presets library.

6. Conclusion

In this article, we've explored the Tesseract OCR engine with a few examples of image processing.

Zuerst untersuchten wir das Tesseracts Befehlszeilenprogramm die Bilder zu verarbeiten, zusammen mit einem Satz von Argumenten wie -l , -psm und -oem .

Anschließend haben wir tess4j untersucht , einen Java-Wrapper zur Integration von Tesseract in Java-Anwendungen.

Wie üblich sind alle Code-Implementierungen über GitHub verfügbar.