Raspberry Pi : Connexion d’une Webcam

Hercule Dualpix HD

Dernière mise à jour : 10 août 2017

En attendant l’achat d’une caméra Raspberry Pi, je connecte la webcam du PC de la maison. Il s’agit d’une Hercules Dualpix HD (microphone incorporé, 30 fps (trames par seconde).

Je souhaiterais faire un timelapse. Je lis sur le Web que j’ai le choix entre fswebcam, motion et webcam pour prendre des photos à intervalles réguliers. Fswebcam est le plus simple ; motion le plus élaboré. Webcam se situe entre les deux.

Toutes les actions décrites ci-dessous se font à distance, au moyen de SSH et de XRDP. Seule la caméra est branchée sur un port USB du Pi.

Fswebcam

Je commence donc par fswebcam.  Je suis un tuto trouvé sur le site raspberrypi.org. Je commence par installer fswebcam (sudo apt-get install fswebcam).

Les photos capturées au moyen de la commande fswebcam -r 1280×720 image2.jpg sont toutes noires. Je trouve la solution à mon problème sur le Web : il convient de sauter les premières trames (paramètre -S) afin de laisser le temps à la caméra de se stabiliser. Les premières trames peuvent être corrompues.

La nouvelle commande, fswebcam -r 1280×720 -S 5 image2.jpg (saut de 5 trames avant acquisition de la 6-ème) me permet de voir quelque chose sur mes premières photos. Le problème, maintenant, c’est qu’elles sont surexposées.

J’ai pensé devoir apprendre à contrôler certains paramètres de la caméra : luminosité, contraste, saturation, gamma, exposition… La liste des paramètres, courants et modifiables, peut être obtenue au moyen de la commande fswebcam –list-controls. Le résultat est le suivant. Il s’agit des paramètres par défaut :

J’ai testé différentes valeurs de luminosité (brightness), de contraste et d’exposition, au moyen du paramètre –set. L’image s’améliore significativement en abaissant les valeurs de luminosité et d’exposition, mais elle reste de piètre qualité. Les modifications restent en mémoire (de la caméra, je suppose) tant que celle-ci reste connectée au Pi. Les paramètres sont ré-initialisés chaque fois que je débranche et rebranche la caméra.

Je réalise alors que la caméra peut se régler automatiquement (probablement en raison du paramètre Exposure, Auto Priority dont la valeur est True, par défaut), mais qu’il faut acquérir plus d’une trame pour ce faire. Un réglage à 30 (paramètre -F) semble satisfaisant. A noter que cela correspond à un temps d’exposition de 1 seconde.

Je crée le script camera.sh ci-après…

… et, après avoir créé le répertoire camera sous pi, je l’exécute au moyen d’un cron (* * * * * /home/pi/camera.sh 2>&1). Une photo, prise toutes les minutes, alimente de répertoire.

Après un peu plus de deux heures de capture (133 photos de 250 ko environ chacune), j’arrête le cron et je cherche à assembler les images. Comme d’habitude, je recherche un logiciel gratuit. Mencoder et ffmpeg ne peuvent plus être installées sous Raspbian.

Suivant les recommandations trouvées sur Raspberrypi.org, je teste imagemagick pour créer un Gif animé au moyen de la commande convert -delay 10 -loop 0 *.jpg animation.gif. Le fichier Gif pèse 32 Mo. Je le visualise sur mon PC après l’avoir importé : la liaison Wifi avec le Pi n’est pas assez rapide pour visualiser l’animation de manière fluide à travers XRDP. Le résultat est intéressant mais certaines images, surexposées, « flashent » dans la vidéo. C’est bizarre dans la mesure où la caméra devrait régler automatiquement l’exposition.

Je réessaie en forçant l’exposition à zéro.

Le résultat semble meilleur malgré quelques flashes probablement dus à des rayons de soleil à travers les arbres. Pour un premier essai, je ne suis pas trop mécontent.

J’importe finalement les photos sur mon PC et je les assemble au moyen de Picasa. Je paramètre 12 images par seconde. Le fichier, au format .wmv, ne pèse que 10 Mo.

Je souhaite maintenant afficher sur l’interface graphique du RPI ce que voit la Webcam. Il me faut tout d’abord installer Apache pour faire de mon Raspberry un serveur Web.

Une fois Apache2 installé, je crée le fichier webcam.html dans le répertoire /var/www/html/ . Celui-ci contient les lignes suivantes :

Je lance la commande sudo fswebcam -r 640×480 -S 5  /var/www/html/test.jpg -l 10 . Les images prises toutes les 10 secondes sont sauvegardées dans un fichier test.jpg . On peut les visualiser dans le navigateur du Raspberry à l’adresse http://127.0.0.1/webcam.html . Le résultat est très médiocre, en raison, notamment, de la faible capacité du Wifi.

Motion

J’essaierai plus tard Motion, peut-être avec une caméra dédiée au RPI. Il paraît beaucoup plus complexe que Fswebcam. mais permet de piloter une caméra dédiée au Raspberry (capteur de mouvement inclut).