Club robotique de Sophia-Antipolis

Accueil > POBOTpedia > Ordinateurs embarqués (SBC) > La carte Raspberry PI > Projets complets avec la Raspberry Pi > Vision par webcam avec une Raspberry Pi

Vision par webcam avec une Raspberry Pi

vendredi 9 novembre 2012, par Julien H.

Un robot mobile autonome peut servir à explorer un endroit où on ne se trouve pas. Pour l’acquisition d’images comme pour la transmission à distance, des solutions à bas-coût sont possibles grâce à une simple webcam de chat (15€) et une carte Raspberry Pi (35€ + câbles et carte mémoire).

C’est la solution qu’a choisi Greg pour la mise à jour 1.1 de son robot Baba.

 Configuration requise

La manip’ présentée ici est effectuée avec une Raspberry Pi type B seconde version avec 256 Mo de mémoire vive.

La distribution GNU/Linux que nous avons choisie est une Occidentalis v1.1 basée sur Raspbian, elle-même basée sur Debian.

Ce n’est pas la première fois que nous utilisons une webcam sous Linux : en 2005, une webcam Philips Toucam II était utilisée avec les drivers video4l et le pilote optimisé grâce à un NDA [1] avec Philips qui a fait couler beaucoup d’encre.



 Bien débuter

Nous préférons procéder pas à pas plutôt que de donner une liste d’instructions à saisir. Vous trouverez pléthore de tutoriels prêt à l’emploi sur Internet. Généralement les plus simples sont ceux qui fonctionnent le moins :(

Ainsi nous avons retenu la solution mjpg-streamer plutôt que la plus fréquente ffserver. Non seulement les explications que nous avons trouvées étaient plus précises, en admettant des limitations et des difficultés d’installation.

Concernant les performances, la page officielle sur Sourceforge annonce une consommation de 10% seulement pour un CPU tournant à 200 MHz pour une vidéo de 960x720 pixels.

 Préparation

La première étape est de contrôler l’insertion de la webcam dans le port USB. En effet, pas la peine de perdre du temps à installer des logiciels si au bout de deux heures vous vous apercevez qu’il faut aller chercher une nouvelle caméra..

pi@raspberrypi ~ $ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp.
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
Bus 001 Device 004: ID 041e:406b Creative Technology, Ltd

C’est fait, nous voyons bien la Creative Technology. A noter que la webcam va ensuite créer des périphériques vidéos (et audio s’il y a un microphone), généralement sur /dev/videoX où X est un nombre à partir de 0.

Il est préférable d’allumer votre Raspberry Pi une fois que la webcam est branchée. Même si "lsusb" vous montre vos nouvelles webcams, la création des périphériques ne se fait pas à chaud ou "hot-plug" (avec les modèles que j’ai utilisé, ce n’est peut être pas une généralité).

Avant d’installer de nouveaux logiciels, il faut procéder à la mise à jour de la carte :

sudo apt-get update
sudo apt-get upgrade

Cette mise à jour peut prendre 160 Mo et durer plus de vingt minutes.

On va ensuite vérifier les capacités de la caméra. Si vous en avez plusieurs (on fait beaucoup de récupération au club Pobot), vous pourrez ainsi vérifier laquelle convient le mieux à vos besoins.

Pour ce faire, on utilisera les outils de Vidéo4Linux (v4l), que l’on doit installer :

pi@raspberrypi ~ $ apt-get install v4l-utils v4l-conf

Une fois fait, on peut lancer différents outils, dont v4l2-ctl et v4l-info :

pi@raspberrypi ~ $ v4l2-ctl --list-devices
Philips 730 webcam (usb-bcm2708_usb-1.2):
        /dev/video1
VF0530 Live! Cam Chat IM (usb-bcm2708_usb-1.3):
        /dev/video0
pi@raspberrypi ~/webcams $ v4l-info /dev/video1
### v4l2 device info [/dev/video1] ###
general info
    VIDIOC_QUERYCAP
        driver                  : "pwc"
        card                    : "Philips 730 webcam"
        bus_info                : "usb-bcm2708_usb-1.2"
        version                 : 3.2.27
        capabilities            : 0x5000001 [VIDEO_CAPTURE,READWRITE,STREAMING]
pi@raspberrypi ~ $ v4l-info /dev/video0
### v4l2 device info [/dev/video0] ###
general info
    VIDIOC_QUERYCAP
        driver                  : "uvcvideo"
        card                    : "VF0530 Live! Cam Chat IM"
        bus_info                : "usb-bcm2708_usb-1.3"
        version                 : 3.2.27
        capabilities            : 0x4000001 [VIDEO_CAPTURE,STREAMING]

On note au passage le bus "BCM2708" : on est bien sur la Raspberry Pi, car la puce SoC Broadcom BCM2708 est le support de la puce CPU Broadcom BCM2835 qui équipe la carte.

Bon, pour la Philips, qui a déjà près de 10 ans, on reconnait le driver "pwc" spécialiste à ce constructeur.

Oh oh, ça sonne par contre plutôt bien pour la Creative, puisque la driver est "uvcvideo", c’est l’un des plus récents et des plus complets pour Linux. la capture vidéo et le streaming sont des capacités reconnues de ce modèle.

Il faut encore déterminer le type de format vidéo supporté. L’idéal serait le MJPEG (motion JPEG) à ne pas confondre avec le Mpeg des DVD et des DivX.

C’est de nouveau v4l2-ctl et ses nombreuses options qui nous renseigne :

pi@raspberrypi ~/webcams $ v4l2-ctl -d /dev/video0 --list-formats
ioctl: VIDIOC_ENUM_FMT
        Index       : 0
        Type        : Video Capture
        Pixel Format: 'YUYV'
        Name        : YUV 4:2:2 (YUYV)
pi@raspberrypi ~/webcams $ v4l2-ctl -d /dev/video1 --list-formats
ioctl: VIDIOC_ENUM_FMT
        Index       : 0
        Type        : Video Capture
        Pixel Format: 'PWC2' (compressed)
        Name        : Raw Philips Webcam
        Index       : 1
        Type        : Video Capture
        Pixel Format: 'YU12'
        Name        : 4:2:0, planar, Y-Cb-Cr

Pas de MJPEG mais du YUYV sur la première et du PWC2 (Philips propriétaire) et du YU12.

On installe encore deux autres outils pour s’assurer de la qualité d’image :

- luvcview qui permet de regarder le flux vidéo (connectez-vous avec un serveur X si vous n’avez pas d’écran connecté à la Rpi).
- uvccapture qui permet de prendre une photo

Ils ne fonctionnent qu’avec les formats MJPEG, YUYV et UYV... donc la Philips n’a pas fonctionné !

 Installation

Si vous avez passé les étapes ci-dessus, vous pourrez y revenir si votre caméra ne fonctionne pas à la fin de l’installation suivante.

Tout d’abord on récupère les sources. Si vous êtes un développeur régulier sur Raspberry (ou que vous souhaitez le devenir) vous pouvez installer Subversion, le logiciel de partage de sources puis récupérer le logiciel mjpg-streamer (révision 167 à l’heure d’écrire ces lignes) :

pi@raspberrypi ~ $ sudo apt-get install subversion
pi@raspberrypi ~ $ mkdir webcams
pi@raspberrypi ~ $ cd webcams
pi@raspberrypi ~/webcams $ svn co https://mjpg-streamer.svn.sourceforge.net/svnroot/mjpg-streamer mjpg-streamer

On vous la fait courte : mjpg-streamer a des dépendances nécessaires pour la compilation. Wolf Paulus a bien expliqué toutes ces étapes dans cet article de manière claire, bravo et merci à lui !

pi@raspberrypi ~/webcams $ sudo apt-get install libjpeg8-dev
pi@raspberrypi ~/webcams $ sudo apt-get install imagemagick

En observant la liste de tous les paquets installés, on se rend compte de l’énorme travail effectué par la communauté pour porter chaque projet sur les derniers matériels et les dernières distributions (ici, armhf).

Une fois la minute d’émotion passée (et après avoir envoyé un don de soutien à une association méritante dans la culture informatique...), on peut reprendre le cours de l’installation :

pi@raspberrypi ~/webcams $ cd mjpg-streamer/mjpg-streamer
pi@raspberrypi ~/webcams/mjpg-streamer/mjpg-streamer $ make
...

Une fois la compilation terminée, on lance le programme en lui passant diverses options, sur l’entrée (input) ou la sortie (output). En entrée, il faut dire qu’on ne peut utiliser que 320x240 sur cette caméra (testé avec luvcview) et qu’il faut le format YUYV. En sortie, on peut indiquer un port spécifique pour la liaison Internet, et préciser un login/mot de passe.

./mjpg_streamer -i "./input_uvc.so -y -r 320x240" -o "./output_http.so -w ./www"

C’est très très faible, mais ça vient de la webcam.

Pour tester, on se connecte depuis un navigateur du même réseau ou sur Internet une fois qu’on a configuré son boîtier ADSL pour que le port - 8080 par défaut - aille sur l’IP de sa Raspberry Pi.

Par exemple : http://192.168.0.15:8080/stream.html ce qui donne :

PNG - 257.7 ko

Et bien sûr on peut facilement modifier le contenu de la page, ou bien appeler le flux vidéo depuis une autre page d’un autre site.


[1Non Disclosure Agreement : accord de non-divulgation publique

Vos commentaires

  • Le 23 septembre à 16:41, par gerald En réponse à : Vision par webcam avec une Raspberry Pi

    bonjour,
    je n arrive pas a aller plus loin
    pi@raspberrypi : $ /webcams $ cd mjpg-streamer/mjpg-streamer
    bash : /home/pi/webcams : est un dossier
    impossible de mettre la commande suivante
    pi@raspberrypi /webcams/mjpg-streamer/mjpg-streamer $ make
    quelqu un pourrait il maider SVP ; ; ; ; ;

    • Le 16 octobre à 15:56, par Eric P. En réponse à : Vision par webcam avec une Raspberry Pi

      Ca veut dire quoi exactement « impossible de mettre la commande suivante » ?
      Sans savoir ce qui se passe précisément lorsque vous essayez cette commande, impossible de vous aider.

    Répondre à ce message

  • Le 21 janvier à 10:36, par francois baret En réponse à : Vision par webcam avec une Raspberry Pi

    Vous dites :
    "ou bien appeler le flux vidéo depuis une autre page d’un autre site."
    Je voudrais faire exactement ça mais je n’y arrive pas ! Pouvez-vous me guider un peu plus ?
    Merci.

    Répondre à ce message

  • Le 15 août 2015 à 12:39, par postit En réponse à : Vision par webcam avec une Raspberry Pi

    le 15/08/2015
    En lieu et place de cette commande :
    svn co https://mjpg-streamer.svn.sourceforge.net/svnroot/mjpg-streamer mjpg-streamer
    il faut taper celle-ci :
    svn co https://svn.code.sf.net/p/mjpg-streamer/code mjpg-streamer

    Répondre à ce message

  • Le 4 mai 2015 à 11:20, par bil En réponse à : Vision par webcam avec une Raspberry Pi

    Bonjour
    Pour moi tout fonctionne nickel.J’aimerai créer un service qui se lancerait au démarrage du raspberry avec lequel je pourrais inter agir avec les commandes start restart ou stop.Etant nul en programmation(si si .ça fait quelque heures que je cherche mais sans succés).Alors si quelqu’un pouvait m’aider cela serait super.En espérant une réponse rapide,je vous souhaite a tous une bonne journée.

    Répondre à ce message

  • Le 4 février 2015 à 14:32, par Olivier En réponse à : Vision par webcam avec une Raspberry Pi

    Bonjour,
    mjpg-streamer est effectivement la solution la plus efficace pour capturer et transmettre les images d’une webcam ou du module caméra du Pi.
    Pour se faire une idée des différentes solutions qui existe, avec leur avantages et leur contraintes, voici un article comparatif qui décortique 5 manières de transmettre un flux d’images : http://www.magdiblog.fr/divers/raspberry-pi-camera-5-facons-de-faire-du-streaming/

    Répondre à ce message

  • Le 19 janvier 2014 à 17:48, par Takar En réponse à : Vision par webcam avec une Raspberry Pi

    Bonjour,
    J’ai suivi le tuto et j’ai un problème lors de l’essai avec cuvcview & uvccapture.
    La webcam est dispo :

    pi@raspberrypi ~ $ lsusb
    (...)
    {{Bus 001 Device 005: ID 0458:7077 KYE Systems Corp. (Mouse Systems)}}
    pi@raspberrypi ~ $ v4l2-ctl --list-devices
    FaceCam 315 (usb-bcm2708_usb-1.3):
            /dev/video0

    En revanche je n’obtiens qu’une image verte et quelques erreur dans le log quand je clic sur les boutons de paramétrages.
    Je ne peu quitter qu’avec un ctrl-c, et ensuite tant que je ne reboot pas, v4l semble être HS(même avec uvccapture

    pi@raspberrypi ~ $ luvcview
    luvcview 0.2.6

    SDL information:
     Video driver: x11
     A window manager is available
    Device information:
     Device path:  /dev/video0
    Stream settings:
     Frame format: MJPG
    Unable to set format: Input/output error
    Init v4L2 failed !! exit fatal

    pi@raspberrypi ~ $ uvccapture -v -otest.jpg
    Using videodevice: /dev/video0
    Saving images to: test.jpg
    Image size: 320x240
    Taking snapshot every 0 seconds
    Taking images using mmap
    Unable to set format: 5.
    Init v4L2 failed !! exit fatal

    Avant d’aller plus loin, j’ai refai la manip sur mon laptop (debian/jessie), et là le fonctionnement est correct.
    Je suis débutant et mon RPi est équipé de ladernière RaspBian. J’ai cru comprendre que vous préconnisiez l’utilisation d’une autre variante pour vos montage (occidentalis), peut être la différence vient elle des versions de v4l ?

    Merci d’avance !

    JPEG - 116.7 ko
    • Le 22 janvier 2014 à 09:26, par Julien H. En réponse à : Vision par webcam avec une Raspberry Pi

      A priori le pilote de la puce de la caméra peut être défaillant sur cette installation. Est-ce que le module bcm2708 est chargé lorsque la caméra est branchée ? (commande lsmod).

      Sinon à chercher sur les forums, car pour certaines webcams anciennes ou bas de gamme, les pilotes non-universels (UVC) peuvent être difficile à faire fonctionner.

      Bonne chance !

    • Le 24 janvier 2014 à 01:13, par Takar En réponse à : Vision par webcam avec une Raspberry Pi

      Le RPi n’était pas à moi, il a fallu que je le rende plus tôt que prévu et je n’ai pu pousser plus loin les investigations... Dommage, le mystère restera entier...

    Répondre à ce message

Un message, un commentaire ?

modération a priori

Attention, votre message n’apparaîtra qu’après avoir été relu et approuvé.

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici
  • Ce formulaire accepte les raccourcis SPIP [->url] {{gras}} {italique} <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document