Débuter avec Tesseract 7


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 >


A propos de Benoit Cayla

Ingénieur en informatique avec plus de 20 ans d’expérience dans la gestion et l’utilisation de données, Benoit CAYLA a mis son expertise au profit de projets très variés tels que l’intégration, la gouvernance, l’analyse, l’IA, la mise en place de MDM ou de solution PIM pour le compte de diverses entreprises spécialisées dans la donnée (dont IBM, Informatica et Tableau). Ces riches expériences l’ont naturellement conduit à intervenir dans des projets de plus grande envergure autour de la gestion et de la valorisation des données, et ce principalement dans des secteurs d’activités tels que l’industrie, la grande distribution, l’assurance et la finance. Également, passionné d’IA (Machine Learning, NLP et Deep Learning), l’auteur a rejoint Blue Prism en 2019 et travaille aujourd’hui en tant qu’expert data/IA et processus. Son sens pédagogique ainsi que son expertise l’ont aussi amené à animer un blog en français (datacorner.fr) ayant pour but de montrer comment comprendre, analyser et utiliser ses données le plus simplement possible.

Laissez un commentaire

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

7 commentaires sur “Débuter avec Tesseract

  • Anonyme

    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 ?

  • Michel Thomé

    Bonjour,
    Je suis pas-à-pas vos instructions pour installer Tesseract.
    Je trouve que c’est très clair mais ça bloque.
    Voici ce que renvoie le terminal :
    michel-thom@michel-thom-Vivobook-ASUSLaptop-X1605PA-X1605PA:~$ cp tessdata-master/fra.traineddata /usr/share/tesseract-ocr/4.00/tessdata/
    cp: impossible d’évaluer ‘tessdata-master/fra.traineddata’: Aucun fichier ou dossier de ce nom
    michel-thom@michel-thom-Vivobook-ASUSLaptop-X1605PA-X1605PA:~$ cp tessdata-master/eng.traineddata /usr/share/tesseract-ocr/4.00/tessdata/
    cp: impossible d’évaluer ‘tessdata-master/eng.traineddata’: Aucun fichier ou dossier de ce nom
    michel-thom@michel-thom-Vivobook-ASUSLaptop-X1605PA-X1605PA:~$ cp tessdata-master/spa.traineddata /usr/share/tesseract-ocr/4.00/tessdata/
    cp: impossible d’évaluer ‘tessdata-master/spa.traineddata’: Aucun fichier ou dossier de ce nom
    michel-thom@michel-thom-Vivobook-ASUSLaptop-X1605PA-X1605PA:~$ pip install pytesseract
    La commande « pip » n’a pas été trouvée, mais peut être installée avec :
    sudo apt install python3-pip
    michel-thom@michel-thom-Vivobook-ASUSLaptop-X1605PA-X1605PA:~$ sudo apt install python3-pip
    Les paquets suivants ont été installés automatiquement et ne sont plus nécessaires :
    libnsl2 libpython3.12-minimal libpython3.12-stdlib libpython3.12t64
    Veuillez utiliser « sudo apt autoremove » pour les supprimer.

    Installation de :
    python3-pip

    Installation de dépendances :
    libjs-sphinxdoc libpython3-dev python3-dev python3.13-dev
    libjs-underscore libpython3.13-dev python3-wheel

    Sommaire :
    Mise à niveau de : 0. Installation de : 8Supprimé : 0. Non mis à jour : 57
    Taille du téléchargement : 7 572 kB
    Espace nécessaire : 34,7 MB / 789 GB disponible

    Continuer ? [O/n] O
    Réception de : 1 http://archive.ubuntu.com/ubuntu noble/main amd64 libjs-underscore all 1.13.4~dfsg+~1.11.4-3 [118 kB]
    Réception de : 2 http://archive.ubuntu.com/ubuntu plucky/main amd64 libjs-sphinxdoc all 8.1.3-5 [31,0 kB]
    Réception de : 3 http://archive.ubuntu.com/ubuntu plucky-updates/main amd64 libpython3.13-dev amd64 3.13.3-1ubuntu0.2 [5 508 kB]
    Réception de : 4 http://archive.ubuntu.com/ubuntu plucky/main amd64 libpython3-dev amd64 3.13.3-1 [10,8 kB]
    Réception de : 5 http://archive.ubuntu.com/ubuntu plucky-updates/main amd64 python3.13-dev amd64 3.13.3-1ubuntu0.2 [508 kB]
    Réception de : 6 http://archive.ubuntu.com/ubuntu plucky/main amd64 python3-dev amd64 3.13.3-1 [26,7 kB]
    Réception de : 7 http://archive.ubuntu.com/ubuntu noble/universe amd64 python3-wheel all 0.42.0-2 [53,1 kB]
    Réception de : 8 http://archive.ubuntu.com/ubuntu noble/universe amd64 python3-pip all 24.0+dfsg-1ubuntu1 [1 316 kB]
    7 572 ko réceptionnés en 1s (5 647 ko/s)
    Sélection du paquet libjs-underscore précédemment désélectionné.
    (Lecture de la base de données… 276983 fichiers et répertoires déjà installés.)
    Préparation du dépaquetage de …/0-libjs-underscore_1.13.4~dfsg+~1.11.4-3_all.deb

    Dépaquetage de libjs-underscore (1.13.4~dfsg+~1.11.4-3) …
    Sélection du paquet libjs-sphinxdoc précédemment désélectionné.
    Préparation du dépaquetage de …/1-libjs-sphinxdoc_8.1.3-5_all.deb …
    Dépaquetage de libjs-sphinxdoc (8.1.3-5) …
    Sélection du paquet libpython3.13-dev:amd64 précédemment désélectionné.
    Préparation du dépaquetage de …/2-libpython3.13-dev_3.13.3-1ubuntu0.2_amd64.deb

    Dépaquetage de libpython3.13-dev:amd64 (3.13.3-1ubuntu0.2) …
    Sélection du paquet libpython3-dev:amd64 précédemment désélectionné.
    Préparation du dépaquetage de …/3-libpython3-dev_3.13.3-1_amd64.deb …
    Dépaquetage de libpython3-dev:amd64 (3.13.3-1) …
    Sélection du paquet python3.13-dev précédemment désélectionné.
    Préparation du dépaquetage de …/4-python3.13-dev_3.13.3-1ubuntu0.2_amd64.deb …
    Dépaquetage de python3.13-dev (3.13.3-1ubuntu0.2) …
    Sélection du paquet python3-dev précédemment désélectionné.
    Préparation du dépaquetage de …/5-python3-dev_3.13.3-1_amd64.deb …
    Dépaquetage de python3-dev (3.13.3-1) …
    Sélection du paquet python3-wheel précédemment désélectionné.
    Préparation du dépaquetage de …/6-python3-wheel_0.42.0-2_all.deb …
    Dépaquetage de python3-wheel (0.42.0-2) …
    Sélection du paquet python3-pip précédemment désélectionné.
    Préparation du dépaquetage de …/7-python3-pip_24.0+dfsg-1ubuntu1_all.deb …
    Dépaquetage de python3-pip (24.0+dfsg-1ubuntu1) …
    Paramétrage de python3-wheel (0.42.0-2) …
    Paramétrage de libpython3.13-dev:amd64 (3.13.3-1ubuntu0.2) …
    Paramétrage de python3-pip (24.0+dfsg-1ubuntu1) …
    Paramétrage de libjs-underscore (1.13.4~dfsg+~1.11.4-3) …
    Paramétrage de libpython3-dev:amd64 (3.13.3-1) …
    Paramétrage de python3.13-dev (3.13.3-1ubuntu0.2) …
    Paramétrage de libjs-sphinxdoc (8.1.3-5) …
    Paramétrage de python3-dev (3.13.3-1) …
    Traitement des actions différées (« triggers ») pour man-db (2.13.0-1) …
    michel-thom@michel-thom-Vivobook-ASUSLaptop-X1605PA-X1605PA:~$ cp tessdata-master/fra.traineddata /usr/share/tesseract-ocr/4.00/tessdata/
    cp: impossible d’évaluer ‘tessdata-master/fra.traineddata’: Aucun fichier ou dossier de ce nom
    michel-thom@michel-thom-Vivobook-ASUSLaptop-X1605PA-X1605PA:~$ pip install pytesseract
    error: externally-managed-environment

    × This environment is externally managed
    ╰─> To install Python packages system-wide, try apt install
    python3-xyz, where xyz is the package you are trying to
    install.

    If you wish to install a non-Debian-packaged Python package,
    create a virtual environment using python3 -m venv path/to/venv.
    Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make
    sure you have python3-full installed.

    If you wish to install a non-Debian packaged Python application,
    it may be easiest to use pipx install xyz, which will manage a
    virtual environment for you. Make sure you have pipx installed.

    See /usr/share/doc/python3.13/README.venv for more information.

    note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing –break-system-packages.
    hint: See PEP 668 for the detailed specification.
    michel-thom@michel-thom-Vivobook-ASUSLaptop-X1605PA-X1605PA:~$

    Et, aussi :
    michel-thom@michel-thom-Vivobook-ASUSLaptop-X1605PA-X1605PA:~$ sudo apt autoremove libnsl2 libpython3.12-minimal libpython3.12-stdlib libpython3.12t64
    [sudo] Mot de passe de michel-thom :
    SUPPRESSION :
    libnsl2 libpython3.12-minimal libpython3.12-stdlib libpython3.12t64

    Sommaire :
    Mise à niveau de : 0. Installation de : 0Supprimé : 4. Non mis à jour : 57
    Espace libéré : 24,0 MB

    Continuer ? [O/n] O
    (Lecture de la base de données… 278059 fichiers et répertoires déjà installés.)
    Suppression de libpython3.12t64:amd64 (3.12.7-1ubuntu2) …
    Suppression de libpython3.12-stdlib:amd64 (3.12.7-1ubuntu2) …
    Suppression de libnsl2:amd64 (1.3.0-3build3) …
    Suppression de libpython3.12-minimal:amd64 (3.12.7-1ubuntu2) …
    Traitement des actions différées (« triggers ») pour libc-bin (2.41-6ubuntu1) …
    michel-thom@michel-thom-Vivobook-ASUSLaptop-X1605PA-X1605PA:~$ cp tessdata-master/fra.traineddata /usr/share/tesseract-ocr/4.00/tessdata/
    cp: impossible d’évaluer ‘tessdata-master/fra.traineddata’: Aucun fichier ou dossier de ce nom
    michel-thom@michel-thom-Vivobook-ASUSLaptop-X1605PA-X1605PA:~$ tesseract /home/benoit/git/python_tutos/tesseract/image_1.png fichier_resultat -l fra
    Tesseract Open Source OCR Engine v4.0.0 with Leptonica
    Error opening data file /usr/share/tesseract-ocr/5/tessdata/fra.traineddata
    Please make sure the TESSDATA_PREFIX environment variable is set to your « tessdata » directory.
    Failed loading language ‘fra’
    Tesseract couldn’t load any languages!
    Could not initialize tesseract.
    La commande « Tesseract » n’a pas été trouvée, voulez-vous dire :
    commande « tesseract » du snap tesseract (5.4.1+pkg-944a)
    commande « tesseract » du deb tesseract-ocr (5.3.3-1build1)
    Voir « snap info  » pour des versions supplémentaires.
    michel-thom@michel-thom-Vivobook-ASUSLaptop-X1605PA-X1605PA:~$

    Comment sortir de ce bloquage ? Merci beaucoup d’avance !
    Michel Thomé

    • Benoit Cayla Auteur de l’article

      Bonjour,
      Je vois deux potentiels soucis:
      1. Le fichier de données français n’existe pas. En effet l’erreur indique que le fichier tessdata-master/fra.traineddata n’existe pas. Vous devez d’abord le télécharger via wget https://github.com/tesseract-ocr/tessdata/raw/main/fra.traineddata
      2. Peut être un problème de version et de chemin. Votre système semble avoir des versions mixtes de Tesseract. L’erreur montre qu’il cherche dans /usr/share/tesseract-ocr/5/tessdata/ mais vous essayez de copier vers /usr/share/tesseract-ocr/4.00/tessdata/