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 :

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.
Pingback: Un service REST qui traite des factures (images!) en Python - Data Corner
Pingback: Utilisation avancée de Tesseract avec Python - Data Corner
Pingback: Transcription des textes assistée par ordinateur et par la foule – AHP numérique
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 ?
Sous linux/debian, ca doit etre « apt install python3-pil »… Sous arch, c’est « pacman -S python-pillow »
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é
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/