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.
Au sommaire :
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 :
1 |
$ python3 mon_programme.py |
Ici, le programme Object_detection_picamera.py aura besoin de plusieurs éléments pour fonctionner :
- 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.
- Le dossier « ssdlite_mobilenet_v2_coco_2018_05_09 » ou sont stockés les fichiers du modèle d’entraînement.
- Le dossier utils (utilitaires) contenant les modules de classification des différents objets.
Installation de TensorFlow
Commencez par mettre à jour le Raspberry Pi.
1 |
$ sudo apt-get update |
1 |
$ sudo apt-get dist-upgrade |
Ensuite, installez TensorFlow avec la commande pip3.
1 |
$ sudo pip3 install tensorflow |
TensorFlow a besoin d’une librairie nommée Atlas, tapez la commande suivante :
1 |
$ sudo apt-get install libatlas-base-dev |
Enfin il faudra installer les dépendances nécessaires pour la détection d’objets.
1 |
$ sudo pip3 install pillow lxml jupyter matplotlib cython |
1 |
$ sudo apt-get install python-tk |
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.
1 2 3 4 |
$ sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev $ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev $ sudo apt-get install libxvidcore-dev libx264-dev $ sudo apt-get install qt4-dev-tools libatlas-base-dev |
1 |
$ sudo pip3 install opencv-python |
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 .
1 |
$ sudo apt-get install protobuf-compiler |
Lancer dans le terminal un :
1 |
$ protoc --version |
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).
1 |
$ mkdir tensorflow |
1 |
$ cd tensorflow |
1 |
$ git clone --depth 1 https://github.com/tensorflow/models.git |
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.
1 2 |
$ wget http://download.tensorflow.org/models/object_detection/ssdlite_mobilenet_v2_coco_2018_05_09.tar.gz $ tar -xzvf ssdlite_mobilenet_v2_coco_2018_05_09.tar.gz |
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:
1 |
$ python3 Object_detection_picamera.py |
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.
Et enfin,
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.
Un exemple typique de reconnaissance de plusieurs objets différents.
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
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
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.
@++
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.
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.
Superbe article ! Merci. Je ne savais même pas qu’il était possible de faire cela avec Rasp 🙂
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
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.