Nous avons vu la semaine dernière comment utiliser tesseract dans un invité de commande. Nous avons également vu que de petites modifications pouvaient diminuer les performances de la reconnaissance de caractères. Il nous est alors venu à l’idée de réaliser un traitement de l’image afin d’améliorer le résultat. Nous allons donc utiliser OpenCV pour effectuer les prétraitements avant d’utiliser la reconnaissance de caractères.

Il sera nécessaire pour cela d’utiliser pytesseract, une librairie qui permet d’appeler Tesseract depuis Python. Une des problématiques rencontrée dans l’utilisation de cette librairie avec OpenCV est que pyTesseract accepte comme entrée une image au format PIL (Picture Imaging Library) et non une image Numpy. Il sera donc nécessaire de convertir notre image afin de pouvoir l’exploiter avec OpenCV.
Installation de pytesseract
L’installation de pytesseract se fait sans problème grâce à la commande:
pip3 install pytesseract
Pendant l’installation, Pillow sera installé. Il s’agit d’un fork de PIL, car cette librairie n’est plus maintenue depuis 2009 et surtout non disponible avec Python3.
Reconnaissance de caractères avec OpenCV
Nous pouvons donc passer au programme !
Nous commençons par importer les librairies nécessaires: cv2, PIL et pytesseract
import cv2
from PIL import Image
import pytesseract
image = cv2.imread('bienvenue.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
L’étape qui suit est logiquement le chargement de l’image (ligne 5), puis de convertir l’image en niveau de gris (ligne 6).

Afin d’enlever le trait, nous réalisons un seuillage binaire afin d’enlever toute partie dont la valeur des pixels est supérieure à zéro (ligne 7)
_, gray = cv2.threshold(gray, 10, 255,cv2.THRESH_BINARY)
Pour l’instant rien de nouveau.
Il est maintenant nécessaire de passer notre image qui est de type ‘numpy.ndarray’ en une image lisible par pytesseract, c’est-à-dire une image de type ‘PIL.Image’. Pour ce faire, nous appelons la fonction ‘fromarray’ de PIL (ligne 9). Cette fonction permet d’importer une image depuis une matrice. Ça tombe bien c’est ce que nous voulons!
Notre image au bon format, nous pouvons appeler Tesseract (ligne 10).
img = Image.fromarray(gray) txt = pytesseract.image_to_string(img) print(txt)
Comme son nom l’indique, cette fonction convertie une image vers une chaine de caractères. Il nous reste plus qu’à afficher les caractères extraits (ligne 11).
Bienvenue sur PyMotion
Mission accomplie !
Nous avons vu aujourd’hui comment utiliser tesseract en python avec l’utilisation de pytesseract. Cette librairie nous a permis de pouvoir utiliser OpenCV afin de réaliser des prétraitements permettant d’améliorer la reconnaissance de caractères. Il est alors possible d’utiliser cette bibliothèque dans d‘autres projets