Xawtv webcam

De Lea Linux
Révision datée du 7 septembre 2005 à 12:11 par PingouinMigrateur (discussion | contributions) (conversion de la documentation originale de Léa par HTML::WikiConverter)
Aller à la navigation Aller à la recherche

Utilisation de 'webcam'

Utilisation de 'webcam'
Ahmed Rahal dit R-Daneel
Utilisation du programme 'webcam'

Présentation

Le programme que je vais vous présenter fait partie de xawtv.
Si vous n'utilisez pas xawtv, il faudra vous le procurer en package RPM ou, comme moi, le recompiler à partir des sources. Le site officiel de xawtv est http://bytesex.org/xawtv/ et contient une foule d'informations concernant ce produit.

Le programme en question s'appelle "webcam", tout simplement. Son intérêt est, comme vous l'avez sûrement deviné, de prendre des clichés avec votre webcam. Mon but ici n'est pas de vous guider pour l'installation d'une webcam, mais plutôt de vous faire découvrir ce petit outil extrêmement discret mais efficace.

Le but de 'webcam' est de prendre des clichés par la webcam et de les transférer sur un serveur web à partir duquel tout le monde pourra vous admirer :) L'intérêt de l'outil réside dans le fait qu'il automatise toutes les opérations en se basant sur un fichier de configuration. Le fichier doit se trouver dans votre répertoire d'accueil. Ce fichier s'appelle '.webcamrc':

Configuration

bash-2.05a$ ls -l .webcamrc
-rw-r--r-- 1 r-daneel users 622 mar 17 01:26 .webcamrc

voici l'aperçu de ce qui se trouve dans un fichier basique :

[grab]
device = /dev/video0
text = webcam - %d/%m/%Y %H:%M:%S
#infofile = filename
archive = webcam/capture_%Y-%m-%d_%H:%M:%S.jpg
fg_red = 255
fg_green = 255
fg_blue = 255
width = 320
height = 240
delay = 60
wait = 1
input = camera
norm = pal
rotate = 0
top = 0
left = 0
bottom = -1
right = -1
quality = 75
trigger = 0
once = 0

[ftp]
host = mon.serveur_web.com
user = utilisateur_site_web
pass = mon_mot_de_passe
dir = public_html/webcam
file = webcam.jpg
tmp = uploading.jpg
passive = 1
debug = 0
auto = 0
local = 0
ssh = 0

Tout d'abord, il y'a 2 sections bien distinctes dans ce fichier. D'abord [grab] pour les paramètres de capture, ensuite [ftp]pour les paramètres de transfert réseau vers votre serveur web (par ftp ou ssh).

Section [grab]

  • device : il s'agit du fichier spécial qui permettra d'accéder au périphérique de capture, sur mon PC, la carte TV occupe aussi un fichier spécial, ce qui fait que ma Quickcam USB se retrouve déportée en /dev/video1. Au pire, la commande xawtv -hwscan vous renseignera sur les périphériques pris en charge et à quels fichiers spéciaux ils sont assignés.
  • text : c'est un texte qui sera incrusté sur l'image capturée, dans l'exemple, c'est un petit texte (webcam) et la date puis l'heure. Les mots clé commençant pat % permettent d'obtenir les valeurs concernant la date & l'heure, ce sont les mêmes que pour la commande 'date'.
  • infofile : si une ligne de texte ne vous suffit pas, vous pouvez directement incorporer un texte extérieur dans la capture, cela peut avoir un intérêt si vous voulez incorporer un texte venant directement d'un fichier texte, nous verrons l'utilité de cette option plus tard.
  • archive : ici, on peut indiquer un répertoire local, dans lequel le programme va déposer les clichés générés. Comme dans le champ text, on peut créer un nom de fichier variable, en fonction de la date et l'heure. On peut indiquer un sous-répertoire également.
  • fg_red, fg_blue, fg_green : ce sont les valeurs des 3 composantes de couleur pour l'écriture du texte. nota bene : le fond du texte est "transparent" par défaut. Ce comportement est modifiable à travers 3 autres valeurs que l'on pourrait ajouter au fichier de configuration : bg_red, bg_blue et bg_green. Personellement, je trouve le transparent bien, mais en fonction de l'image, il se peut que le texte devienne illisible (blanc sur blanc) et qu'il faille systématiquement avoir un fond contrasté sous le texte.
  • width et height : largeur et hauteur (respectivement) de l'image à capturer. Cela va déterminer la résolution de l'image générée, et donc son poids (quantité de données) que l'on va transférer au serveur web à la fin. 320 par 240 sont des valeurs moyennes pour y voir assez et qui sont généralement bien supportées par les webcams courantes. A vous d'adapter ces valeurs si vous êtes en possession d'une webcam plus évoluée ;)
  • delay : très important, le programme webcam, une fois lancé, ne quitte pas au premier cliché pris. Il continue à prendre des clichés tant qu'il n'est pas interrompu (par un CTRL+C de l'utilisateur par exemple). Ce paramètre indique à quelle intervalle un cliché doit être pris (par extension, l'intervalle de transfert d'un nouveau cliché vers le serveur web).
  • wait : extension du paramètre précédent, il indique combien de temps il faut attendre avant de réellement prendre le cliché. Ceci est une valeur qui permet de mieux "régler" le temps d'exposition. Parfois les webcams ont besoin d'un léger temps d'adaptation à la luminosoté pour donner le meilleur rendu possible, je l'ai mis à 1 seconde, et ça marche plutot bien. En pratique, si delay est à 10 et wait à 2, un cliché va être pris tous les 10 secondes, avec un décalage de 2 sec (1er cliché à 2 sec, 2ème cliché à 12 sec, ...).
  • input : un peu plus étrange, ce paramètre permet de sélectionner la source d'entrée. En plus du fichier spécial dans /dev, le périphérique peut gérer plusieurs "sources". Un exemple précis viendrait d'une carte TV, il y'a la source "tuner" pour le tuner de canaux et la source "composite" pour l'entrée composite (j'ai ça sur la mienne de carte, en effet). Pour une webcam, l'entrée "camera" sera largement suffisante.
  • norm : c'est la norme de capture, PAL ou SECAM par exemple. Ma webcam fonctionne en PAL, en SECAM j'ai une bande colorée en bas de l'image. Ceci est dû la différence de définition du format d'image dans ces 2 normes.
  • rotate : 1, 2 ou 3 permet de faire une rotation de 1, 2 ou 3 fois 90° de l'image. la rotation se fait dans le sens inverse des aiguilles d'une montre.
  • top, left, bottom, right : sont les paramètres permettant de découper l'image résultante. 'top=0' et 'left=0' veutdire qu'on s'aligne en haut à gauche. La documentation est très peu bavarde là dessus, mais les valeur -1 pour 'bottom' et 'right' doivent surement signifier "automatique" puisque le nombre de lignes et colonnes de l'image a été défini plus haut.
  • quality : l'image résultat est au format jpeg. Ce format à compression avec perte permet un choix au niveau de la qulité du rendu final de l'image. C'est une valeur entre 0 et 100 (un pourcentage quoi), qui permet de réduire la qualité (en allant vers 0) pour gagner en taux de compression.
  • trigger : Ce paramètre permet de déclencher la webcam en fonction d'un changement de l'image. La valeur positive indiquée donne le seuil de sensibilité à atteindre.
  • once : sert à indiquer au programme que nous ne voulons prendre qu'un cliché puis quitter la capture. Cela sert beaucoup lors de tests.

Section [ftp]

  • host : L'adresse IP ou le nom du serveur distant à contacter pour le dépot des fichiers
  • user : hmmm, nom de l'utilisateur sur le serveur (limpide, non ?)
  • pass : le mot de passe de l'utilisateur. ATTENTION, ce fichier contiendra en clair le mot de passe de votre compte sur le serveur. Toute compromission de ovtre compte donnera accès au compte que vous possédez sur le serveur distant.
  • dir : réperoire de dépot pour l'image, sur le serveur distant cette fois-ci. Ce chemin peut être relatif au répertoire d'accueil distant.
  • file : nom du fichier qu'aura votre clicé une fois téléchargé sur le serveur distant.
  • tmp : nom du fichier temporaire. Ceci mérite une petite explication. Quand le fichier est transféré sur le serveur distant, le temps de l'opération n'est pas prédictible. C'est à dire que l'on ne peut savoir combien de temps s'écoulera entre le moment où vous commencez à transférer le fichier et le moment où il sera complètement transféré. Ce temps vous parait peut-être court, mais pour un serveur web, cela peut être le tempsd'avoir répondu à 20 requêtes (vous êtes beau, et les gens vous adorent, rêvons un peu ...) et pendant ce laps de temps, le cliché ne sera pas entièrement sur le site. Pour contourner ce petit problème, nous (les admins futés que nous sommes) avons inventé une parade. Notre fichier destination s'appelle image1.jpg, nous ne voulons pas perturber l'image pendant le transfert, alors nous transférons notre cliché sous un autre nom, par exemple image_tmp.jpg. Quand le transfert est fini, nous émettons une commande de renommage. Cette opération qui va écraser notre fichier image1.jpg peut, certes, perturber la disponibilité de l'image, cependant elle ne dure que quelques millisecondes quelque soit le cas. Voilà pourquoi on vous demande un nom temporaire pour l'image (aussi bien en local que sur le serveur distant).
  • passive : ceci est un détail lié au fonctionnement du protocole FTP. La communication peut être active ou passive, si vous n'avez pas idée de ce que ça peut faire, laissez la à '1' et ne modifiez-la que si vous rencontrez des problèmes de téléchargement.
  • debug : Mettre cette valeur à '1' permet d'avoir une trace exacte des communications entre le serveur FTP et votre machine. Ne l'utiliser qu'à des fins de dépannage.
  • auto : Si vous possédez un fichier .netrc dans votre répertoire d'accueil (cas fort improbable) alors mettez la valeur '1', cela permet de se passer des informations 'user' et 'pass' vus plus haut. Ne tenez pas compte de ce paramètre, dans la grande majorité des cas elle devra rester à '0'
  • local : désactive le transfert et stocke le fichier localement, aux endroits spécifiés par 'dir', 'file' et 'tmp'.
  • ssh : si vous êtes plus à l'aise avec ssh et que l'authentification est automatisée par clé, vous pouvez utiliser ce moyen bien plus sur (communication cryptée) pour déposer votre fichier. Veuillez vous reporter à la documentation du client ssh avant toute tentative ;)

Voila, il reste un petit détail : on peut avoir plusieurs sections (ne s'appelant pas [ftp] mais qui doivent être du même type : avoir les mêmes paramètres) pour déposer le cliché sur plusieurs serveurs simultanément. Si votre fan club a atteint de telles proportions que vous devez déposer vos photos dans plusieurs serveurs, vous saurez apprécier encore plus ce petit programme ;)

Fonctionnalité Serveur

Ce programme porte mal son nom, il devrait s'appeler 'webcamd', car il a pour vocation d'être un serveur. Une fois lancé il reste actif et prend des clichés à intervalles régulières (a moins d'avoir mis le paramètre 'once' à '1'). J'ai donc écrit un petit script qui permet de le lancer à l'image d'un service :

#!/bin/sh
# chkconfig: 235 99 10
# description: Start or stop the webcam daemon
#
### BEGIN INIT INFO
# Provides: webcamd
# Default-Start: 2 3 5
# Default-Stop: 0 1 6
# Description: Start or stop the webcam daemon
### END INIT INFO

Program="/usr/bin/webcam"
Config="/etc/webcam.conf"
case "$1" in
'start')
if [ ! -f ${Config} ]; then
echo "ERROR: '${Config}' file missing."
exit 1
fi
nohup ${Program} ${Config} > /dev/null 2>&1 &
 ;;
'stop')
procs=`ps -ef | grep -v grep | grep -c ${Program}`
if [ ${procs} -lt 1 ]; then
echo "WARNING: daemon (${Program}) not running."
exit 1
fi
/bin/killall ${Program}
 ;;
'restart')
${0} stop
${0} start
 ;;
*)
echo "usage $0 start|stop|restart"
esac

Si vous avez une distribution intelligente (RedHat, Mandrake, etc...) copiez le script ci dessus dans un fichier 'webcamd' puis (connecté en tant que root) :

# cp webcamd /etc/rc.d/init.d
# chmod 755 /etc/rc.d/init.d/webcamd

ensuite

# chkconfig --add webcamd

Si comme moi vous avez une slackware-faut-tout-faire-à-la-main copiez le script dans un fichier 'webcamd' puis (toujours en root) :

# cp webcamd /etc/rc.d/rc.webcam
# chmod 755 /etc/rc.d/rc.webcam
# echo "/etc/rc.d/rc.webcam start" >> /etc/rc.d/rc.local

Maintenant, il vous reste à écrire le fichier de configuration dans /etc/webcam.conf (toujours en root) :

[grab]
device = /dev/video0
text = webcam - %d/%m/%Y %H:%M:%S
#infofile = filename
#archive = /tmp/webcam/capture_%M.jpg
fg_red = 255
fg_green = 255
fg_blue = 255
width = 320
height = 240
delay = 60
wait = 1
input = camera
norm = pal
rotate = 0
top = 0
left = 0
bottom = -1
right = -1
quality = 75
trigger = 0
once = 0

[ftp]
host = mon.serveur_web.com
user = utilisateur_site_web
pass = mon_mot_de_passe
dir = public_html/webcam
file = webcam.jpg
tmp = uploading.jpg
passive = 1
debug = 0
auto = 0
local = 0
ssh = 0

enfin

chmod 755 /etc/webcam.conf

Conclusion

Voilà pour un début, le tout me semble finalement un peu long, mais terriblement limpide, non ?

Il reste quelques paramètres non abordés ici. ils concernent principalement des paramètres de distorsion de la lentille de la webcam et des paramètres d'ajustement de l'image. Ils sont documentés dans la page man du programme (man webcam) mais mes conaissances limitées en optique ne me permettent pas d'expliciter leur manipulation. Je vous laisse le soin d'ajouter par coups d'essai ces paramètres. Je suis, moi, parfaitement satisfait du résultat obtenu, mais je suis peut-être un peu moins exigeant que certains ;)

Alors maintenant, faites un grand sourire à votre webcam :D


Cette page est issue de la documentation 'pré-wiki' de Léa a été convertie avec HTML::WikiConverter. Elle fut créée par Ahmed Rahal le 11/10/2003.

Copyright

Copyright © 11/10/2003, Ahmed Rahal

Creative Commons License
Creative Commons Attribution iconCreative Commons Share Alike iconCreative Commons Noncommercial
Ce document est publié sous licence Creative Commons
Attribution, Partage à l'identique, Contexte non commercial 2.0 :
http://creativecommons.org/licenses/by-nc-sa/2.0/fr/