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 :
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.
Vos commentaires
# Le 12 février 2018 à 09:35, par patric En réponse à : Vision par webcam avec une Raspberry Pi
J’ai un ecran gris quand je vais voir le retour sur l’internet
# Le 12 février 2018 à 23:41, par Eric P. En réponse à : Vision par webcam avec une Raspberry Pi
Bonsoir,
Il peut y avoir un tas de raisons à cela, et sans connaître plus précisément ce que vous avez fait avant, il est impossible de répondre.
Cordialement
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.
# Le 12 février 2018 à 23:39, par Eric P. En réponse à : Vision par webcam avec une Raspberry Pi
Bonsoir,
Désolé si cette réponse arrive fort longtemps après la question (le message avait échappé aux radars), mais elle pourra éventuellement servir à d’autres personnes.
La création de services démarrant automatiquement à l’init sort du cadre de cet article. Je vous suggère de consulter les documentations relatives aux scripts init.d, ou dans le cas de distributions récentes, de systemd (qui supplante l’init SysV utilisé jusqu’alors).
Cordialement
Répondre à ce message
# Le 20 décembre 2016 à 01:43, par Constant En réponse à : Vision par webcam avec une Raspberry Pi
Bonjour
Très bon tuto tout fonctionne bien.
J’aimerais savoir comment mettre cette commande( ./mjpg_streamer -i "./input_uvc.so -y -r 320x240" -o "./output_http.so -w ./www") au demarrage
Merci
# Le 18 mars 2017 à 13:58, par Eric P. En réponse à : Vision par webcam avec une Raspberry Pi
Ca veut dire quoi "comment mettre cette commande" ?
A tout hasard dès fois que ce soit cela la question : en ouvrant une fenêtre de terminal et en la tapant à la suite du prompt (pardon : de l’invite 🙂 )
Cordialement
Répondre à ce message
# Le 23 septembre 2016 à 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 2016 à 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 2016 à 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.
# Le 25 janvier 2016 à 21:16, par Julien H. En réponse à : Vision par webcam avec une Raspberry Pi
Bonjour,
Il s’agit de programmation web, je vous invite à vous rapprocher de forum dédié à la syntaxe des frames.
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 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 :
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
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 !
# 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