Publié le 30 septembre 2020 - par

Vision artificielle : Testez la technologie TensorFlow / OpenCV4 sur Raspberry Pi 4

Vous souhaitez mettre en œuvre une caméra de vidéosurveillance qui peut identifier plusieurs éléments différents ? Ou peut-être optimiser votre robot et lui donner la possibilité de détecter des objets?

Le Raspberry Pi 4 offre suffisamment de performances pour effectuer de l’apprentissage machine. Dans ce tutoriel, vous verrez les étapes à suivre pour faire fonctionner TensorFlow sur votre Raspberry Pi 4, ainsi qu’une démonstration de détection d’objets avec une Camera PI ou une Webcam USB.

Installez OpenCV et Tensorflow

La technologie TensorFlow,  Quésaco ?

TensorFlow est un Framework open source de machine learning permettant de résoudre des problèmes mathématiques complexes. Elle permet aux chercheurs de développer des architectures d’apprentissage expérimentales et de les transformer en logiciels. TensorFlow a été développé par l’équipe de Google Brain en 2011 et rendu open source en 2015. Depuis lors, il a subi plus de 21000 modifications  et est passé en version 1.0 en février 2017. Actuellement, la version 2.3.0 est disponible sur le site de TensorFlow.

Cette bibliothèque permet notamment d’entraîner et d’exécuter des réseaux de neurones pour la classification de chiffres écrits à la main, la reconnaissance d’image, les modèles pour la traduction automatique, ou encore le traitement naturel du langage. Le code d’une application est rédigé en langage Python mais exécuté  en C++ haute performance. Ici, la framboise et sa caméra pourront détecter une centaine d’objets différents ! De plus on obtient de bons résultats la nuit avec une caméra IR équipé de Leds.

Le matériel et les logiciels requis

  • Une Framboise 4,
  • Une alimentation de 3000mA avec son câble USB-C,
  • Une carte micro-sd (minimum 32 GB)
  • Une Picamera (ou webcam Usb)—–(Pour le tuto, j’utilise une Picamera et ses 2 Leds Infrarouges

Côté logiciel, la micro-sd a été flashée avec la dernière version de Raspbian Buster téléchargeable sur le site officiel. Python3 y est installé par défaut, pour lancer un programme en ligne de commande, il faudra tapez dans un terminal :

 

Ici, le programme Object_detection_picamera.py aura besoin de plusieurs éléments pour fonctionner :

  1. Le fichier mscoco_label_map.pbtext correspondant à la liste des 100 objets détectables que j’ai pris soin de traduire en Français, de sorte que les objets détectés soient affichés dans la langue de Molière :), il est situé dans le dossier data.
  2. Le dossier « ssdlite_mobilenet_v2_coco_2018_05_09 » ou sont stockés les fichiers du modèle d’entraînement. 
  3. Le dossier utils (utilitaires) contenant les modules de classification des différents objets.

Installation de TensorFlow

Commencez par mettre à jour le Raspberry Pi.

Ensuite, installez TensorFlow avec la commande pip3.

TensorFlow a besoin d’une librairie nommée Atlas, tapez la commande suivante :

Enfin il faudra installer les dépendances nécessaires pour la détection d’objets.

Voilà pour TensorFlow. Passons à OpenCV.

Installation d’OpenCv

Les exemples de détection d’objets de TensorFlow utilisent généralement matplotlib pour afficher des images, mais il est préférable d’utiliser OpenCV car il est plus facile à utiliser et moins sujet aux erreurs. Les scripts de détection d’objets dans le référentiel GitHub de ce guide utilisent OpenCV. Pour faire fonctionner OpenCV sur le Raspberry Pi, de nombreuses dépendances doivent être installées via apt-get.

Si tout c’est bien passé, OpenCV est installé sur votre Framboise.

Vous pouvez vérifier si l’installation est réussie et la version installée. Ouvrez un terminal et lancer l’interprétateur Python3.

 

L’API de détection d’objets TensorFlow utilise Protobuf, un package qui implémente le format de données Protocol Buffer de Google. Avant, il fallait compiler le code source de Protobuf (un peu fastidieux), mais maintenant, l’installation est très simple, grâce aux multiples contributions dont je vous parlais plus haut .

Lancer dans le terminal un :

afin de vérifier la version installée, vous devriez avoir en réponse libprotoc 3.6.1(version la plus récente.)

Créez un répertoire tensorflow et placez vous dedans (/home/pi/tensorflow).

 

Téléchargez le référentiel tensorflow depuis GitHub en tapant :

 

Ensuite, il faut modifier la variable d’environnement PYTHONPATH pour qu’elle pointe vers certains répertoires dans le référentiel TensorFlow que vous venez de télécharger. Il faut que PYTHONPATH soit défini à chaque fois qu’un terminal est ouvert, il faut donc modifier le fichier .bashrc.

Allez à la fin du fichier, et ajoutez cette ligne.

export PYTHONPATH=$PYTHONPATH:/home/pi/tensorflow/models/research:/home/pi/tensorflow/models/research/slim

Maintenant, nous devons utiliser Protoc pour compiler les fichiers Protocol Buffer (.proto) utilisés par l’API de détection d’objets. Les fichiers .proto se trouvent dans / research / object_detection / protos, mais nous devons exécuter la commande depuis le répertoire / research.

Ensuite, déplacez-vous dans le répertoire object_detection:

Maintenant, téléchargez le modèle SSD_Lite. Les équipes de Google ont développé un série de fichiers de détection d’objets pré-entraînés, avec différents niveaux de vitesse et de précision. Le Raspberry Pi a un processeur relativement faible pour l’application de reconnaissance, il faut donc utiliser un modèle qui prend moins de puissance de traitement.  Ici, nous utiliserons SSDLite-MobileNet, qui reste bien adapté pour la framboise. Téléchargez le fichier et décompressez le dans le répertoire object_detection.

Enfin, copier/coller le programme python sur mon lien GitHub dans un fichier nommé Object_detection_picamera.py

Si vous souhaitez porter l’application sur d’autre Raspberry Pi avec OpenCV et TensorFlow installés, il suffira de télécharger le .ZIP des fichiers nécessaires disponibles sur GitHub.

Votre application est maintenant prête à fonctionner !

Essais de détection en temps réel

Une fois la caméra branchée et activée ($ sudo raspi-config ou via l’interface graphique du bureau), ouvrez un terminal et placez vous dans le répertoire object_detection. Tapez la commande:

Pour le tutoriel, le programme sera soumis à deux situations de détection : de nuit et de jour.

Version nocturne

Ici, la caméra est située à environ 6 mètres du sujet à détecter. On distingue une silhouette humaine, la fenêtre de détection indique que le sujet est une personne, avec un taux de certitude de 79%. Avec des Leds IR plus puissante, on devrait augmenter la distance de détection.

Une version animée, même si on distingue pas sur le rectangle de détection l’inscription, la chaise et la personne sont bien reconnues. Vous pouvez ouvrir le lien vidéo ci dessous de chaque animation et apercevoir le résultat dans le cartouche du rectangle.

21:19:33

Et enfin,

21:06:30

Version de jour

Ici la personne se déplace en marchant rapidement, à la fin de l’animation, elle passe très vite devant la caméra, qui la détecte automatiquement.

10:19:19

Un exemple typique de reconnaissance de plusieurs objets différents.

10:40:08

Conclusion

Une fois que votre application sera opérationnelle, toutes les possibilités sont offertes.

Dans le cadre de l’actualité tragique, au sujet des mutilations d’animaux, il serait intéressant d’augmenter la puissance des Leds IR.  Pour une application autonome, à base de panneaux solaires, il suffirait d’effectuer un calcul de la puissance consommée par l’ensemble de l’installation, et déterminer le type de batterie adapté.

Toujours au niveau batterie, la technologie Lion-i semble bien adaptée, du fait de son faible encombrement et de son autonomie, le prix est plus élevé qu’une batterie au plomb, mais offre des bons résultats en milieu soumis aux froid ou à la chaleur.

Sources

https://www.tensorflow.org/

https://github.com/stefanekz/Reconnaissance-objets-avec-Raspberry-Pi4-OpenCV4-TensorFlow

 

 

7 réflexions au sujet de « Vision artificielle : Testez la technologie TensorFlow / OpenCV4 sur Raspberry Pi 4 »

  1. ALF

    Bonjour,
    Cet article est une traduction d’informations que l’on trouve sur cette page :
    https://github.com/EdjeElectronics/TensorFlow-Object-Detection-on-the-Raspberry-Pi
    Le code est une copie de celui disponible ici :
    https://github.com/EdjeElectronics/TensorFlow-Object-Detection-on-the-Raspberry-Pi/blob/master/Object_detection_picamera.py
    Peut-être aurait-il été plus pertinent d’indiquer les sources dans un soucis de transparence et de rigueur qui me semble-t-il est la marque de fabrique de ce blog.
    Salutations

    Répondre
    1. kuentz

      Bonjour,

      Ce tutoriel n’est pas un simple copié collé du lien évoqué, dont je me suis essentiellement « inspiré » mais aussi un petit travail de traduction, sur la liste des 100 objets ainsi que les commentaires du code.
      Rappelons que tout ceci reste du bénévolat, nous le faisons sur le temps libre tout simplement par passion pour la framboise 🙂
      Rien ne vous empêche de rédiger AUSSI des articles sur le blog.

      @++

      Répondre
    2. Pascal

      J’ai suivi ce tuto et obtenu le résultat escompté donc un grand merci pour avoir partégé ces infos.
      J’aime beaucoup ce blog et j’y reviens régulièrement.
      Cependant…
      S’inspirer du travail d’autrui est une excellente chose, c’est ce qui fait avancer la science et la technologie, mais il me semble aussi que dans le cas présent il fallait citer les sources.
      C’est une question d’intégrité intellectuelle.
      Traduire une partie du code et le commenter est certe un travail mais il est sans commune mesure avec l’effort à fournir pour mettre au point ce programme et maitriser toutes les connaissances et aspects techniques nécessaires à son écriture et à sa mise au point.

      Répondre
  2. Yannick

    Merci et bravo pour ce super tuto complet et fonctionnel. Testé avec succès.
    2 petits commentaires mineurs :
    – dans les sections avec les commandes shell, il serait plus pratique de ne pas avoir le $ en début de ligne (pour copier/coller c’est + simple)
    – dans « cd /home/pi/tensorflow1/models/research », il y a le « 1 » en trop derrière tensorflow

    Bravo en tout cas.

    Répondre
  3. Henri GUERAD PINET

    Bonjour,
    Mon matériel :
    Raspberry PI 4 4go de ram & SD de 32G,
    Depuis quelques temps j’essaye d’utilisé OPENCV sens jamais avoir réussi à l’installer jusqu’a trouver un bon tutoriel ici : https://www.aranacorp.com/fr/installation-dopen-cv-sur-raspberry-pi/
    Mais maintenant je me heurte à TensorFlow qui refuse de se lancer avec toujours cette même erreur « The problem is that tensorflow/python/pywrap_tensorflow_internal.py contains async as variable names but async becomes a keyword in python3.7 so it’s no longer available. »
    Avez-vous une quelconque idée de résoudre ceci ?
    PYTHON 3.7 ne serai pas compatible avec TensorFlow , Avez-vous connaissance de ceci ?
    Savez-vous comment downgrader PYTHON 3.7 vers PYTHON 3.6 (qui semblerai être la solution) ?
    MERCI de ce tutoriel sur IA ,
    Henri GUERAD PINET

    Répondre
  4. Christophe

    Bonjour

    Merci pour ce travail francophone.

    Je suis entrain de réfléchir à utiliser ce code pour automatiser un effaroucheur à oiseaux dans les cultures.

    L’idée avoir 4 cameras sur un mat pour surveiller à 360 degré.

    Je n’est pas besoins d’affichage. Seul la détection m’intéresse. L’objet et les coordonnées.

    Un pi 3 serait-il suffisant ou si un pi 4 combien faut-il de Ram ?

    Chaque caméra aura son raspberry. Ceci donneront l’info a un 5eme qui ce chargera de faire une action(mannequin, canon, musique…) suivant l’objet détecté….

    De plus comment récupérer le flux d’une caméra ip ? (reolink 510A)

    En remplacent

    Cv2.Capture(camera)

    Par

    Cv2.imread(« rtsp://utilisateur:m2p@ip:554//h264Preview_01_sub »)

     

    D’avance merci de votre aide.

     

    Répondre

Laisser un commentaire

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

Complétez ce captcha SVP *

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