Association Bordelaise des Utilisateurs de Logiciels libres
"Piloter" une webcam
Si l’utilisation des webcams sous Linux est dorénavant assez simple, il demeure des cas ou il faut entrer davantage dans le système, soit parceque "ça ne fonctionne pas", soit parceque l’on souhaite maîtriser son système, par exemple pour développer une application intégrant des acquisitions d’image.
Si vous êtes dans cette démarche, ceci est un memo qui renvoit aux pages les plus utiles - Ce que j’aurais apprécié de trouver, en fait....
PRINCIPES de la chaîne de traitement : de la camera à l’écran.
Pour fonctionner, la webcam doit communiquer avec l’ordinateur au niveau matériel mais également au niveau logiciel.
Au niveau logiciel, le programme utilisant les images doit d’une part accéder aux données issues de la camera en utilisant un pilote correspondant et d’autre part les rendre utilisables au serveur graphique ( Xorg ). Cela est réalisé à travers une interface (API) linux spécialisée dans le traitement des flux video : v4l pour "video4linux " permet de gérer les flux video de toute origine ( TV, cartes video... ). v4l2 est son successeur.
La nature et la combinaison de ces différentes briques logicielles peut être problématique, car il est nécessaire de :
- disposer du driver adapté à la caméra ;
- disposer de l’interface video
- Lesquels doivent être compatibles...
Les webcams posent typiquement le problème des drivers propriétaires, avec les conséquences connues sous Linux. Apparemment, des matériels qui évoluent encore beaucoup, alors qu’aucun fabriquant ne consent à aider les développeurs de LL.
Exemples de pilotes ( non limitatif ) :
- PWC pour les cameras Philips (Concepteur Luc Saillard) Seulement pour v4l
- Gspca, Spca5xx ( Concepteur Michel Xhaard ) Seulement pour v4l pour l’instant
- UVCvideo ( Concepteur : BerliOs, pinchartl) Seulement pour v4l2
Attention : v4l ne semble plus maintenu. v4l et v4l2 reposent sur des librairies bien entendu nécessaires.
modules v4l ou v4l2
doivent faire partie du noyau, comme la commande suivante permet de le vérifier :
$ lsmod | grep v4l
v4l1_compat 15236 2 uvcvideo,videodev
v4l2_common 25216 2 uvcvideo,videodev
la troisième colonne indique les programmes utilisant ces modules.
EN PRATIQUE
Pour trouver le pilote adapté / trouver une webcam qui va fonctionner :
Si vous n’avez pas encore acheté votre webcam, vérifiez sur les sites cités ci-dessous ("documentation sur les pilotes") et les divers forums.
Une excellente adresse : http://www.linux-drivers.org/.
plus précisemment pour l’USB : http://www.qbik.ch/usb/devices/devi...
Pour trouver le pilote adapté à la webcam que vous possédez déjà :
Les webcam (USB ! ) Peuvent être identifiés à partir du "vendor id" et du "product id" par la commande :
$ lsusb
Bus 004 Device 003: ID 046d:08ce Logitech, Inc.
Bus 002 Device 004: ID 04b4:2050 Cypress Semiconductor Corp.
Bus 002 Device 006: ID 0458:004c KYE Systems Corp. (Mouse Systems) Slimstar Pro Keyboard
Bus 002 Device 005: ID 04b8:0802 Seiko Epson Corp. Stylus CX3200
Bus 002 Device 003: ID 046d:c040 Logitech, Inc.
Bus 002 Device 002: ID 0451:2046 Texas Instruments, Inc. TUSB2046 Hub
Par exemple :vendor Id = 046D identifie Logitech et product Id=08ce le modèle QuickCam PRO 5000. Le pilote de la webcam sera repéré par ces codes dans les tableaux figurant sur les différents sites des pilotes
Si tout va bien, les dernières lignes du fichier de log juste après le branchement de la webcam ressembleront à :
$ dmesg
[22146.048000] usb 4-4: new high speed USB device using ehci_hcd and address 8
[22146.312000] usb 4-4: configuration #1 chosen from 1 choice
[22146.696000] uvcvideo: Found UVC 1.00 device <unnamed> (046d:08ce)
[22146.740000] usbcore: registered new interface driver uvcvideo
[22146.740000] USB Video Class driver (v0.1.0)
Le système a reconnu la camera ( et ses codes d’identification ), et mieux encore, le pilote adapté : uvcvideo
ou bien :
[26738.288000] usb 2-2: new full speed USB device using uhci_hcd and address 13
[26738.492000] usb 2-2: configuration #1 chosen from 1 choice
[26738.492000] ubuntu/media/gspcav1/gspca_core.c: USB SPCA5XX camera found.(ZC3XX)
Dans ce cas, c’est une camera necessitant le driver SPCA5XX qui a été détectée.
Si vous ne rencontrez pas d’anomalie, il vous "suffit" alors de lancer le programme qui utilise la webcam, en s’assurant simplement qu’il est adapté à la caméra détectée.
MAIS...
Si cela ne fonctionne pas, voici une commande qui éclaire le sujet ( cas d’une Labtec notebook) :
$ v4l-info
### video4linux device info [/dev/video0] ###
general info
VIDIOCGCAP
name : "Labtec Webcam Notebook"
type : 0x1 [CAPTURE]
channels : 1
audios : 0
maxwidth : 640
maxheight : 480
minwidth : 176
minheight : 144
channels
VIDIOCGCHAN(0)
channel : 0
name : "ZC301-2"
tuners : 0
flags : 0x0 []
type : CAMERA
norm : 0
tuner
ioctl VIDIOCGTUNER: Invalid argument
audio
ioctl VIDIOCGAUDIO: Invalid argument
picture
VIDIOCGPICT
brightness : 32768
hue : 0
colour : 0
contrast : 32768
whiteness : 0
depth : 24
palette : RGB24
buffer
VIDIOCGFBUF
base : (nil)
height : 0
width : 0
depth : 0
bytesperline : 0
window
VIDIOCGWIN
x : 0
y : 0
width : 320
height : 240
chromakey : 0
flags : 0
Chaque paragraphe décrit une structure permettant de piloter la camera (ce sont des appels aux IOctl )
Dans le cas d’une webcam Logitech quickcam pro 5000, la même commande donnera un descripteur avec davantage de fonctions commençant par :
v4l2 device info [/dev/video0]
Voici également quelques programmes de test qui peuvent vous aider à localiser l’anomalie Ils ont des fonctionnalités simples et se lancent en console.
- gqcam (acquisition ) fonctionne avec v4l seulement ;
- dov4l (analyse périphs ) fonctionne avec v4l seulement ;
- spcagui pour les webcams avec pilotes SPCA5XX (et d’autres : non testé).
- luvcview pour les webcams avec pilotes UVCvideo
- vgrabbj (v4l seulement ? )
- xawtv (v4l seulement ? )
Ils disposent tous de pages de man.
l’examen des sources de spcagui et luvcview est parfait pour se dégourdir sur l’acquisition video !
BIBLIO
Documentation sur v4l, v4l2 :
- http://linuxtv.org/v4lwiki/index.ph...
- http://www.linuxtv.org/v4lwiki/inde...
- http://linuxtv.org/downloads/video4...
Documentations sur les pilotes :
- pwc :http://www.saillard.org/linux/pwc/
- UVC :http://linux-uvc.berlios.de/ et http://linux-uvc.berlios.de/#docume...
- gspca,spca5xx :http://mxhaard.free.fr/index.html
UNE LISTE RECAPITULATIVE ASSEZ COMPLETE : voir http://www.exploits.org/v4l/