Accueil du site > Linux > Webcam... sur le web, sous Linux

Webcam... sur le web, sous Linux

mardi 21 juin 2005, par Pierre-Luc Bacon

Tout l’intérêt de l’utilisation d’une webcam étant de diffuser facilement des images sur un réseau, nous verrons ici comment y parvenir facilement en quelques lignes de script. Bien évidemment pour certains, cet article servira à cet usage premier. Cependant, le roboticien en devenir pourra y découvrir ici une utilité pour son robot : voir ce que le robot "voit" à distance.

Voir en ligne : Téléchargement de w3cam

Avant de poursuivre la lecture de cet article, vous devrez vous assurer des points suivants :

 Avoir une caméra web compatible Linux [1]
 Télécharger le logiciel w3cam

w3cam est un utilitaire de capture d’images pour les dispositifs Video For Linux (V4L). Un programme CGI est d’ailleurs fourni dans le paquetage et permet d’effectuer sensiblement les mêmes opérations qu’ici décrites. Cependant, cette solution d’exécution de script CGI s’est avérée inutilisable pour moi pour certaines raisons. Le programme étant solicité à chaque action de l’utilisateur, les temps de réponse deviennent rapidement trop importants lorsque l’activité augmente sur la page. Aussi, il était indispensable dans l’implantation de la caméra que l’ordinateur où était elle était reliée ne soit pas directement consulté pour chaque requête des utilisateurs. Ainsi, il devenait nécessaire d’effectuer un transfère des images de cette machine jusqu’au serveur hébergeant la page concernée.

Pourquoi ne pas utiliser de programmes déjà conçus à cette fin me dira-t-on alors ? Eh bien, il se trouve que telle était d’abord mon intention. Je prévoyais en effet tirer avantage de webcam, inclus avec Xawtv. Cependant, comme le système où devait être liée la caméra n’intégrait pas le Serveur X, il devenait difficile d’exécuter ou de compiler l’application par l’absence de la librairie quelquechose, dépendant elle-même de la librairie machin - vous devez voir la situation. À cette constatation, j’en ai convenu qu’il vallait mieux de faire moi-même.

Les exigences (toujours un peu les mêmes) :

 Simple
 Efficace
 Transfère par ftp
 Inscription d’informations en texte sur l’image

L’intérêt à l’utilisation de w3cam réside non pas dans le script CGI mais bien dans un utilitaire appelé vidcat, développé pour ce projet. Ce dernier permet de capturer directement en ligne de commande l’image sous divers formats : jpeg, png, ppm etc.

Installation de w3cam

Cette opération ne devrait causer aucuns problèmes d’envergure. De manière classique, procédons ainsi :


$./configure --prefix=/usr
$make
$su
$mkdir /usr/cgi-bin
$make install
$cp /usr/cgi-bin/* /var/www/cgi-bin
$exit

Vous devrez bien sûr remplacez /var/www/cgi-bin par le répertoire déclaré auprès du serveur Apache pour les scripts CGI.

Votre caméra fonctionnelle et bien supportée sous Linux, vous pouvez procéder à une capture d’essai avec vidcat :


$vidcat -f png -o capture.png

Le Script

Simplement, les opérations qui devront s’exécuter à interval régulier se présentent comme suit :

  1. Saisir l’image en format PPM
  2. Créer une vignette de texte avec ppmmake et ppmlabel
  3. Fondre les deux images dans les bonnes positions
  4. Convertir l’image PPM en JPEG
  5. Tranfère au serveur par ftp
  6. Passe en sommeil avant de recommencer le processus

En bash, les étapes s’écrivent ainsi :


#!/bin/sh
HOST='bidon.com'
USER='w3cam'
PASSWD='bidon123'
FILE='radiocam.jpg'
FREQ='10'
while [ 1 ]
do

#Saisie et ajout de l'heure a l'image
vidcat -f ppm -o webcam.ppm
ppmmake 1.0,1.0,1.0 190 25 | ppmlabel -color 0.0,0.0,0.0 -text "`date +%k:%M:%S` `date +%D`" -y 10 -x 0 -size 4 > commentaire.ppm
pnmcomp commentaire.ppm webcam.ppm -align="right" -valign="bottom" -opacity="0.5"> radiocam.ppm
ppmtojpeg radiocam.ppm > radiocam.jpg

#Transfere du fichier
ftp -n $HOST 14 <<END_SCRIPT
quote USER $USER
quote PASS $PASSWD
put $FILE
quit
END_SCRIPT

sleep $FREQ
done

La taille de la vignette comprenant le texte d’information est déterminée par les derniers arguments à l’appel de ppmmake. Dans le présent exemple, le rectangle obtenu aura les dimensions 190x25 pixels. La date et l’heure sont ajoutés à cette zone dans le format h :m :s jj/mm/aa. Sa transparence est ajustable par le paramètre opacity : une valeur plus près de 0 signifiant une transparence plus importante.

Implantation sur le serveur web

La capture devant s’effectuer à interval régulier, il suffira d’effectuer un rafraîchissement automatique sur la page d’affichage de la caméra.

Pour que l’image se recharche d’elle-même au bon temps, nous pouvons utiliser l’indication meta suivante dans la section head du document html.


<meta http-equiv="refresh" content="10">

Résultat

La capture d’écran ci-dessous montre l’implantation effective du script dans une station de radio. Notez ici que l’image obtenue résulte du positionnement rapide (image mal cadrée) de la caméra et que la qualité de l’image dépendra bien sûr de facteurs externes au script.

Enregistrer au format PDF
Marquer cet article: Delicious Technorati

Répondre à cet articleRépondre à l'auteur:Pierre-Luc BaconRecommander à un ami