Créez une reconnaissance de texte en direct avec le Raspberry Pi (OCR)

Raspberry Pi (ocr)

Dans de nombreux projets, le Raspberry Pi est utilisé comme caméra de surveillance ou pour des tâches d’apprentissage automatique. Ici, vous pouvez souvent voir du texte dans les images qui présentent un intérêt pour l’application. Nous voulons l’extraire et le convertir afin que nous puissions analyser le texte avec un programme. Ce type de reconnaissance de texte est également possible avec le Raspberry Pi, et ce n’est même pas difficile. Nous lisons soit du texte à partir d’images statiques, soit un flux en direct d’une caméra.

Dans ce tutoriel, nous verrons comment implémenter la reconnaissance de texte avec le Raspberry Pi et ce dont nous avons besoin pour cela.

Composants requis avant de commencer

La partie principale de l’application est purement logicielle. Par conséquent, nous n’avons besoin que d’une petite quantité de matériel pour configurer la reconnaissance de texte. Nous aurons besoin et utiliserons les composants suivants.

L’écran, le clavier et la souris peuvent être utilisés, mais comme nous travaillons à distance sur le Raspberry Pi, nous n’en avons pas forcément besoin.

Par conséquent, vous devez avoir configuré votre Raspberry Pi en conséquence, activé SSH et également établi une connexion de bureau à distance. Après cela, nous pouvons commencer directement.

Qu’est-ce que la reconnaissance de texte (OCR) et comment fonctionne-t-elle sur le Raspberry Pi ?

Bref, la reconnaissance de texte (reconnaissance optique de caractères ou OCR en abrégé) sur les images est plutôt une reconnaissance de lettres individuelles. S’ils sont assez proches les uns des autres, ils forment un mot.

Nous avons vu dans des tutoriels précédents que nous pouvons entraîner un modèle qui reconnaît des objets sur des images. Si nous entraînons maintenant toutes les lettres (latines) – au lieu d’objets – nous pourrions également les reconnaître à nouveau au moyen de notre modèle.
En théorie, cela fonctionne, mais cela est associé à beaucoup d’efforts. Différentes polices, couleurs, mises en forme, etc. devraient d’abord être formées. Cependant, nous voulons économiser le temps nécessaire pour cela.

Par conséquent, nous utilisons le Tesseract bibliothèque de Google. Cela inclut déjà de tels modèles et a été optimisé par de nombreux développeurs.

Installation de la bibliothèque OCR Tesseract

Nous pouvons soit compiler Tesseract nous-mêmes, soit simplement l’installer via le gestionnaire de paquets. Cette dernière se fait facilement via la commande suivante :

sudo apt install tesseract-ocr

Nous pouvons facilement vérifier si l’installation a fonctionné avec tesseract -v.

Maintenant, nous pouvons déjà faire le premier petit test. Pour cela nous utiliserons cette image :

 » alt= »Exemple d’image pour la reconnaissance de texte » width= »600″ height= »398″ data-ez= » » data-ezsrc= »https://tutorials-raspberrypi.com/ezoimgfmt/tutorials-raspberrypi.de/wp-content/uploads/coffee-ocr-600×398.jpg » />
Exemple d’image avec texte (Source)

Vous pouvez le télécharger ci-joint :

wget https://tutorials-raspberrypi.de/wp-content/uploads/coffee-ocr.jpg

Ensuite, nous exécutons la commande suivante :

tesseract coffee-ocr.jpg stdout

La sortie ressemble à ceci :

Warning: Invalid resolution 0 dpi. Using 70 instead.
Estimating resolution as 554
COFFEE

Ainsi, dans notre image d’entrée, le texte « CAFÉ » a été reconnu.

Puisque nous voulons utiliser le tout dans un script Python, nous avons besoin de bibliothèques telles que OpenCV et un wrapper Python pour Tesseract. Nous l’installons via le gestionnaire de packages Python :

pip3 install opencv-python pillow pytesseract imutils numpy

Test de la reconnaissance de texte sur le Raspberry Pi – via un script Python

Jusqu’à présent, nous avons essayé de reconnaître les mots uniquement sur l’image colorée non traitée. Les étapes de prétraitement peuvent souvent améliorer le résultat. Par exemple, en convertissant l’image couleur en une image en niveaux de gris. D’autre part, nous pouvons également essayer de détecter les contours d’une image pour mieux mettre en évidence les lettres/mots.

Commençons donc par activer la reconnaissance de texte sur le Raspberry Pi à l’aide d’un script Python. Pour cela, nous créons un dossier et un fichier.

mkdir ocr
cd ocr
sudo nano example.py

Nous insérons le contenu suivant :

Regardons les lignes individuelles et intéressantes:

  • Importation des bibliothèques (ligne 1-4)
  • Chargez l’image (ligne 5), ajuster le chemin si nécessaire!
  • Fonctions de prétraitement, pour la conversion en valeurs de gris (lignes 9-23)
  • Ligne 32 : Ici, nous extrayons toutes les données (texte, coordonnées, score, etc.)
  • Afin de pouvoir coloriser les cases par la suite, nous reconvertissons l’image en niveaux de gris en une image avec canaux de couleur si nécessaire (lignes 36-37)
  • A partir de la ligne 39, les cases qui ont un score supérieur à 60 seront colorées.
  • Pour cela, nous extrayons le texte, commençons les coordonnées et les dimensions de la boîte à la ligne 41.
  • Seulement si un texte (non vide) a été détecté, on dessine la case (43-45).
  • Ensuite, nous exécutons le script et attendons que la touche d’échappement soit enfoncée (lignes 47/48).

Exécutons maintenant le script :

python3 example.py

Ensuite, les 5 images différentes apparaissent l’une après l’autre (appuyez sur ESC pour faire apparaître l’image suivante). Le texte reconnu est marqué dessus. De cette façon, vous pouvez déterminer quelle étape de prétraitement vous convient le mieux.

Reconnaître le texte dans les images en direct via la caméra Raspberry Pi

Jusqu’à présent, nous n’avons utilisé que des images statiques comme entrée pour notre reconnaissance de texte. Maintenant, nous aimerions également reconnaître les textes dans le flux en direct de la caméra connectée. Cela ne nécessite que quelques petites modifications par rapport à notre script précédent. Nous créons un nouveau fichier :

sudo nano ocr_camera.py

Le fichier obtient le contenu suivant :

Ce que nous avons changé maintenant :

  • Aux lignes 5-6, nous définissons la caméra, au lieu d’une image fixe. La caméra doit être connectée et reconnue.
  • À la ligne 10, nous lisons ensuite la trame actuelle.
  • Nous avons omis les étapes de prétraitement ici, mais celles-ci peuvent également être insérées assez facilement (à la ligne 11).

Enfin, nous exécutons également le script :

python3 ocr_camera.py

Tenez maintenant l’appareil photo au-dessus d’un texte et observez comment les mots qui s’y trouvent sont reconnus :

 » alt= »Raspberry Pi OCR – Texte dans le logo » width= »577″ height= »500″ data-ez= » » data-ezsrc= »https://tutorials-raspberrypi.com/ezoimgfmt/tutorials-raspberrypi.de/wp-content/uploads/Raspberry-Pi-OCR-Text-in-Logo-577×500.png » />

Dans mon exemple, vous voyez bien qu’une conversion en image en valeur de gris aurait eu du sens car le mot « Tutoriels » est trop clair.

Reconnaissance de texte dans d’autres langues

Tesseract n’a que l’anglais installé comme langue par défaut. Nous pouvons vérifier cela avec ceci:

tesseract --list-langs

Si vous souhaitez ajouter d’autres langues dans lesquelles les textes doivent être reconnus, procédez comme suit :

sudo apt-get install tesseract-ocr-[lang]

Remplacer [lang] avec l’abréviation de la langue (all installe tout ceux existants).

Ensuite, vous pouvez sélectionner la langue dans le script Python. Ajoutez le paramètre :

Conclusion

Avec Tesseract, nous avons un outil puissant qui fournit une reconnaissance de texte prête à l’emploi pour les images ou les cadres. Cela signifie que nous n’avons pas à nous former et à créer notre propre modèle d’apprentissage automatique. Malgré l’effort de calcul relativement élevé, la reconnaissance de texte Raspberry Pi fonctionne très bien. Le résultat peut être amélioré avec différentes étapes de traitement.

En passant, vous pouvez également trouver les deux scripts dans le Github-Référentiel.