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

Share Button

56 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
  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
    1. Denis Brion

      Pour info, selon https://www.pyimagesearch.com/2018/09/26/install-opencv-4-on-your-raspberry-pi/
      il n’y a pas de binaires disponibles pour ocv4 , RPi et python (alors que OCV3 a été spécialement precompilé pour le RPI…..).
      Il est possible, en suivant le mode d’emploi lié ci dessus, de compiler OCV4 -qui reste cependant instable, même s’il est optimisé: est ce que règler les problèmes liés à son caractère instable est compatible avec l’apprentissage nécessaire?). Ca nécessite;
      * d’agrandir le swap (multiplication par 10 sur RPi; infinie sur nanopi)
      * de patienter quelques heures, le temps qu’il compile….
      Nota: je cite ce site parce que, avec des adaptations mineures, j’ai pu avoir un ocv4 fonctionnant sur nanoPi… (n’a pas de swap : il faut en créer un sur disque “externe” …. et s’armer de patience); la compilation était plus rapide que pour OCV3 l’an dernier (plus modulaire?) . MAis, quitte à s’armer de patience, autant, au lieu de sauter sur la dernière version comme la vérole sur le bas clergé breton, attendre que OCV4 soit stable (et regarder des sites de tutoriaux dédiés à la reconnaissance d’image, comme pyimagesearch – resuscité- …. en python et learnopencv ( https://www.learnopencv.com/ ) …. permet de comparer du code en c++ et python

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

    Pour info, selon https://www.pyimagesearch.com/2018/09/26/install-opencv-4-on-your-raspberry-pi/
    il n’y a pas de binaires disponibles pour ocv4 , RPi et python (alors que OCV3 a été spécialement precompilé pour le RPI…..).
    Il est possible, en suivant le mode d’emploi lié ci dessus, de compiler OCV4 -qui reste cependant instable, même s’il est optimisé: est ce que règler les problèmes liés à son caractère instable est compatible avec l’apprentissage nécessaire?). Ca nécessite;
    * d’agrandir le swap (multiplication par 10 sur RPi; infinie sur nanopi)
    * de patienter quelques heures, le temps qu’il compile….
    * de ne pas faire de fausses manoeuvres ni de tâtonnements irraisonés avec le package manager (déjà, avec ocv3 précompilé, on a un festival… les commentaires de pyimagesearch lors d’installation sont aussi assez “édifiants”)
    Nota: je cite ce site parce que, avec des adaptations mineures, j’ai pu avoir un ocv4 fonctionnant sur nanoPi… (n’a pas de swap : il faut en créer un sur disque “externe” …. et s’armer de patience); la compilation était plus rapide que pour OCV3 l’an dernier (plus modulaire?) .
    Mais, quitte à s’armer de patience, autant, au lieu de sauter sur la dernière version comme la vérole sur le bas clergé breton, attendre que OCV4 soit stable (et regarder des sites de tutoriaux dédiés à la reconnaissance d’image, comme pyimagesearch – resuscité- …. en python et learnopencv ( https://www.learnopencv.com/ ) …. permet de comparer du code en c++ et python -et de constater que les codes C++ sont à peine plus longs que les codes python, rendant ridicule l’assertion qui traine sur le ouaibe que RPi est faite pour python…).

    Répondre
  15. 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
    1. Denis Brion

      “Pourquoi opposer python et c(++)?”:
      dans un monde ideal (temps disponible + cerveaux infinis), cette opposition serait absurde. Dans un monde contraint, force est de constater
      a) que la majorité des contrôleurs n’a pas micropython (qui bouffe toute la RAM dans certains cas). Les Arduini, leurs cousins ESP (et autres) ont du C++ simplifié.
      b) que , grâce à learnopencv (dont j’ai donné le lien), un bon code c++ (avec une bonne bibliothèque: OCV pour ne pas la nommer) est aussi facile à lire que du code python (pour votre info, j’utilise python + matplotlib + pyserial pour visualiser des sorties d’arduino).
      c) que des auteurs de tutoriels totalitaires (j’ai dû lire cette henaurmité dans …. framboisepi: la charité m’interdit de citer cette sottise) déclarent doctement que RPi se programme en python (avec un nanopi, je m’en moque un peu). On peut réagir devant tant d’ignorance en évitant dans la mesure du temps de cerf veau disponible, python.

      A noter que je n’ai jamais eu la bêtise de comparer les temps d’interprétation (python, en traitement d’image, appelle des routines optimisées en C(++) : le temps d’interpretation, même si l’interpréteur n’etait pas un semi compilateur, est négligeable.

      Pour revenir au traitement d’images :
      a) vous avez introduit OCV4 en commentaires: la compilation *** de la librairie et des ligatures python )sur un RPi (j’ai pu le reproduire sur un nanoPi, qui a plus de procs … pour autant de RAM) est faisable, lourde et nécessite des connaissances qui manquaient, tant à vos lecteurs (à la lecture de la majorité des commentaires….) qu’à ceux de pyimagesearch et learnopencv (alors qu’il suffit de comprendre et reproduire scrupuleusement les consignes….). Il semble plus optimisé que OCV3 et offrir davantage d’ouverture: le temps investi à la lecture de bons tutoriels de traitement d’image me semble plus profitable que le temps de tâtonnements et de pleurs sur l’étrange toile.
      b) A peu près tout le monde est d’accord pour dire que, plus on a d’images pour entraîner le programme, meilleures sont les performances en reconnaissance (temps réel ou phtoos/vidéos) sur de vraies-et nouvelles- images. Ceci pose un problème d’intendance avec le RPI (les images doivent peut être tenir en mémoire si l’apprentissage …., les processeurs doivent être des bêtes de course).
      JE suppose que le fichier ” MobileNetSSD_deploy.prototxt.txt” est un fichier préntraîné (sur un PC, une batterie de PCs ou?) mais je me demande s’il est possible de spécialiser des fichiers préentraînés (je parie que les renards, les chiens et les loups sont détectés / classifiés de la meme façon … si le préentraîneur a pensé aux canidés) par un reentraînement rapide https://www.learnopencv.com/keras-tutorial-fine-tuning-using-pre-trained-models/ ?

      Répondre
  16. 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
  17. 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
  18. 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
  19. 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
  20. 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
  21. 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
  22. 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
  23. 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
  24. 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
  25. 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
  26. 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
  27. 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
  28. 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
  29. 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

Laisser un commentaire

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

Complétez ce captcha SVP * Time limit is exhausted. Please reload CAPTCHA.

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