Reconnaissance optique de caractères avec Tesseract

1. Vue d'ensemble

Avec les progrès de la technologie dans l'IA et l'apprentissage automatique, nous avons besoin d'outils pour reconnaître le texte dans les images.

Dans ce didacticiel, nous explorerons Tesseract, un moteur de reconnaissance optique de caractères (OCR), avec quelques exemples de traitement image-texte.

2. Tesseract

Tesseract est un moteur OCR open source développé par HP qui reconnaît plus de 100 langues, ainsi que la prise en charge des langues idéographiques et de droite à gauche. De plus, nous pouvons former Tesseract à reconnaître d'autres langues .

Il contient deux moteurs OCR pour le traitement d'image : un moteur OCR LSTM (Long Short Term Memory) et un moteur OCR hérité qui fonctionne en reconnaissant les modèles de caractères.

Le moteur OCR utilise la bibliothèque Leptonica pour ouvrir les images et prend en charge divers formats de sortie tels que le texte brut, hOCR (HTML pour OCR), PDF et TSV.

3. Configuration

Tesseract est disponible en téléchargement / installation sur tous les principaux systèmes d'exploitation.

Par exemple, si nous utilisons macOS, nous pouvons installer le moteur OCR en utilisant Homebrew:

brew install tesseract 

Nous observerons que le paquet contient un ensemble de fichiers de données de langue, comme l'anglais, et la détection d'orientation et de script (OSD), par défaut:

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

Cependant, nous pouvons installer le module tesseract-lang pour la prise en charge d'autres langues:

brew install tesseract-lang

Pour Linux, nous pouvons installer Tesseract à l'aide de la commande yum :

yum install tesseract

De même, ajoutons la prise en charge des langues:

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

Ici, nous avons ajouté les données d'apprentissage de la langue pour l'anglais et l'espagnol.

Pour Windows, nous pouvons obtenir les installateurs de Tesseract à UB Mannheim.

4. Ligne de commande Tesseract

4.1. Courir

Nous pouvons utiliser l'outil de ligne de commande Tesseract pour extraire le texte des images.

Par exemple, prenons un instantané de notre site Web:

Ensuite, nous exécuterons la commande tesseract pour lire l' instantané baeldung.png et écrire le texte dans le fichier output.txt :

tesseract baeldung.png output

Le fichier output.txt ressemblera à ceci :

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

On constate que Tesseract n'a pas traité tout le contenu de l'image. Parce que la précision de la sortie dépend de divers paramètres tels que la qualité de l'image, la langue, la segmentation de la page, les données entraînées et le moteur utilisé pour le traitement de l'image.

4.2. Support linguistique

Par défaut, le moteur OCR utilise l'anglais lors du traitement des images. Cependant, nous pouvons déclarer la langue en utilisant l' argument -l :

Jetons un coup d'œil à un autre exemple avec du texte multilingue:

Tout d'abord, traitons l'image avec la langue anglaise par défaut:

tesseract multiLanguageText.png output 

La sortie ressemblera à:

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.

Ensuite, traitons l'image avec la langue portugaise:

tesseract multiLanguageText.png output -l por

Ainsi, le moteur OCR détectera également les lettres portugaises:

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.

De même, nous pouvons déclarer une combinaison de langues:

tesseract multiLanguageText.png output -l spa+por

Ici, le moteur OCR utilisera principalement l'espagnol puis le portugais pour le traitement des images. Cependant, la sortie peut différer en fonction de l'ordre des langues que nous spécifions.

4.3. Mode de segmentation de page

Tesseract prend en charge divers modes de segmentation de page tels que l'OSD, la segmentation automatique de page et le texte épars.

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.

Tout d'abord, nous avons examiné l' outil de ligne de commande tesseract pour traiter les images, ainsi qu'un ensemble d'arguments tels que -l , –psm et –oem .

Ensuite, nous avons exploré tess4j , un wrapper Java pour intégrer Tesseract dans les applications Java.

Comme d'habitude, toutes les implémentations de code sont disponibles sur sur GitHub.