Niveau
Débutant
Env.
Google Colab
Code
Python
Libs
pytesseract, cv2, PIL
Sources

Débuter avec Tesseract

Vous cherchez un outil capable de reconnaître des caractères dans une image (par exemple scannée) ? Vous êtes donc en recherche d’un OCR et nous allons voir comment utiliser dans cet article l’un des plus connu: Tesseract !

Qu’est-ce que Tesseract ?

Tesseract est un outil informatique de type O.C.R. (Optical Character Recognition).

Un OCR à pour rôle de convertir une image bidimensionnelle contenant du texte (texte imprimé ou manuscrit) à partir de sa représentation d’image en texte lisible et surtout exploitable par un ordinateur. D’un point de vue de son fonctionnement un OCR se décompose généralement en plusieurs sous-processus exécuter de manière séquentielle.

Voici les étapes courantes :

  • Prétraitement de l’image
  • Localisation de texte
  • Segmentation des caractères
  • Reconnaissance des caractères
  • Post-traitement

A noter qu’un OCR (ici tesseract) peut analyser d’autres type de fichiers non structurés. L’objectif ici n’est pas d’expliquer le fonctionnement d’un OCR mais surtout de vous faire comprendre que son mode de fonctionnement peut être assez complexe. Donc soyez indulgent quand vous ne trouverez pas immédiatement le résultat attendu 😉

Pour la petite histoire (de tesseract) je me reporterai simplement à Wikipédia :

Conçu par les ingénieurs de Hewlett Packard de 1985 à 1995, son développement est abandonné pendant les dix années suivantes ; en 2005, les sources du logiciel sont publiées sous licence Apache et Google poursuit son développement. Initialement limité aux caractères ASCII, il reconnaît les caractères UTF-8 dans plus de 100 langues.

Wikipédia

Installation de l’environnement

Installation de Tesseract

Bien sur vous trouverez pleins d’informations sur la manière d’installer Tesseract sur GitHub (https://github.com/tesseract-ocr/tesseract) et son wiki officiel. Néanmoins et si vous êtes comme moi un fervent utilisateur d’Ubuntu je vais vous guider dans l’installation de Tesseract et de pytesseract (le wrapper Python pour Tesseract).

Pour commencer il faut télécharger les binaires des tesseract, rien de plus simple, ouvrez un terminal et lancez les deux commandes suivantes :

# sudo apt install tesseract-ocr
# sudo apt install libtesseract-dev

Avant d’installer pytesseract je vous propose d’installer les fichiers pays (data files). Personnellement je vais récupérer les langues Française, Anglaise (par défaut bien sur) et espagnole. pour cela lancez les commandes suivantes :

# wget https://github.com/tesseract-ocr/tessdata/archive/master.zip
# unzip master.zip
# cp tessdata-master/fra.traineddata /usr/share/tesseract-ocr/4.00/tessdata/
# cp tessdata-master/eng.traineddata /usr/share/tesseract-ocr/4.00/tessdata/
# cp tessdata-master/spa.traineddata /usr/share/tesseract-ocr/4.00/tessdata/

Installation de pytesseract

Voici tout d’abord le site officiel de cette API : https://pypi.org/project/pytesseract/

Une simple commande dans un terminal suffit alors pour installer la librairie (en utilisant PIP) :

# pip install pytesseract

Note : Les fichiers (notamment pour les langues sont pour la plupart copiés dans /usr/share/tesseract-ocr/4.00

Premier test !

Vérifions tout d’abord que notre installation est opérationnelle et lançons un premier test en utilisant la ligne de commande. Voici le fichier (vraiment très simple) que nous allons utiliser dans un premier temps :

Ceci est un test

Ouvrons un terminal et tapons dedans :

# tesseract /home/benoit/git/python_tutos/tesseract/image_1.png fichier_resultat -l fra
Tesseract Open Source OCR Engine v4.0.0 with Leptonica

Cette ligne de commande récupère le premier argument (fichier à traiter), et place le contenu interprété dans le second argument (ici le fichier fichier_resultat.txt) en utilisant la langue française.

Ouvrons donc le fichier résultat :

Ceci est un premier test

Utilisons Python

Initialisation avec pytesseract

Maintenant que tesseract est opérationnel nous allons faire notre premier test avec pytesseract pour voir comment nous pourrons exploiter des documents non structurés dans un programme Python.

Importons tout d’abord le module (installé préalablement via pip dans le paragraphe ci-dessus) :

try:
    from PIL import Image
except ImportError:
    import Image
import pytesseract

Premier test

Ensuite effectuons un premier test en demandant à tesseract d’analyser le même fichier (j’utilise ici Jupyter, ajoutez un print si ce n’est pas votre cas) :

print(pytesseract.image_to_string(Image.open('/home/benoit/git/python_tutos/tesseract/image_1.png')))

L’output doit vous dire :

'Ceci est un premier test'

Si c’est bien le cas cela veut dire que votre installation est totalement opérationnelle et que vous avez analysé votre première image.

Méthodes de pytesseract

Si vous avez une erreur vous disant que tesseract n’est pas installé ou que la commande ne trouve pas le fichier exécutable, celà signifie certainement que l’exécutable n’est pas dans votre Path. Vous devez alors précisez où se trouve tesseract explicitement via la commande préalable :

pytesseract.pytesseract.tesseract_cmd = r'<full_path_to_your_tesseract_executable>'

Récupérons maintenant plus d’information en utilisant les autres méthodes possibles de l’objet pytesseract :

  • get_tesseract_version() Renvoie la version de Tesseract installée dans le système.
  • image_to_string() Renvoie le résultat d’un OCR Tesseract exécuté sur l’image en chaîne
  • image_to_boxes() Retourne un résultat contenant des caractères reconnus et leurs limites de boîte
  • image_to_data() Renvoie le résultat contenant les limites de la boîte, les confidences et d’autres informations. Nécessite Tesseract 3.05+. Pour plus d’informations, veuillez consulter la documentation Tesseract TSV
  • image_to_osd() Renvoie un résultat contenant des informations sur l’orientation et la détection de script.
  • run_and_get_output() Renvoie la sortie brute de Tesseract OCR. Donne un peu plus de contrôle sur les paramètres envoyés à tesseract.

Récupération des éléments détectés

Commençons par récupérer les coordonnées des éléments textuels de l’image :

print(pytesseract.image_to_data(Image.open('/home/benoit/git/python_tutos/tesseract/image_1.png')))
level	page_num	block_num	par_num	line_num	word_num	left	top	width	height	conf	text
1	1	0	0	0	0	0	0	1920	1080	-1	
2	1	1	0	0	0	469	458	738	60	-1	
3	1	1	1	0	0	469	458	738	60	-1	
4	1	1	1	1	0	469	458	738	60	-1	
5	1	1	1	1	1	469	458	122	48	96	Ceci
5	1	1	1	1	2	621	461	89	45	95	est
5	1	1	1	1	3	737	470	67	36	95	un
5	1	1	1	1	4	835	458	207	60	96	premier
5	1	1	1	1	5	1051	461	156	45	96	test

Dorénavant vous pourrez non seulement traiter les éléments textuels mais aussi leur placement dans l’image en utilisant les coordonnées fournies par cette commande.

Quid de l’orientation

Pour récupérer d’autres informations comme l’orientation par exemple, utilisez cette commande :

print(pytesseract.image_to_osd(Image.open('/home/benoit/git/python_tutos/tesseract/image_2.png')))
Page number: 0
Orientation in degrees: 0
Rotate: 0
Orientation confidence: 2.01
Script: Latin
Script confidence: 11.11

Conclusion

Nous venons de voir comment utiliser tesseract dans un contexte extrêmement simple (sans bruits). Nous verrons dans un article ultérieur comment faire une utilisation plus avancée de tesseract dés lors que l’image n’est pas aussi parfaite que cet exemple.

En effet si tesseract est très efficace sur des images « propres » il n’en n’est pas de même dès lors que du bruit s’ajoute. Une image barrée, avec un quadrillage, ou même des changements de couleurs perturberons notre bel outil d’OCR pour produire des résultats erronés. Un travail préalable s’avérera donc nécessaire pour pouvoir retirer tous ces bruits et donc récupérer et interpréter les textes de nos images.


Aller plus loin avec tesseract ici >

Partager cet article

5 Replies to “Débuter avec Tesseract”

  1. Quand j’essaye de lancer pour la première fois depuis VSCode, ça me dit « from PIL import Image ModuleNotFoundError: No module named ‘PIL' ». J’ai donc mis dans le terminal de VSCode la commande que vous nous dites de rentrer si ça ne fonctionne pas donc « pytesseract.pytesseract.tesseract_cmd = r’/users/lucas/tessdata-main' » pour moi, mais ça me met l’erreur « zsh: parse error near `\n' ».
    Auriez vous une solution svp ?

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.