Comment reconnaître différents objets en utilisant un Raspberry Pi et OpenCV ? Ce tutoriel vous explique comment faire. Vous pourrez ensuite envoyer un e-mail avec la photo de l’objet en pièce jointe.
Au sommaire :
Reconnaissance d’objet avec OpenCV sur un Raspberry Pi
L’intelligence artificielle est une science, qui aide les machines à interagir de la « même » manière que les humains. Une partie de ce vaste et passionnant domaine, est consacrée à la reconnaissance d’images.
Les applications sont multiples, comme le recensement de différentes espèces animales ou la reconnaissance de visages, en passant par la vidéosurveillance et la domotique…
Ce projet de reconnaissance d’objets, tourne autour du logiciel libre OpenCV (Open Source Computer Vision Library). Le programme python s’occupe de détecter un mouvement, de reconnaître l’objet (voiture, chat , chien…) et d’envoyer un e-mail avec une photo en pièce jointe.
OpenCV est utilisé pour effectuer des calculs de traitement d’images. Il conjugue vision et intelligence artificielle, autant vous dire que l’industrie des technos est attentive à ce genre de solution. Il est compatible avec les OS Windows, Android, MacOS et bien sur, Linux (Raspbian :))
Ici, OpenCV utilisera un modèle de réseaux neuronaux artificiels, développé par Google : les Mobilenet SSD. Conçu pour l’embarqué, Il est particulièrement performant sur l’ architecture ARM du Raspberry. 🙂
L’objectif du tutoriel, est de pouvoir détecter un objet, le reconnaître et envoyer un courriel avec photo en pièce jointe, au moment précis de la détection.
Le matériel
Le programme de reconnaissance requière pas mal de ressources processeur. Équipée de sa Picaméra, la Raspberry Pi 3B+ est bien adaptée pour la situation 🙂
Pour rappel, son alimentation doit fournir au minimum 2500mA.
Pour ce tutoriel, nous utiliserons une machine Linux (Ubuntu 18.04) qui contrôlera à distance le Raspberry Pi, à l’aide de la suite VNC (Viewer et Server) et son environnement graphique. VNC est compatible avec Windows et MacOS.
Il nous faudra une box, avec une connexion wifi ou filaire.
Préparation de Raspbian Stretch Desktop
Considérons le fait que la dernière version de Raspbian Desktop, est installée et mise à jour sur votre Raspberry et bien sûr, qu’elle est connectée au réseau local. Dans le menu de configuration, activez le serveur VNC, SSH et la Picaméra.
A titre personnel, je trouve que le contrôle à distance (version VNC) du Pi, est pratique pour 2 raisons. Vous dispensez la framboise d’un écran HDMI, donc le boîtier peut-être installé n’importe où. De plus, vous profitez du confort de l’environnement graphique ! Yo 🙂
Capture d’écran de mon PC Ubuntu, avec le bureau distant du Raspberry et OpenCV en exécution.
Pour installer VNC Viewer sur votre PC Linux, il suffit de télécharger le paquet Debian à cette adresse. Le gestionnaire de paquets présent par défaut sur Ubuntu, s’occupera d’installer le logiciel.
Avant de se connecter à distance sur votre Pi, il faudra récupérer son adresse IP. Vous pouvez scanner votre réseau local avec Zenmap. Ou plus simplement, si vous avez un smartphone connecté au wi-fi, téléchargez une application de scan.
Ouvrez VNC Viewer, entrez l’adresse IP du Raspberry dans la barre du dessus, une fenêtre de connexion vous invite à entrer login et mot de passe. Par défaut, ce sera pi en login et raspberry en mot de passe. Voilà, vous êtes connecté au bureau de Raspbian.
Installation de OpenCV avec pip
pip est un package qui permet de télécharger et d’installer rapidement des applications Python. Dernièrement, pour OpenCv, il était préférable de compiler les sources du logiciel, ce qui nécessite plus de 4 heures de compilation pour la Raspberry. Il est possible désormais d’installer OpenCV avec pip en quelques lignes de commande. Efficace et rapide 🙂
Avant toute chose, téléchargez les librairies requises.
1 2 |
$ sudo apt-get install libhdf5-dev libhdf5-serial-dev $ sudo apt-get install libqtwebkit4 libqt4-test |
Installez pip avec ces 2 commandes,
1 2 |
$ wget https://bootstrap.pypa.io/get-pip.py $ sudo python3 get-pip.py |
ainsi qu’ OpenCV et le module Python de la PI caméra.
1 2 3 4 |
$ sudo pip install opencv-contrib-python $ sudo pip install "picamera[array]" $ sudo pip install imutils $ sudo pip install pyautogui |
1 2 3 4 |
$ sudo apt-get install libatlas-base-dev $ sudo apt-get install libjasper-dev $ sudo apt-get install libqtgui4 $ sudo apt-get install python3-pyqt5 |
Tests de bon fonctionnement
1 |
$ python3 |
1 |
>>> import cv2 |
1 |
>>> cv2.__version__ |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# test de la caméra picamera.py # importer les paquets requis pour la Picaméra from picamera.array import PiRGBArray from picamera import PiCamera import time import cv2 # initialisation des paramètres pour la capture camera = PiCamera() camera.resolution = (800, 600) camera.framerate = 32 rawCapture = PiRGBArray(camera, size=(800, 600)) # temps réservé pour l'autofocus time.sleep(0.1) # capture du flux vidéo for frame in camera.capture_continuous(rawCapture, format="bgr", use_video_port=True): # recupère à l'aide de Numpy le cadre de l'image, pour l'afficher ensuite à l'écran image = frame.array # affichage du flux vidéo key = cv2.waitKey(1) & 0xFF # initialisation du flux rawCapture.truncate(0) # si la touche q du clavier est appuyée, on sort de la boucle if key == ord("q"): break |
1 |
$ python3 picamera.py |
Le programme Python
- le programme Python : reconnaissance_objets.py
- Le fichier entraîné aux 21 types d’objets : MobileNetSSD_deploy.caffemodel
- Le fichier de configuration : MobileNetSSD_deploy.prototxt
Ci dessous, le code du programme, reconnaissance_objets.py :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 |
# Ouvrir un terminal et executer la commande ci dessous # python3 reconnaissance_objets.py --prototxt MobileNetSSD_deploy.prototxt.txt --model MobileNetSSD_deploy.caffemodel # importer tout les packages requis from imutils.video import VideoStream from imutils.video import FPS import numpy as np import argparse import imutils import time import cv2 # packages nécessaires pour la gestion des emails import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.mime.base import MIMEBase from email import encoders import ntpath import pyautogui # construction des arguments ap = argparse.ArgumentParser() ap.add_argument("-p", "--prototxt", required=True, help="path to Caffe 'deploy' prototxt file") ap.add_argument("-m", "--model", required=True, help="path to Caffe pre-trained model") ap.add_argument("-c", "--confidence", type=float, default=0.2, help="minimum probability to filter weak detections") args = vars(ap.parse_args()) # initialiser la liste des objets entrainés par MobileNet SSD # création du contour de détection avec une couleur attribuée au hasard pour chaque objet CLASSES = ["arriere-plan", "avion", "velo", "oiseau", "bateau", "bouteille", "autobus", "voiture", "chat", "chaise", "vache", "table", "chien", "cheval", "moto", "personne", "plante en pot", "mouton", "sofa", "train", "moniteur"] COLORS = np.random.uniform(0, 255, size=(len(CLASSES), 3)) # chargement des fichiers depuis le répertoire de stockage print(" ...chargement du modèle...") net = cv2.dnn.readNetFromCaffe(args["prototxt"], args["model"]) # initialiser la caméra du pi, attendre 2s pour la mise au point , # initialiser le compteur FPS print("...démarrage de la Picamera...") vs = VideoStream(usePiCamera=True, resolution=(1600, 1200)).start() time.sleep(2.0) fps = FPS().start() # boucle principale du flux vidéo while True: # récupération du flux vidéo, redimension # afin d'afficher au maximum 800 pixels frame = vs.read() frame = imutils.resize(frame, width=800) # récupération des dimensions et transformation en collection d'images (h, w) = frame.shape[:2] blob = cv2.dnn.blobFromImage(cv2.resize(frame, (300, 300)), 0.007843, (300, 300), 127.5) # determiner la détection et la prédiction net.setInput(blob) detections = net.forward() # boucle de détection for i in np.arange(0, detections.shape[2]): # calcul de la probabilité de l'objet détecté # en fonction de la prédiction confidence = detections[0, 0, i, 2] # supprimer les détections faibles # inférieures à la probabilité minimale if confidence > args["confidence"]: # extraire l'index du type d'objet détecté # calcul des coordonnées de la fenêtre de détection idx = int(detections[0, 0, i, 1]) box = detections[0, 0, i, 3:7] * np.array([w, h, w, h]) (startX, startY, endX, endY) = box.astype("int") # creation du contour autour de l'objet détecté # insertion de la prédiction de l'objet détecté label = "{}: {:.2f}%".format(CLASSES[idx], confidence * 100) cv2.rectangle(frame, (startX, startY), (endX, endY), COLORS[idx], 2) y = startY - 15 if startY - 15 > 15 else startY + 15 cv2.putText(frame, label, (startX, y), cv2.FONT_HERSHEY_SIMPLEX, 0.5, COLORS[idx], 2) # enregistrement de l'image détectée cv2.imwrite("detection.png", frame) # envoi d'un email avec l'image en pièce jointe email = 'votre_e_mail@gmail.com' password = 'votre_mot_de_passe' send_to_email = 'votre_e_mail@gmail.com' subject = 'detection' message = 'detection' file_location = 'le_répertoire_de_votre_choix/detection.png' msg = MIMEMultipart() msg['From'] = email msg['To'] = send_to_email msg['Subject'] = subject body = message msg.attach(MIMEText(body, 'plain')) filename = ntpath.basename(file_location) attachment = open(file_location, "rb") part = MIMEBase('application', 'octet-stream') part.set_payload((attachment).read()) encoders.encode_base64(part) part.add_header('Content-Disposition', "attachment; filename=%s" % filename) msg.attach(part) server = smtplib.SMTP('smtp.gmail.com', 587) server.starttls() server.login(email, password) text = msg.as_string() server.sendmail(email, send_to_email, text) server.quit() # affichage du flux vidéo dans une fenètre cv2.imshow("Frame", frame) key = cv2.waitKey(1) & 0xFF # la touche q permet d'interrompre la boucle principale if key == ord("q"): break # mise à jour du FPS fps.update() # arret du compteur et affichage des informations dans la console fps.stop() print("[INFO] elapsed time: {:.2f}".format(fps.elapsed())) print("[INFO] approx. FPS: {:.2f}".format(fps.fps())) cv2.destroyAllWindows() vs.stop() |
vs = VideoStream(usePiCamera=True, resolution=(1600, 1200)).start()
en vs = VideoStream(0).start()
Mise en situation
Pour les essais, nous utiliserons donc, une Raspberry 3B+ équipée d’un trépied d’appareil photo.
Dans le répertoire où sont stockés vos fichiers, ouvrez une console et entrez la commande ci dessous:
$ python3 reconnaissance_objets.py --prototxt MobileNetSSD_deploy.prototxt.txt --model MobileNetSSD_deploy.caffemodel
Une mise en situation avec des bouteilles posées à différents endroits.
Au moment de la détection, le programme se charge d’envoyer un e-mail avec une photo en pièce jointe. Voici le résultat, en une série d’exemples par images :
La voiture de la poste, pratique lorsque l’on attend un colis 🙂
Conclusion
Pour aller plus loin, ce projet peut s’adapter en fonction de vos besoins, il suffit d’entraîner un groupe d’images d’un sujet particulier et réaliser une reconnaissance précise. A titre d’exemple, je suis entrain de réaliser un système autonome en énergie, alimenté par panneaux solaires. Le Rasperry est installé dans un arbre et connecté sur internet via un dongle 3G usb.
Il est chargé de m’envoyer un courriel à chaque détection d’un animal particulier. Pour ce faire, j’entraîne un modèle de 1000 images, pour chaque catégorie d’animal. Dans ma région, on trouve surtout des sangliers, des écureuils, lapins, lièvres, (peut-être des loups) ou autre renards…
Le but est d’effectuer un recensement des différentes populations dans une zone précise. Par exemple, le dispositif pourrait être intéressant dans le cadre d’une surveillance de troupeaux d’élévage, face aux attaques de loups. Le projet est pour l’instant, en cour de réalisation. Mais peut-être fera l’objet du nouveau tutoriel.
Au sujet de l’auteur
Electronicien de formation, je suis passionné par les possibilités du Raspberry Pi dont la vision artificielle. La portabilité du Pi, ouvre un champs d’applications aussi différentes les unes que les autres. Je me focalise sur la reconnaissance de formes ou d’objets sur site isolé.
Superbe idée que ce tuto. J’étais à la recherche de tutos de base sur l’AI, me voilà servi. Je tenterai la mise en application dès que possible. Un grand merci.
Super tutoriel ! Ça serait génial d’en faire un pour l’entraînement aussi !!
Super tuto. Est ce que ça fonctionne si les objets à détecter sont en mouvement ? Est ce que l algorithme se trompe souvent ? En résumé quelles sont les limites d utilisation avec le raspberry ?
« Vous pouvez créer votre propre modèle, pour reconnaître un type d’objet précis. Un tutoriel complet pourrait y être consacré. » J’avoue que même si on doit pouvoir trouver ça tout seul en cherchant ce serait sympa ;). Tuto clair en français qui plus est !
Merci pour vos retours,
Je n’ai pas précisé les adresses des deux fichiers d’entraînement : Prototext et Caffemodel.
Ils sont téléchargeables sur GitHub
Prototext
https://github.com/chuanqi305/MobileNet-SSD/blob/master/voc/MobileNetSSD_deploy.prototxt
Caffemodel
https://github.com/C-Aniruddh/realtime_object_recognition/blob/master/MobileNetSSD_deploy.caffemodel
Le code, dans ce cas précis ne demande pas une charge processeur énorme. Ce serait plutôt l’affichage de la vidéo en direct qui demande des ressources. En fait, il faudrait enlever de la boucle while, cette fonction d’affichage d’opencv : cv2.imshow(« Frame », frame)
Au niveau des limites du programme, il y en a une de taille, la luminosité. Il faut aussi éviter les contres jour.
Je vais bientôt tester le code, avec ma boite solaire, équipée d’une batterie, la reconnaissance de nuit. J’ai un éclairage infrarouge à déclenchement. On verra bien 🙂
Dans tout les cas, il est préférable que le modèle d’entraînement se base sur un grand nombre d’images, du même objet. C’est un gage de précision. D’ailleurs on peut le voir avec le taux de prédiction affiché sur l’image. J’éditerais prochainement un tuto sur le sujet, avec un programme python et une API de Google ou de Bing qui permet de collecter un grand nombre d’images d’un sujet particulier.
@+
Merci Stephane, ce tuto marche impeccablement sauf des erreurs mineures qui obligent à nous bouger les neurones !
Maintenant, je veux entraîner mon jeu d’images. Il y a beaucoup de tutos su le sujet, plus ou moins datés. Tu peux nous donner des pistes pour utiliser les outils les plus récents, probablement ceux de Google ?
Raymond
Salut j’ai quelques erreurs j’ai reproduit étape par étape ce qu’il y a sur le site mais ca ne marche pas. Quand je lance la commande final pour tout faire marcher il m’affiche :
net = cv2.dnn.readNetFromCaffe
cv2.error : OpenCV
Tout simplement magnifique.
En correspondance avec domoticz (ou autre logiciel de domotique) les possibilités sur la detection de presence, d’intrusion ou autre sont vraiment infini.
Je suis vraiment interressé aussi par un tuto pour entrainer l’ai sur d’autre modele. Peut etre aussi préciser des formes ou des couleurs. Par exemple la difference entre une voiture et une voiture de la poste…
Aussi pourquoi utiliser opencv 3 alors que la 4 a l’air disponible sur leur site ?
En tout cas merci pour tout. Je met ca de coté des que le temps me le permettra..
Pour le coup, les véhicules de la poste, ont une couleur carrosserie bien définie :). « jaune d’oeuf »
Il faut récupérer dans un premier temps, un maximum d’image de voitures de la poste, avec la quantité d’images, on s’affranchit des problèmes d’exposition.
Au sujet du choix entre la version 3 ou 4 d’OpenCV, j’ai la » vielle » habitude d’utiliser la version 3 avec Python3, j’ai moins de soucis d’interprétation de commande 🙂
Mais je vais essayer OpenCV4 sur Raspberry avec la méthode pip.
Bonjour,
Ce projet m’intéresse à titre personnel. Je suis en train de finaliser une machine viticole que j’avais en projet (je suis fils de vigneron et technicien de maitenance). Je souhaiterais faie un usage détourné de ce système : j’utilise un vérin pneumatique pour mouvoir ma machine, et ainsi l’engager et la désengager dans la rangée de vignes. Simplement certains obstacles sont indésirables et donc à éviter au risque de l’endommager. Open CV semble être une aubaine pour moi !
Serait-il possible de programmer un RPI avec open CV afin de piloter le distributeur qui actionne mon vérin, et ainsi de faire un système de désengagement automatique de protection ? (en fonction de la nature de l’obstacle).
D’avance, merci !
Bonsoir LINDENLAUB,
Avec Python, Il est possible de modifier la sortie du programme en actionnant un élément via le GPIO du Pi.
Votre projet est réalisable, pourriez vous m’envoyer des photos de votre système ?
Cordialement
Stéphane Kuentz
Bonjour Stéphane,
Merci pour votre réponse ! Je vais essayer de prendre quelques photos représentatives ce week-end pour que vous puissiez voir de quoi il s’agit.
Merci,
Maxime
bon soir,as que je peut fair une simulation sur le pc sans le raspbiry ?????!!!!!!
Salut, oui tu peux le faire avec n’importe quel pc équipé d’un système d’exploitation classique (windows, linux, mac os). Tu vas avoir besoin d’installer un compilateur python (si il n’est pas installé par défaut) et d’une entrée vidéo. mais attention tu risques de devoir modifier la partie ou tu appelles la vidéo dans le programme
Bonjour Stéphane,
Merci pour votre réponse. Je vais essayer de prendre quelques photos représentatives ce week-end pour que vous puissiez voir de quoi il s’agit.
Merci,
Cordialement,
Maxime
Bonsoir Stéphane,
Comment puis je vous faire parvenir des photos de mon système ?
Cordialement,
Maxime
Bonjour,
j’ai un message d’erreur au test de la camera
Traceback (most recent call last):
File « picamera.py », line 3, in
from picamera.array import PiRGBArray
File « /home/pi/Documents/picamera.py », line 3, in
from picamera.array import PiRGBArray
ImportError: No module named ‘picamera.array’; ‘picamera’ is not a package
Bonsoir,
Essayer d’installer le paquet python3 pour la Picamera.
$ sudo apt-get install python3-picamera
bonsoir,
c’est ce que j’ai fait mais même erreur.
je suis sur rpi 2, ça peut jouer ?
merci
Non, ce n’est pas un problème de pi2, j’ai essayé avec une pi zéro w, avec la dernière version de raspbian, tout fonctionne sans problème.
Dans votre cas, il faut repartir avec un système neuf et mis à jour.
Bonne soirée
Bonjour Marc, Stéphane,
Merci Stéphane pour ce super Tuto.
J’avais la même erreur, j’ai complètement réinstallé le pi, toujours la même erreur.
J’ai résolut en copiant les bibliothèques directement dans le répertoire du projet…
j’ai eu ensuite une erreur avec import Xlib… J’ai du l’installer, puis la copier dans le répertoire du projet… Et roule.
J’ai maintenant une nouvelle erreur, la picam s’allume, et j’ai le message suivant :
…chargement du modèle…
…démarrage de la Picamera…
Traceback (most recent call last):
File « reconnaissance_objets.py », line 109, in
attachment = open(file_location, « rb »)
FileNotFoundError: [Errno 2] No such file or directory: ‘/home/pi/Desktop/reconnaissance_objets/detection.png’
Cordialement,
AlexO
~/workarea/git/openCv2 $ python3
Python 3.5.3 (default, Sep 27 2018, 17:25:39)
[GCC 6.3.0 20170516] on linux
Type « help », « copyright », « credits » or « license » for more information.
>>> import picamera
Traceback (most recent call last):
File « », line 1, in
File « /home/pi/workarea/git/openCv2/picamera.py », line 3, in
from picamera.array import PiRGBArray
ImportError: No module named ‘picamera.array’; ‘picamera’ is not a package
J’ai rencontré le même problème par ma solution est de faire un import dans le dossier des package
~/workarea/git/openCv2 $ python3
Python 3.5.3 (default, Sep 27 2018, 17:25:39)
[GCC 6.3.0 20170516] on linux
Type « help », « copyright », « credits » or « license » for more information.
>>> import picamera.array
Traceback (most recent call last):
File « », line 1, in
File « /home/pi/workarea/git/openCv2/picamera.py », line 3, in
from picamera.array import PiRGBArray
ImportError: No module named ‘picamera.array’; ‘picamera’ is not a package
Par contre ici cela marche dans le dossier /usr/lib/python3/dist-packages!
/usr/lib/python3/dist-packages $ python3
Python 3.5.3 (default, Sep 27 2018, 17:25:39)
[GCC 6.3.0 20170516] on linux
Type « help », « copyright », « credits » or « license » for more information.
>>> import picamera.array
La solution pour le problème :
https://stackoverflow.com/questions/46305203/python-import-only-works-when-run-from-inside-package-directory
Une autre solution qui marche chez moi c’est de changer le nom de script et de ne pas l’appeler picamera.py par ce que python essai de chercher le package dans le fichier avec le même nom et il ne le trouve pas !!
pour moi aussi.
Ok pour l’erreur, detection.png, je n’avais pas vu que le chemin était codé en dur… il n’y a pas le /Desktop/ chez moi. J’ai modifié, ça roule.
Effectivement, j’ai mis arbitrairement, le chemin à la ligne 101: file_location = ‘/home/pi/Desktop/reconnaissance_objets/detection.png’
J’ai modifié le code dans le tuto. 🙂
Pourquoi opposer Python et C++ ? Les 2 fonctionnent avec leur syntaxe similaire .
La Raspberry fonctionne avec tout les langages de programmation. Le Python est populaire, car accessible.
Le code est lisible à l’instar d’une recette de cuisine.
« on importe les éléments nécessaires »
« on réalise notre recette »
« on sert le résultat »
De plus l’interprétation du code n’impacte pas les performances du Pi.
Je n’ai pas essayé de compiler les sources d’OpenCV4. En tout cas la compil fonctionne avec OpenCV3.
Comme toute nouvelle version de logiciel, OpenCV4 débute. Nous travaillons sur le sujet 🙂
C’est pour cela que le tutoriel est basé sur OpenCV3 & Python3, avec pip. Le code est fonctionnel sur une version de Raspbian mise à jour.
Chez moi le script picamera.py n’ouvre pas la fenêtre vidéo. En quittant le script par Ctrl c je vois une erreur :
‘Incorect buffer length for résolution %d%d’ % (width, height)) picamera.exc.PiCameraValueError: Incorrect buffer length for résolution 800×600.
Avez vous une idée ?
Pour éviter les problèmes déjà évoqués j’ai renommé le fichier picamera.py en videotest.py. Il se lance bien mais n’ouvre rien et donne l’erreur ci-dessus.
Merci
Bonsoir, le fait de renommer un fichier, ne change rien au déroulement du programme. Vous avez une Picamera?
Oui j’ai une picamera. Elle fonctionne notamment avec l’utilitaire raspivid.
De plus j’ai cette erreur quand e lance la reconnaissance:
$ python3 reconnaissance_objets.py –prototxt MobileNetSSD_deploy.prototxt.txt –model MobileNetSSD_deploy.caffemodel
Traceback (most recent call last):
File « reconnaissance_objets.py », line 19, in
import pyautogui
File « /usr/local/lib/python3.5/dist-packages/pyautogui/__init__.py », line 115, in
from . import _pyautogui_x11 as platformModule
File « /usr/local/lib/python3.5/dist-packages/pyautogui/_pyautogui_x11.py », line 7, in
from Xlib.display import Display
ImportError: No module named ‘Xlib’
Salut, essayez d’installer les librairies Xlib pour Python3
$ sudo pip install python3_xlib
@++
La reconnaissance fonctionne . Néanmoins j’ai rajouté l’extension txt qui manquait au fichier MobileNetSSD_deploy.prototxt.txt après l’avoir téléchargé.
Curieusement le script de test de la picamera ne fonctionne toujours pas, mais peu importe puisque le script de reconnaissance lui fonctionne bien.
Merci
Bonne soirée
J’en profite, pourrait-on l’adapter à une caméra ip?
Je n’ai pas de caméra IP pour tester, mais on peut adapter la fonction (ligne 48) :
vs = VideoStream(usePiCamera=True, resolution=(1600, 1200)).start()
en
vs = VideoStream(« adresse_ip_de_la_caméra »).start()
@++
Je voudrais recevoir le flux vidéo d’un serveur de stream RTMP, une idée de la syntaxe ? As tu une expérience d’openCV sous ubuntu ? J’ai pas de raspberry de dispo sous la main. On trouve pas mal de tuto mais je sais pas trop par ou commencer.
Merci
Merci beaucoup !
Bonjour,
Avant tout merci la framboise pour ce que vous faites.
Sinon j’ai un souci quand je lance le script de test camera rien ne s’affiche.
J’ai corriger le nom du fichier la résolution car 800X600 ne lui plaisait pas. J’ai changé en 800×608 comme le message d’erreur me le conseillé.
J’ai installé la librairie python3_Xlib mais rien ne s’affiche.
maconfig : pi3 / cameraPI / os rapsbian neuf / vnc et ssh / pas d’écran de branché sur le pi.
Avez vous une idée ?
bonjour,
j’abandonne l’idée de faire fonctionner le test….
maintenant quand je lance la reconnaissance, j’ai le message suivant :
…chargement du modèle…
Traceback (most recent call last):
File « reconnaissance_objets.py », line 43, in
net = cv2.dnn.readNetFromCaffe(args[« prototxt »], args[« model »])
cv2.error: OpenCV(3.4.3) /home/pi/packaging/opencv-python/opencv/modules/dnn/src/caffe/caffe_io.cpp:1121: error: (-2:Unspecified error) FAILED: fs.is_open(). Can’t open « MobileNetSSD_deploy.prototxt.txt » in function ‘ReadProtoFromTextFile’
une idée d’une personne dévouée?
Bonjour,
je n’ai pas réussi avec le test mais la reconnaissance fonctionne.
J’ai commenté de la ligne 95 à 120 du fichier reconnaissance_objet.py pour l’envoie de mail.
et J’ai télécharge les deux fichiers utile avec la commande :
wget https://raw.githubusercontent.com/chuanqi305/MobileNet-SSD/master/voc/MobileNetSSD_deploy.prototxt
et
wget https://github.com/C-Aniruddh/realtime_object_recognition/blob/master/MobileNetSSD_deploy.caffemodel?raw=true
à mettre avec le fichier reconnaissance_objets.py
j’ai lancé la commande
python3 reconnaissance_objets.py –prototxt MobileNetSSD_deploy.prototxt –model MobileNetSSD_deploy.caffemodel?raw=true
En espérant que cela puisse vous aider.
Merci Ungrim.
Idem pour moi pour le test.
J’ai ensuite suivi tes conseils et la reco fonctionne.
En effet j’avance, merci beaucoup, mais je bloque légèrement plus loin.
…chargement du modèle…
…démarrage de la Picamera…
Traceback (most recent call last):
File « reconnaissance_objets.py », line 48, in
vs = VideoStream(usePiCamera=True, resolution=(1600, 1200)).start()
File « /usr/local/lib/python3.5/dist-packages/imutils/video/videostream.py », line 13, in __init__
from .pivideostream import PiVideoStream
File « /usr/local/lib/python3.5/dist-packages/imutils/video/pivideostream.py », line 2, in
from picamera.array import PiRGBArray
File « /usr/lib/python3.5/picamera.py », line 3, in
from picamera.array import PiRGBArray
ImportError: No module named ‘picamera.array’; ‘picamera’ is not a package
je n’en peu plus, la boucle se reboucle sur le fichier de test
J’ai l’impression que la librairie picamera.array n’est pas installé
relance les commandes suivante :
sudo pip install « picamera[array] »
sudo pip3 install python3_xlib
sudo pip3 install picamera
sudo apt-get install numpy
redémarre le pi au cas ou un process bloquerais l’utilisation de la camera.
Quelle config avez vous ? « camera, OS, ecran «
erreur sur la dernière commande :
c’est sudo apt-get install python3-numpy
merci pout votre retour.
j’ai retour disant que tout est installé.
j’utilise une cam pi avec raspbian et un écran, et j’utilise Kerberos.io.
j’ai oublié de dire. Le problème reste le même
Même problème qu’Alba (celui de 13H13)
Résolu par les conseils de Ungrim
Un grand merci à Stéphane pour cet excellent Tuto, très clair et très bien expliqué. Grâce à toi, c’est ma première tentative réussie en Deep Learning (même si tu as fait le plus dur…) càd l’apprentissage)
Vivement un second tuto pour l’apprentissage
Bonsoir,
je suis reparti avec un système vierge (Rasbian). J’ai suivi (me semble t-il) le tuto dans les règles et pas moyen de faire fonctionner le fichier de test.
je continu malgré tout.
j’ai suivi les conseil de Ungrim et malgré tout j’ai maintenant ce message d’erreur :
python3 reconnaissance_objets.py –prototxt MobileNetSSD_deploy.prototxt –model MobileNetSSD_deploy.caffemodel?raw=trueMobileNetSSD_deploy.caffemodel
…chargement du modèle…
Traceback (most recent call last):
File « reconnaissance_objets.py », line 43, in
net = cv2.dnn.readNetFromCaffe(args[« prototxt »], args[« model »])
cv2.error: OpenCV(3.4.3) /home/pi/packaging/opencv-python/opencv/modules/dnn/src/caffe/caffe_io.cpp:1121: error: (-2:Unspecified error) FAILED: fs.is_open(). Can’t open « MobileNetSSD_deploy.prototxt » in function ‘ReadProtoFromTextFile’
je commence à devenir fou…
Si quelqu’un a une idée je suis preneur.
Merci à tous
Bonjour,
J’ai finalement réussi en mettant tous les fichiers dans usr/lib/python3/dist-packages
Je ne comprends pas pourquoi mais bon…
Question, est-il possible de « streamer » facilement ce flux en rtsp pour être affichable en l’état avec VLC sur un autre PC?
Merci
Bonjour,
Est-il possible de faire envoyer le mail sur une condition en fonction des détections?
Merci
Bonjour,
Oui c’est possible en rajoutant une condition « if » avant les instructions d’envoi d’e-mail.
Il faut récupérer le « label » qui défini la prédiction, et l’affiche sur l’image.
Par exemple, si le résultat est une personne, on exécute les instructions d’envoi d’un mail, mais pas si c’est une voiture.
@++
Bonjour puis je avoir vos coordonées mail cordialement
Bonjour
Elles sont en bas de page
Bonsoir,
Après avoir passé quelques jours à étudier les réseaux neuronaux aux travers de la technologie Tensorflow, j’ai pu enfin créer mon propre modèle avec opencv 🙂
Il est préférable d’entraîner le modele avec un PC équipé d’un processeur graphique (GPU), car ce dernier est particulièrement spécialisé dans le traitement d’images. Sinon, le CPU fera l’affaire à condition d’être patient.
Si François est ok, je lui proposerais un tuto sur le sujet.
Avec plaisir bien entendu ?
Bonjour à tous,
Avec un Raspberry Modèle B+ et une picamera 2, j’ai suivi à la lettre l’installation.
Mais à l’exécution du fichier de test (renommé en test-video.py), pas d’ouverture de la fenêtre vidéo.
J’ai réinstallé la carte SD, re suivi à la lettre les instructions, mais toujours le même souci.
Y-a t’il quelqu’un qui a résolu ce problème ?
Merci d’avance pour vos réponses
Bonjour
Est il possible de faire de la reconnaissance d’objet sur une vidéo avec une raspberry sans qu’elle soit connectée à un ordinateur ? Je dois faire un système portable non connecté.
Merci
Bonjour,
J’ai eu cette erreur :
Traceback (most recent call last):
File « reconnaissance_objets.py », line 58, in
frame = imutils.resize(frame, width=800)
File « /usr/lib/python3.4/site-packages/imutils/convenience.py », line 69, in resize
(h, w) = image.shape[:2]
AttributeError: ‘tuple’ object has no attribute ‘shape’
Corrigé avec :
57 ret, frame = vs.read()
Pour le script de test de la picamera, il faut ajouter dans la boucle for une instruction pour afficher l’image:
cv2.imshow(« Frame », image)
Pour votre projet de recensement est-ce que vous utiliserez un Module détecteur de présence PIR ? ?
Bonjour Stéphane,
Comment peut on vous faire parvenir des photos ?
Merci,
Maxime
bonjour,
merci pour ce tuto franchement c’est top. !!
j’ai un petit soucis, au premier code python, quand je réalise le test je vois bien que la caméra fonctionne en revanche je n’ai pas de fenêtre qui s’ouvre pour visualiser ce que filme la cam.
j’ai cette erreur qui s’affiche, sauf que là j’attaque un domaine que je ne maîtrise absolument pas et j’ai du mal à déchiffrer ces erreurs :
Traceback (most recent call last):
File « picamtest2.py », line 18, in
for frame in camera.capture_continuous(rawCapture, format= »bgr », use_video_port=True):
File « /usr/lib/python3/dist-packages/picamera/camera.py », line 1702, in capture_continuous
if not encoder.wait(self.CAPTURE_TIMEOUT):
File « /usr/lib/python3/dist-packages/picamera/encoders.py », line 393, in wait
result = self.event.wait(timeout)
File « /usr/lib/python3.5/threading.py », line 549, in wait
signaled = self._cond.wait(timeout)
File « /usr/lib/python3.5/threading.py », line 297, in wait
gotit = waiter.acquire(True, timeout)
KeyboardInterrupt
voilà,
si quelqu’un à 5 min à perdre pour m’aider à comprendre ce qui ne va pas svp…
merci.
Bonjour,
Comme l’a indiqué Sébastien, il suffit de rajouter cette ligne :
cv2.imshow(“Frame”, image)
avant la ligne 24, ce qui donne :
# affichage du flux vidéo
cv2.imshow(“Frame”, image)
key = cv2.waitKey(1) & 0xFF
Et le tour est joué.
Thierry
Bonjour,
Comme l’a indiqué Sébastien un peu plus haut, il suffit d’insérer cette ligne :
cv2.imshow(“Frame”, image)
avant la ligne 24, ce qui donne :
# affichage du flux vidéo
cv2.imshow(“Frame”, image)
key = cv2.waitKey(1) & 0xFF
Et le tour est joué !
Thierry
salut thierry,
merci pour ta réponse rapide,
j’ai bien effectuer les modifications mais j’ai cette erreur qui s’affiche :
File « picamtest2.py », line 24
cv2.imshow(“Frame”, image)
^
IndentationError: unindent does not match any outer indentation level
du coup toujours perdu..lol..
passez de bonnes fêtes de fin d’année !!!
Bonjour,
Le problême d’indentation, vient du fait qu’il y a dans le code, une confusion entre l’emploi des espaces et de la tabulation.
En Python, il est préférable de rédiger son code avec « uniquement » la touche TAB pour séparer chaque instruction. Le code est plus cohérent et facilement « décrypté » par l’interpréteur.
N’hésitez pas à m’envoyer votre fichier picamtest2.py, par courriel.
stephane.kuentz@hotmail.com
@++
Merci pour ce tutoriel très sympa et simple qui m’a donné envie d’en savoir plus sur le deep learning. D’un point de vue pratique, le code proposé envoie des mails à courir si on le laisse tourner, ce qui fait « ramer » le raspberrypi et sature la boîte mail 😉 Je cherche donc à filtrer la détection ou l’envoi à des objets plus ciblés. Celà pourrait passer par un entraînement du réseau sur des sujets précis. Un bon champ d’investigation en perspective…
Salut stef-k,
Très bonne idée de tuto qui me donne envie de m’y mettre enfin (avant, la compil … Pfff).
Bon, le seul truc qui m’embête, comme tu peux t’en douter avec moi, c’est la relation avec Google 😉
Au plaisir,
ici ou ailleurs
Super le tuto.
OpenCV enfin installé sur mon RPI3B+ avec PIP.
Le test fonctionne parfaitement avec l’astuce de Sébastien, attention au ‘ au lieu des « .
Je veux utiliser Opencv pour faire de la reconnaissance de caractères pour lire mon compteur d’eau. Est ce que quelq’un a déjà fait?
Fréd.
Bonsoir,
Je me souviens avoir vu ça. Le principe utilisé était :
– capture de l’image
– découpe, une image pour chaque chiffre unitaire
– comparaison des images récupérées avec les images des chiffres compteur de 0 à 9 capturées préalablement.
Lien retrouvé 🙂
https://sebastien.warin.fr/2015/03/24/2478-senergy-la-solution-de-monitoring-des-ressources-energetiques-de-la-maison-geek-is-in-da-house-2015/#prettyPhoto
ah oui ! la lecture de son compteur d’eau. Sébastien est un passionné, j’ai déjà parlé de lui ici :
https://www.framboise314.fr/?s=warin
et en particulier cette vidéo que j’adore : https://youtu.be/sPl1WnNsCkU
Bonjour,
Oui, c’est à cause ou plutôt grâce à Sébastien WARIN que je me suis lancé dans ce projet.
Mais est ce que quelqu’un à mis en pratique?
Moi oui et je galère un peu sur le post-traitement des images avec opencv.
J’ai un méchant reflet générer par les LED utilisées pour éclairer les chiffres à lire.
Je ne sais plus combien d’essais j’ai fait. Tantôt avec les LED IR, des LED blanches (6) puis seulement 3 puis 3 +3 afin de générer des reflets à des endroits différent en espérant qu’un traitement d’image de type logique pourrait supprimer les reflets mais rien n’y fait.
Je séche complètement. Je ne sais pas comment mettre des images sur le blog pour me faire plus comprendre.
Merci pour vos propositons….
Fréd
Bonjkour,
J’ai besoin d’aide, suite à un plantage total… j’ai refait l’installation mais maintenant j’ai ce propblème, comme si la caméra était déjà utilisée :
python3 reconnaissance_objets.py –prototxt MobileNetSSD_deploy.prototxt.txt –model MobileNetSSD_deploy.caffemodel?raw=true
…chargement du modèle…
…démarrage de la Picamera…
mmal: mmal_vc_port_enable: failed to enable port vc.null_sink:in:0(OPQV): ENOSPC
mmal: mmal_port_enable: failed to enable connected port (vc.null_sink:in:0(OPQV))0x10742f0 (ENOSPC)
mmal: mmal_connection_enable: output port couldn’t be enabled
Traceback (most recent call last):
File « reconnaissance_objets.py », line 48, in
vs = VideoStream(usePiCamera=True, resolution=(1280,720)).start()
File « /usr/local/lib/python3.5/dist-packages/imutils/video/videostream.py », line 18, in __init__
framerate=framerate)
File « /usr/local/lib/python3.5/dist-packages/imutils/video/pivideostream.py », line 10, in __init__
self.camera = PiCamera()
File « /usr/lib/python3/dist-packages/picamera/camera.py », line 433, in __init__
self._init_preview()
File « /usr/lib/python3/dist-packages/picamera/camera.py », line 513, in _init_preview
self, self._camera.outputs[self.CAMERA_PREVIEW_PORT])
File « /usr/lib/python3/dist-packages/picamera/renderers.py », line 558, in __init__
self.renderer.inputs[0].connect(source).enable()
File « /usr/lib/python3/dist-packages/picamera/mmalobj.py », line 2212, in enable
prefix= »Failed to enable connection »)
File « /usr/lib/python3/dist-packages/picamera/exc.py », line 184, in mmal_check
raise PiCameraMMALError(status, prefix)
picamera.exc.PiCameraMMALError: Failed to enable connection: Out of resources
Merci d’avance
Bonjour,
Merci pour ce tuto je l’ai essayé et c’est assez sympa!
Cependant le fps est juste horrible, de l’ordre de 1 image toute les 2s.
Est-ce le cas chez vous? ceci est du a la puissance du raspberry?
Merci
pi@raspberrypi:~/Desktop/Raspberry/reconnaissance_objetswebcamusb $ sudo python3 reconnaissance_objets.py
usage: reconnaissance_objets.py [-h] -p PROTOTXT -m MODEL [-c CONFIDENCE]
reconnaissance_objets.py: error: the following arguments are required: -p/–prototxt, -m/–model
J’ai tout suivi à la lettre, si une personne aurait la solution à mon problème je lui serrais éternellement reconnaissant.
A essayer (il y a 2 tirets) :
python3 reconnaissance_objets.py –prototxt MobileNetSSD_deploy.prototxt.txt –model MobileNetSSD_deploy.caffemodel?raw=true
Bonjour j’ai le même problème que vous avez vous trouvé la solution ?
bonjour,
Même problème de mon côté….
Avez vous trouvé la solution ?
Merci !!!
Même problème .
Je n’ai pas trouvé de solution mais j’ai trouvé ce site très intéressant : http://www.ebenezertechs.com/mobilenet-ssd-using-opencv-3-4-1-deep-learning-module-python/
Test avec un Raspberry Zero :
…chargement du modèle…
…démarrage de la Picamera…
Instruction non permise
Bonjour,
As tu trouvé une solution ? car je suis dans le même cas que toi ?
Je pense que cela vient d’une lib qui n’est pas fait pour une RPI Z et qu’il faudrait recompiler mais pas sur.
J’ai le même problème. j’ai changé le rezize de 800 à 1600 et ca marche.
Je ne sais pas pourquoi ça marche. si quelqu’un à une idée ?
Bonjour à tous
J’ai un problème avec l’une des premières commandes :
$ sudo pip install opencv-contrib-python
Selon la console aucun distribution ne correspond à opencv-contrib-python.
J’ai essayé plusieurs fois, même après reboot du Raspberry et j’ai toujours la même erreur.
Est-ce que quelqu’un a déjà rencontré ce problème et quelle solution avez vous trouvé svp ?
Merci par avance !
Bonjour j’ai un problème quelqu’un a une solution ?
pi@raspberrypi:~/Desktop/reconnaissance_objets $ python3 reconnaissance_objets.py –prototxt MobileNetSSD_deploy.prototxt.txt –model MobileNetSSD_deploy.caffemodel?raw=true
usage: reconnaissance_objets.py [-h] -p PROTOTXT -m MODEL [-c CONFIDENCE]
reconnaissance_objets.py: error: the following arguments are required: -p/–prototxt, -m/–model
Alex
Ok problème apparemment résolu en passant par le site https://www.piwheels.org/ pour télécharger le package opencv-contrib-python.
Il suffit d’ajouter l’adresse https://www.piwheels.org/simple dans le fichier config de pip pour que pip télécharge automatiquement opencv-contrib-python depuis piwheels.
Cette solution évite de devoir compiler « à la main » pour ceux qui rencontreraient le même problème que moi.
bonjour,
j’ai le meme problème que vous avec l installation d’opencv,mais je ne sais pas comment ajouter l’adresse https://www.piwheels.org/simple dans le fichier config de pip .
merci.
Bonjour merci de votre réponse rapide mais mon fichier pip.conf contenais deja l’adresse donc j’ai toujours le meme probleme si vous avez une autre solution je suis preneur !
Alex
Bonjour,
j’aurais voulu savoir comment faire ses propres modèles avec des photos personnelles. Car ce que je veux identifier n’est pas disponible dans google image (trop particulier). Est-ce qu’il suffit de mettre ses photos dans un dossier images/mesphotos . De plus comment faire pour les intégrer dans le réseau afin qu’elles puissent être ‘entrainer’ ? Et pour finir, est-ce que la taille des photos a une importance pour la suite ?
Même si vous avez un lien qui traite ce sujet en n’importe quelle langue, j’ai mon ami google translate qui n’est jamais très loin.
Merci
Rudy
Bonjour,
J’ai le problème suivant à l’exécution :
python3 reco.py -p deploy.prototxt -m MobileNetSSD_deploy.caffemodel
…
File « reco.py », line 65, in
detections = net.forward()
cv2.error: OpenCV(3.4.4) /home/pi/packaging/opencv-python/opencv/modules/dnn/src/layers/batch_norm_layer.cpp:36: error: (-215:Assertion failed) blobs.size() >= 2 in function ‘BatchNormLayerImpl’
Quelqu’un a t’il rencontré le meme problème.
Bonjour tout le monde,
j’ai un problème quand ma vidéo est ouverte, j’ai des messages d’erreur en rouge « missing picture in access unit with size » ou alors « no frame! »
si quelqu’un à la solution je suis preneur, dejà plusieurs jours passés à chercher mais je ne trouve pas l’origine du problème.
PS: excellent tuto.
Maxime
bonsoir,
Je pense que vous avez un pb de débit. La caméra est en wifi.
Baissez la résolution et la qualité de l’image.
Bonjour,
Déjà merci d’avoir pris le temps de répondre.
Pour faire mes tests, je n’utilise pas le flux d’une camera mais une vidéo enregistrée au format AVI (vidéo d’une camera ip).
avez vous une autre idée?
Maxime
c’est la même chose, si vous faites traiter au RPI un nombre d’images trop important, une résolution trop grande, il n’y arrivera pas. Essayez avec un petite vidéo, et en plus en AVI, je pense qu’il y a un travail de décompression supérieur au h264 brut.
Bonjour,
effectivement avec une vidéo de moins bonne qualité et surtout un format différent le message d’erreur n’apparaît plus!
par contre je vais certainement avoir le même problème en lisant le flux de ma cam ip qu’en pensez vous?
quelle résolution préconisez vous?
Si vous prennez une video en 720P à 2 MBits/s ça devrait passer. si c’est du wifi attention!
Bonjour;
J ai trouvé un très grand plaisir pour lire ce document,moi j ‘ai une idée pour installer ca dans des lunetes,alors povez m’aider.
Cordialement
Bonjour,
j’ai essayé de faire fonctionner le streaming avec le même code ci-dessus, mais j’obtiens l’erreur suivante :
Traceback (most recent call last):
File « /home/pi/ReconnaissanceObjets/picamera.py », line 3, in
from picamera.array import PiRGBArray
File « /usr/lib/python3/dist-packages/thonny/backend.py », line 305, in _custom_import
module = self._original_import(*args, **kw)
File « /home/pi/ReconnaissanceObjets/picamera.py », line 3, in
from picamera.array import PiRGBArray
File « /usr/lib/python3/dist-packages/thonny/backend.py », line 305, in _custom_import
module = self._original_import(*args, **kw)
ImportError: No module named ‘picamera.array’; ‘picamera’ is not a package
Merci de m’aider !
Bonjour, comment télécharger le fichier : https://github.com/chuanqi305/MobileNet-SSD/blob/master/voc/MobileNetSSD_deploy.prototxt
Il n’y a pas de lien de téléchargement …
Bonjour,
vous pouvez télécharger le dossier complet MobileNet-SSD avec ce lien :
https://github.com/chuanqi305/MobileNet-SSD
Et ensuite le dezipper, et prendre le fichier voulu dans le dossier /voc/
Re-bonjour, j’ai également un problème, j’obtiens l’erreur suivante :
Traceback (most recent call last):
File « /home/pi/ReconnaissanceObjets/reconnaissance_objet.py », line 19, in
import pyautogui
File « /usr/lib/python3/dist-packages/thonny/backend.py », line 305, in _custom_import
module = self._original_import(*args, **kw)
File « /usr/local/lib/python3.5/dist-packages/pyautogui/__init__.py », line 152, in
from . import _pyautogui_x11 as platformModule
File « /usr/lib/python3/dist-packages/thonny/backend.py », line 305, in _custom_import
module = self._original_import(*args, **kw)
File « /usr/local/lib/python3.5/dist-packages/pyautogui/_pyautogui_x11.py », line 7, in
from Xlib.display import Display
File « /usr/lib/python3/dist-packages/thonny/backend.py », line 305, in _custom_import
module = self._original_import(*args, **kw)
ImportError: No module named ‘Xlib’
Bravo ! pour ce tuto.
Et ça marche , merci.
J’ai du préciser le chemin exact dans la commande de lancement.
Bonjour, il es t impossible d’installer opencv avec pip 19 help…
bonjour je n’arrive pas a installer opencv avec pip…
je ne sais pas comment mettre l’adresse help plz
j’ai ça comme erreur au lancement du programme python une idée ?
Traceback (most recent call last):
File « stream3.py », line 5, in
from imutils.video import VideoStream
ModuleNotFoundError: No module named ‘imutils’
J’ai bien isntalé imutils enfin je pense
Merci
Bonjour,
j’ai le message suivant quand je lance reconnaissance_objets.py :
–model MobileNetSSD_deploy.caffemodel
…chargement du modèle…
…démarrage de la Picamera…
Traceback (most recent call last):
File « reconnaissance_objets.py », line 64, in
detections = net.forward()
cv2.error: OpenCV(3.4.4) /home/pi/packaging/opencv-python/opencv/modules/dnn/src/dnn.cpp:580: error: (-215:Assertion failed) inputs.size() == requiredOutputs in function ‘getMemoryShapes’
Avez vous une idée de solution ? Je suis perdu. Merci pour votre aide 🙂
bonjour
j’ai un erreur pouvez vous m’aider
Traceback (most recent call last):
File « reconnaissance_objets.py », line 57, in
frame = imutils.resize(frame, width=720)
File « /usr/local/lib/python3.5/dist-packages/imutils/convenience.py », line 69, in resize
(h, w) = image.shape[:2]
AttributeError: ‘NoneType’ object has no attribute ‘shape’
merci beaucoup
Bonjour
j’ai une erreur lorsque j’execute cette ligne dans le terminal :
sudo pip install opencv-contrib-python
voici l’erreur:
ERROR: Could not find a version that satisfies the requirement opencv-contrib-python (from versions: none)
ERROR: No matching distribution found for opencv-contrib-python
merci d’avance
Bonjour, pour un projet je veux réaliser un test de lecture de panneaux de signalisation routiers.
Après de nombreux essais avec le script « reconnaissance_objets » la reconnaissance fonctionne mais le rafraîchissement est très lent !
Est-ce dû au raspi3+ ou à un paramètre ?
Merci d’avance pour toutes infos utiles.
Jiemde
Merci pour le tutoriel !
Est il possible d’informer le nombre d’images capture par seconde fps?
Merci
Bonjour,
Merci pour le tuto, mais je n’arrive pas a installer openCV 🙁
Lorsuqe je lance la commande : sudo pip install opencv-contrib-python
J’ai une erreur :
ERROR: THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS FILE. If you have updated the package versions, please update the hashes. Otherwise, examine the package contents carefully; someone may have tampered with them.
opencv-contrib-python from https://www.piwheels.org/simple/opencv-contrib-python/opencv_contrib_python-3.4.3.18-cp37-cp37m-linux_armv6l.whl#sha256=3095eaade88d84d93ae0d35878d877a73561e1192fbf99bde2f1d3c5daf4dda3:
Expected sha256 3095eaade88d84d93ae0d35878d877a73561e1192fbf99bde2f1d3c5daf4dda3
Got 52f330a942637ce7e52930f28b3c6591b90b901f30d0a3cc88a3491873813f65
Que dois-je faire ?
Bonjour
Après avoir acquis un RPi4 et installé buster et openCV4 (tuto sur pyimagesearch.net) je n’arrive toujours pas à lancer import cv2, et un message d’erreur s’affiche toujours (error module rgbpiarray) j’en déduit que open cv ne s’est pas bien installé ? Auriez vous des suggestions à me proposer ? D’avance merci !!
Bonjour,
Vous avez activé la pi camera avec $ sudo raspi-config ?
Ensuite il faut installer cette dépendance pour la faire fonctionner avec OpenCV :
$ sudo pip install « picamera[array] ».
Si vous êtes passé par pip install opencv-contrib-python, l’auteur précise que vous installerez la version 3.4. Pour la version 4, il va falloir compiler les sources, via la méthode décrite dans le blog.
@++
Bonjour, merci pour votre retour rapide ! J’ai installé la caméra dans les « préférences systèmes » (après avoir fait un reboot) et j’avais déjà installé $sudo pip install “picamera[array]. Tout est à jour ! Concernant l’installation de OpenCV, j’ai utilisé les 2 méthodes à savoir le téléchargement du package sur GitHub, ET avec pip. Le make -j4 s’est très bien déroulé (quoi qu’un peu long mais c’est normal) et après python3->import cv2 (il me met un message d’erreur !!) . Le message d’erreur module rgbpiarray doit provenir de là…. Bref je vais tenter de tout réinstaller et vérifier avec le sudo raspi-config si cela change qqc.
Hello,
merci pour toutes les infos publiées, claires et détaillées avec ce programme de reconnaissance d’objets . Les renseignements , en français, dans ce domaine sont plutôt rares.
Cela m’a largement aidé a tenter quelques programmes avec un Rasbberry 3 B .
Les images s’affichaient bien mais beaucoup plus lentement que sur un PC .
C’était tentant de voir si le Jetson nano ferait beaucoup mieux .
J’ai tenté un test toujours avec un programme de reconnaissance d’objets tiré de votre article.
Un peu déçu de mes résultats avec un débit de 1,3 fps pour jetson nano contre 0,4 fps sur le Raspi3B.
J’ai utilisé une simple fonction time de python (en faisant import time) pour évaluer les fps , est ce que ca donne des résultats éronnés ?
Quoiqu’il en soit je suis loin du compte pour avoir quelque chose d’utile pour aider a faire naviguer un petit robot.
Sauf erreur il aura avancé de prés d’un métre entre l’analyse de 2 frames. Bonjour les murs !
Il y a sans doute moyen d’accélerer un peu la boucle principale du programme mais je suis trop débutant pour voir comment.
Cordialement
Cats92
Bonjour, super tuto.
J’ai réussi à le faire tourner sur mon Pi4 en installant OpenCV4 en suivant ceci :
https://www.pyimagesearch.com/2016/04/18/install-guide-raspberry-pi-3-raspbian-jessie-opencv-3/
(en prenant soin de configurer pour Python3 et en remplaçant 3.1.0 par 4.2.0)
Prévoir 2/3 heures avec compilations.
ATTENTION, ne nommez pas votre programme picamera.py !!!!!
De mon coté, je cherche à savoir comment faire en sorte que le mail ne parte que lorsque qu’il passe quelque chose de nouveau face à la caméra, car avec ce test je peux recevoir un mail toutes les 30 secondes pour me montrer une bouteille d’eau posée devant la caméra, alors que plus rien ne bouge.
Quelqu’un aurait-il une idée ?
CDT
Bonjour,
Je suis tout nouveau sur Raspberry et pour un projet je dois reconnaitre des espèces d’oiseaux. Le fait est que j’ai déjà les vidéos qui ont été filmer auparavant, je voulais savoir comment faire et que changer au programme pour mettre mes vidéos au lieu de récupérer les vidéos de la PiCam car tous les tutoriels que je trouve sont à partir d’une PiCam donc je ne trouve pas ou insérer mes vidéos que j’ai déjà ?
Merci d’avance pour votre aide,
Cdlt
Bonjour,
Je viens vers vous car je suis bloquée. Je travaille avec une Raspberry pi 4. Apres avoir effectué le début de la partie « tests de bon fonctionnement » j’obtient l’erreur suivante :
Traceback (most recent call last):
File « /home/pi/essai_cameraPi/picamera.py », line 3, in
from picamera.array import PiRGBArray
File « /home/pi/essai_cameraPi/picamera.py », line 3, in
from picamera.array import PiRGBArray
ModuleNotFoundError: No module named ‘picamera.array’; ‘picamera’ is not a package
En attente d’une super réponse
Merci
Bonjour à tous,
j’ai suivi le tuto pour installer opencv, mais quand je test avec:
python3
import cv2
cv2.__version__
il ne trouve pas opencv
une idée?
je n’ai eu aucune erreur pendant l’installation.
Bonjour,
Petit retour après installation de OpenCV dans sa version 4 sous buster en utilisant PIP.
Pour ne pas avoir d’erreur lors de l’import cv2, le pip doit être :
$ sudo pip install opencv-contrib-python==4.1.0.25
Les versions postérieures ne fonctionnent pas.
Merci pour ce tuto et ce site, c’est un accélérateur de connaissance !
Ludovic
Bonsoir,
S’il vous plait j’ai une question a propos de controle d’accès sur reconnaissance faciale des prteurs de bavettes, alors est ce que je vais utilisés les bavettes comme base c’est à dire des objets à detectés ? si oui comment je peux inserer les bavettes dans la base n’oublions pas qu’on a pas un seul model de bavettes ils y on a plusieurs.
Hélas « I.A : Réalisez un système de reconnaissance d’objets avec Raspberry Pi » ne fonctionne pas chez moi
—————————————————————————————-
pi@raspberrypi:~ $ python3
Python 3.7.3 (default, Dec 20 2019, 18:57:59)
[GCC 8.3.0] on linux
Type « help », « copyright », « credits » or « license » for more information.
>>> import cv2
Traceback (most recent call last):
File « », line 1, in
File « /usr/local/lib/python3.7/dist-packages/cv2/__init__.py », line 3, in
from .cv2 import *
ImportError: libjasper.so.1: cannot open shared object file: No such file or directory
——————————————————————————————-
Après bien des recherches sans succès je me permets de vous solliciter.
Raspberry Pi4 – Raspbian Buster
Avec mes remerciements
Cordialement
Jean-Pierre Rochard
bonjour,
J’ai eu le meme problème que j’ai régler en suivant les instructions de ce site : https://www.youtube.com/watch?v=ylnjXbcNLJU
et en remplacant 4.1.0 par 4.3.0
j’espère que ca va t aider
Bonjour, je voudrais savoir quelles sont les coordonées maximum. (les coordonnées du coins en haut à droite)
Merci de vos réponses
John
Ca fonctionne parfaitement mais…. uniquement avec un ecran hdmi branché sur la raspberry 🙁
Pour réaliser une caméra de surveillance qui ne détecterait que les formes humaines je n’ai aucune utilité de l’écran et c’est même un problème dans la mesure où mon rasp refuse de démarrer sans l’écran. J’ai un message d’erreur me disant que l’écran est absent.
Comment faire pour faire tourner le programme python sans nécessité de brancher un écran ?
Merci d’avance !
Petite question subsidiaire: Existe t il un modèle tensorflow qui permet de détecter uniquement les formes humaines ? Cela accelèrerait il le nombre d’images analysées/affichées par seconde ?
(je suis à un peu plus de 2,5 FPS avec mon raspberry 4 8Go)
il ya un problème dans le fichier MobileNetSSD_deploy.caffemodel , il ne s’ouvre pas .
Salut quand j’exécute, j’ai ce problème
usage: reconnaissance_objets.py [-h] -p PROTOTXT -m MODEL [-c CONFIDENCE]
reconnaissance_objets.py: error: the following arguments are required: -p/–prototxt, -m/–model
Quelqu’un pourrait m’aider?
Svp qurlqu’un pourrait m’aider? Quand j’exécute le code, je me confronte à ce problème
usage: reconnaissance_objets.py [-h] -p PROTOTXT -m MODEL [-c CONFIDENCE]
reconnaissance_objets.py: error: the following arguments are required: -p/–prototxt, -m/–model
Dans le répertoire où sont stockés vos fichiers, ouvrez une console et entrez la commande ci dessous:
python3 reconnaissance_objets.py –prototxt MobileNetSSD_deploy.prototxt.txt –model MobileNetSSD_deploy.caffemodel
comment lire matricule voiture contenant chiffre francais et alphabet arabe en mete temps avec rasbperry pi3 .
Bonjour,
ma picaméra ne détecte pas les objets quand ils sont trop loin .
Y a t il des limites d’utilisation ( par rapport à la distance ) ?
Bonjour
quand vous dites « ne détecte pas les objets »
utilisez vous un programme qui détecte les changements d’image ? La caméra en elle même
ne « détecte » pas les objets, elle se contente de prendre des images
Si c’est du logiciel qui traite les images dont on parle
oui c’est possible car en général les logiciels travaillent sur le nombre de pixels
qui changent sur l’image pour indiquer la détection
Si l’objet est loin, il modifie peu de pixels et le programme ne le détecte pas…
Généralement il y a un réglage dans le logiciel mais si on descend trop pas on a des
faux positifs par exemple quand une branche d’arbre bouge…
Rebonjour ,
le logiciel détecte pas mal d’objets , mais quand ces derniers sont loin (au dela de deux métres environs ) il les détecte plus . Cela est du à quoi à votre avis ?
merci pour votre reponse
Bonjour,
merci pour votre article, c’est génial d’avoir ça a dispo sur internet!
j’ai implémenté cet algorithme sur mon Raspberry Pi 3B+ et avec l’aide de gens du forum j’ai réussi à le faire fonctionner. Ca marche vraiment bien, sauf que la vitesse de traitement obtenu est de 0,5 FPS environ. J’aimerais essayer de multiplier la vitesse par 4 au moins. Par contre je ne cherche pas a avoir une super résolution de l’image (400 de large c’est suffisant), et je n’ai besoin de reconnaitre que très peu d’objets, disons 5 au lieu des 21 proposés par la librairie MobileSSD. avez vous idée de quelle adaptation du programme je pourrais faire pour gagner en vitesse? sur quel élément jouer?
merci d’avance
Bonjour, je suis fan de votre projet
selon vous, comment pourrait-on l’adapter pour en faire un lecteur de plaque d’immatriculation avec enregistrement des plaques sur fichier CSV avec date et heure de passage?
cordialement
Bonjour
regardez du coté de openALPR https://fr.openalpr.com/
il y a pas mal de projets autour de cette solution
cdt
françois
Bonjour,
Merci de votre réponse
Malheureusement, tout est payant sur ce site…
De plus, lorsque je lance la commande donnée dans ce tuto, j’ai ce message d’erreur :
python3 reconnaissance_objets.py –prototxt MobileNetSSD_deploy.prototxt.txt –model MobileNetSSD_deploy.caffemodel
…chargement du modèle…
…démarrage de la camera…
[ WARN:0] global /tmp/pip-wheel-p4wkaqpf/opencv-python/opencv/modules/videoio/src/cap_v4l.cpp (893) open VIDEOIO(V4L2:/dev/video0): can’t open camera by index
Traceback (most recent call last):
File « reconnaissance_objets.py », line 57, in
frame = imutils.resize(frame, width=800)
File « /usr/local/lib/python3.5/dist-packages/imutils/convenience.py », line 69, in resize
(h, w) = image.shape[:2]
AttributeError: ‘NoneType’ object has no attribute ‘shape’
Comment le corriger ?
Merci de votre aide
Merci Stéphane pour cet excellent tuto.
En faite j’ai une solution à mettre en place qui concerne la détection d’anomalie dans une chaine de foule en utilisant opencv , le raspberry Pi et une camera webcam. je voulais des conseils ainsi qu’une orientation.
Merci cordialement.
Bonjour,
Peut-on incrémenter le nombre de detection ? je m’explique je souhaiterai coupler ce dispositif a une centrale domotique du type Jeedom.
Je souhaiterai par exemple incrementer le nombre de fois que je detecte une image defini comme une voiture.
ou trouver le dossier / fichier lorsque ce dispositif detecte quelque chose ?
Vous remerciant.
bonjour, je developper une application de liste de presence en python. il se peut que si une personne se presenter avec une photo. L’application va pointer presence. quel serai les pistes de solutions que vous pourriez me proposer pour palier à ce probleme pour traquer toute fraude.
Bonjour,
j’ai trouver la demonstration très interessante.
Par ailleurs je voudrais concevoir un dispositif de reconnaissance d’appareil mais pas du point de vue visuel mais du fait que ceux ci ait un tag propre a eux meme qui donne leur identité si l’on ne fait que passer a maximum 10cm avec le dispositif de reconnaissance.
Bonjour
un code barre collé sur ce que vous voulez identifier ?
dans ce cas un simple lecteur de code barre suffit
cdt
francois
Ping : Panorama video – cecos-soft
J’ai un souci à ce niveau:
pi@raspberrypi:~ $ sudo apt-get install libqtwebkit4 libqt4-test
Lecture des listes de paquets… Fait
Construction de l’arbre des dépendances… Fait
Lecture des informations d’état… Fait
E: Impossible de trouver le paquet libqtwebkit4
E: Impossible de trouver le paquet libqt4-test
Bonjour,
Je me suis accroché a deux de vos tuto sur le sujet. hélas sans succès car les instructions qui y sont généreusement fournies ne collent pas avec Raspbian Bookworm.
Le problème semblerait venir de l’obligation plus ou moins formelle de, désormais, tout cantonner dans des environnements virtuels .
Auriez vous la possibilité de faire une mise a jour ?
Bonjour
L’auteur de l’article est Stéphane
j’espère qu’il pourra proposer une mise à jour mais je n’ai pas d’infos
la sortie de Bookworm sur Raspi est relativement récente et tout n’est pas encore stabilisé
cdt
francois
OK François, merci
J’ai bien créé l’univers virtuel comme prescrit par la PiFoundation mais je n’arrive pas a y loger les dépendance recquises…alors que tout le reste est fonctionnel
Affaire a suivre…