Publié le 27 novembre 2018 - par

I.A : Réalisez un système de reconnaissance d’objets avec Raspberry Pi

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.

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.

Installez pip avec ces 2 commandes,

ainsi qu’ OpenCV et le module Python de la PI caméra.

Installez ces dépendances.

Tests de bon fonctionnement

 
Ouvrez la console de Python avec cette commande :

Pour info, nous utiliserons uniquement des programmes exécutés avec la version 3 de Python. A moins d’optimiser la syntaxe du code, ils ne fonctionneront pas sur la version 2.
 
Pour vérifier qu’OpenCV est opérationnel, tapez cette commande :

Si vous n’avez pas de message d’erreur, OpenCV est bien installé 🙂
Vous pouvez connaître la version en entrant cette commande :

Résultat:
 
 
Pour sortir et « tuer » le processus de l’interpréteur Python, tapez Ctrl + d.
 
Avant de rentrer dans le « grand bain » de la vision artificielle, testons la Pi Caméra, avec un  programme Python, qui ouvre une fenêtre et une vidéo en direct.
 
Créez dans le répertoire de votre choix, un fichier picamera.py et écrivez le code suivant : 

Pour afficher la vidéo en streaming, tapez cette commande dans le terminal :

 
Le programme spécifie une résolution d’image de 800×600 pixels.
 
Vous pouvez modifier ce paramètre pour augmenter ou diminuer le nombre de pixels.
 
La Picamera version 2 est équipée d’un capteur Sony de 8MP. Elle offre une résolution maximale de 3280×2464.
Pour l’instant, le programme ne prend pas en charge cette définition d’image. Vous pouvez monter jusqu’à 3MP (2000×1504).
 

Le programme Python

Le code Python de détection et reconnaissance d’objets, se base sur un modèle d’entraînement déjà défini.
 
Pour ce cas de figure, MobileNet SSD a été entraîné pour reconnaître une liste de 21 objets tels qu’une bouteille, un chien, un chat, une personne… 
Bien sur, la liste d’objet n’est pas exhaustive. Vous pouvez créer votre propre modèle, pour reconnaître un type d’objet précis. Un tutoriel complet pourrait y être consacré.
 
Commencez par créer un répertoire, nommons le « reconnaissance_objets » afin de stocker les fichiers nécessaires :
             
  • 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 :

Pour information, vous pouvez utiliser une webcam USB à la place de la Picamera. Il suffit de modifier cette ligne de code (juste avant la boucle while) :    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é.

Sources

149 réflexions au sujet de « I.A : Réalisez un système de reconnaissance d’objets avec Raspberry Pi »

  1. Clemzo

    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.

    Répondre
  2. Alex

    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 ?

    Répondre
  3. Daniel

    « 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 !

    Répondre
  4. Stéphane KUENTZ Auteur de l’article

    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.
    @+

    Répondre
    1. Tremblay

      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

      Répondre
      1. léo chen

        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

        Répondre
  5. Landaisbenj

    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..

    Répondre
  6. Stéphane KUENTZ Auteur de l’article

    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.

    Répondre
  7. LINDENLAUB

    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 !

    Répondre
    1. Stéphane KUENTZ Auteur de l’article

      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

      Répondre
      1. Maxime

        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

        Répondre
          1. Lucas Dreher

            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

            Répondre
      2. LINDENLAUB

        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

        Répondre
  8. marc

    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

    Répondre
      1. Stéphane KUENTZ Auteur de l’article

        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

        Répondre
      2. AlexO

        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

        Répondre
  9. Emric

    ~/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

    Répondre
  10. Emric

    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

    Répondre
  11. Emric

    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 !!

    Répondre
  12. AlexO

    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.

    Répondre
  13. Stéphane KUENTZ Auteur de l’article

    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. 🙂

    Répondre
  14. Stéphane KUENTZ Auteur de l’article

    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.

    Répondre
  15. Pajrle

    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

    Répondre
    1. pajrle

      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’

      Répondre
        1. Pajrle

          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

          Répondre
  16. Stéphane KUENTZ Auteur de l’article

    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()
    @++

    Répondre
    1. François xavier

      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

      Répondre
  17. Ungrim

    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 ?

    Répondre
  18. alba

    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?

    Répondre
    1. Ungrim

      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.

      Répondre
  19. alba

    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

    Répondre
    1. Ungrim

      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 « 

      Répondre
        1. alba

          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.

          Répondre
  20. Olivier33

    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

    Répondre
  21. alba

    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

    Répondre
  22. alba

    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

    Répondre
  23. Stéphane KUENTZ Auteur de l’article

    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.

    @++

    Répondre
  24. Stéphane KUENTZ Auteur de l’article

    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.

    Répondre
  25. Thierry QUENET

    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

    Répondre
  26. Peronnau

    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

    Répondre
  27. galinette

    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()

    Répondre
  28. Sébastien

    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)

    Répondre
  29. niko

    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.

    Répondre
    1. QUENET

      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

      Répondre
  30. Thierry QUENET

    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

    Répondre
    1. niko

      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 !!!

      Répondre
  31. Stéphane KUENTZ Auteur de l’article

    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
    @++

    Répondre
  32. Arbras

    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…

    Répondre
  33. Nabla

    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

    Répondre
    1. Fréd59

      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.

      Répondre
      1. Hervé

        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.

        Répondre
  34. Fred59

    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

    Répondre
  35. alba

    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

    Répondre
  36. yoann

    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

    Répondre
  37. Nico

    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.

    Répondre
    1. alba

      A essayer (il y a 2 tirets) :

      python3 reconnaissance_objets.py –prototxt MobileNetSSD_deploy.prototxt.txt –model MobileNetSSD_deploy.caffemodel?raw=true

      Répondre
    1. Kentor

      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.

      Répondre
    2. arthur46

      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 ?

      Répondre
  38. Yann

    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 !

    Répondre
  39. Alex

    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

    Répondre
  40. Yann

    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.

    Répondre
  41. Alex

    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

    Répondre
  42. Rudboy1234

    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

    Répondre
  43. thierry

    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.

    Répondre
  44. Maxime 43

    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

    Répondre
      1. Maxime 43

        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

        Répondre
  45. alba

    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.

    Répondre
    1. Maxime 43

      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?

      Répondre
  46. Abdellatif

    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

    Répondre
  47. Mat0s

    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 !

    Répondre
  48. Mat0s

    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’

    Répondre
  49. Fxb

    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

    Répondre
  50. Seb

    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 🙂

    Répondre
  51. benjamin

    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

    Répondre
  52. gabriel

    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

    Répondre
  53. Jean-marie Defraine

    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

    Répondre
  54. Simplearetenir

    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 ?

    Répondre
  55. Stoff

    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 !!

    Répondre
    1. Stéphane KUENTZ Auteur de l’article

      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.
      @++

      Répondre
      1. stoff

        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.

        Répondre
  56. Cats92

    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

    Répondre
  57. DPI

    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

    Répondre
  58. Anthony

    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

    Répondre
  59. Flavie

    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

    Répondre
  60. max53950

    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.

    Répondre
  61. Ludovic

    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

    Répondre
  62. oumaima

    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.

    Répondre
  63. Rochard

    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

    Répondre
  64. Passepoil

    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)

    Répondre
  65. Prince

    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?

    Répondre
  66. Prince

    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

    Répondre
    1. Fleopaul

      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

      Répondre
  67. Djennadi, Liticia

    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 ) ?

    Répondre
    1. François MOCQ

      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…

      Répondre
      1. Djennadi, Liticia

        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

        Répondre
  68. jano31

    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

    Répondre
  69. Guinand kevin

    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

    Répondre
      1. Guinand Kévin

        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

        Répondre
  70. Moussa GUEYE

    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.

    Répondre
  71. PAch

    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.

    Répondre
  72. kilenda

    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.

    Répondre
  73. NZG

    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.

     

    Répondre
  74. Ping : Panorama video – cecos-soft

  75. Bryan

    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

    Répondre
  76. Gilles BILLARD

    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 ?

    Répondre
    1. François MOCQ

      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

      Répondre
      1. Gilles BILLARD

        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…

        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.