Riconoscimento ottico dei caratteri con Tesseract

1. Panoramica

Con il progresso della tecnologia nell'intelligenza artificiale e nell'apprendimento automatico, abbiamo bisogno di strumenti per riconoscere il testo all'interno delle immagini.

In questo tutorial esploreremo Tesseract, un motore di riconoscimento ottico dei caratteri (OCR), con alcuni esempi di elaborazione da immagine a testo.

2. Tesseract

Tesseract è un motore OCR open source sviluppato da HP che riconosce più di 100 lingue, insieme al supporto di lingue ideografiche e da destra a sinistra. Inoltre, possiamo addestrare Tesseract a riconoscere altre lingue .

Contiene due motori OCR per l'elaborazione delle immagini : un motore OCR LSTM (Long Short Term Memory) e un motore OCR legacy che funziona riconoscendo i modelli di caratteri.

Il motore OCR utilizza la libreria Leptonica per aprire le immagini e supporta vari formati di output come testo normale, hOCR (HTML per OCR), PDF e TSV.

3. Configurazione

Tesseract è disponibile per il download / installazione su tutti i principali sistemi operativi.

Ad esempio, se stiamo usando macOS, possiamo installare il motore OCR usando Homebrew:

brew install tesseract 

Osserveremo che il pacchetto contiene un set di file di dati di lingua, come l'inglese, e l'orientamento e il rilevamento di script (OSD), per impostazione predefinita:

==> 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

Tuttavia, possiamo installare il modulo tesseract-lang per il supporto di altri linguaggi:

brew install tesseract-lang

Per Linux, possiamo installare Tesseract usando il comando yum :

yum install tesseract

Allo stesso modo, aggiungiamo il supporto per la lingua:

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

Qui abbiamo aggiunto i dati di formazione linguistica per inglese e spagnolo.

Per Windows, possiamo ottenere i programmi di installazione da Tesseract presso UB Mannheim.

4. Tesseract Command-Line

4.1. Correre

Possiamo usare lo strumento della riga di comando Tesseract per estrarre il testo dalle immagini.

Ad esempio, facciamo un'istantanea del nostro sito web:

Quindi, eseguiremo il comando tesseract per leggere l' istantanea baeldung.png e scrivere il testo nel file output.txt :

tesseract baeldung.png output

Il file output.txt avrà il seguente aspetto:

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

Possiamo osservare che Tesseract non ha elaborato l'intero contenuto dell'immagine. Perché l'accuratezza dell'output dipende da vari parametri come la qualità dell'immagine, la lingua, la segmentazione della pagina, i dati addestrati e il motore utilizzato per l'elaborazione delle immagini.

4.2. Supporto linguistico

Per impostazione predefinita, il motore OCR utilizza l'inglese durante l'elaborazione delle immagini. Tuttavia, possiamo dichiarare la lingua utilizzando l' argomento -l :

Diamo un'occhiata a un altro esempio con testo multilingue:

Innanzitutto, elaboriamo l'immagine con la lingua inglese predefinita:

tesseract multiLanguageText.png output 

L'output sarà simile a:

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.

Quindi, elaboriamo l'immagine con la lingua portoghese:

tesseract multiLanguageText.png output -l por

Quindi, il motore OCR rileverà anche le lettere portoghesi:

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.

Allo stesso modo, possiamo dichiarare una combinazione di lingue:

tesseract multiLanguageText.png output -l spa+por

Qui, il motore OCR utilizzerà principalmente lo spagnolo e poi il portoghese per l'elaborazione delle immagini. Tuttavia, l'output può variare in base all'ordine delle lingue specificato.

4.3. Modalità di segmentazione della pagina

Tesseract supporta varie modalità di segmentazione della pagina come OSD, segmentazione automatica della pagina e testo sparse.

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.

Per prima cosa, abbiamo esaminato lo strumento da riga di comando tesseract per elaborare le immagini, insieme a una serie di argomenti come -l , –psm e –oem .

Quindi, abbiamo esplorato tess4j , un wrapper Java per integrare Tesseract nelle applicazioni Java.

Come al solito, tutte le implementazioni del codice sono disponibili su GitHub.