Webcam sphere

De system.co.free.fr.

retour vers linux

Sommaire

WebCam logitech Web-Sphere (QuickCam Orbit) motorisée et autres WebCam UVC sous linux

La QuickCam Orbit est reconnu comme un périphérique UVC.
UVC: USB Video Class en anglais
http://fr.wikipedia.org/wiki/USB_video_device_class
Linux n'est pas le seul concerné par cette norme. Solaris, Mac OS X, ... et Windows le sont aussi.

installer: uvcdynctrl du dépôt universe

Pour l'installer:

 apt-get install uvcdynctrl

cela peux nécessiter l'installation de paquets supplémentaires. Si c'est le cas, apt-get vous proposera de les installer:

libwebcam0 uvcdynctrl-data


débranché la Web-Sphere usb et rebranché la.
De façon générale, en cas de dysfonctionnement, n'hesitez pas a la débrancher et la rebrancher avant de pousser trop loin vos investigations. (il existe une autre solution par ligne de commande pour réinitialiser les périphériques usb avec les outils udev, mais je ne l'ai plus en mémoire.)

uvcdynctrl: Utilisation

Cet outil, en ligne de commande est a utiliser en parallèle de votre logiciel favoris de visionnement de webcam UVC.

Pour lister les périphériques accessibles par la commande uvcdynctrl

 uvcdynctrl -l
 Listing available devices:
   video0   UVC Camera (046d:0994)
     Media controller device /dev/media1 doesn't exist
 ERROR: Unable to list device entities: Invalid device or device cannot be opened. (Code: 5)


Pour lister les contrôles possibles du périphérique (par défaut /dev/video0 )

 uvcdynctrl -c
 Listing available controls for device /dev/video0:
   Brightness
   Contrast
   Saturation
   White Balance Temperature, Auto
   Gain
   Power Line Frequency
   White Balance Temperature
   Sharpness
   Backlight Compensation
   Exposure, Auto
   Exposure (Absolute)
   Exposure, Auto Priority
   Pan (relative)
   Tilt (relative)
   Pan Reset
   Tilt Reset
   Focus
   LED1 Mode
   LED1 Frequency
   Disable video processing
   Raw bits per pixel


Pour avoir le detail des parametres pour chaque option ( par defaut /dev/video0, si defferent ajouter l'option -d /dev/video9 ou autres )

 uvcdynctrl -c -v
 Listing available controls for device /dev/video0:
 Brightness
   ID      : 0x00000001,
   Type    : Dword,
   Flags   : { CAN_READ, CAN_WRITE },
   Values  : [ 0 .. 255, step size: 1 ],
   Default : 128
 Contrast
   ID      : 0x00000002,
   Type    : Dword,
   Flags   : { CAN_READ, CAN_WRITE },
   Values  : [ 0 .. 255, step size: 1 ],
   Default : 32
 Saturation
   ID      : 0x00000004,
   Type    : Dword,
   Flags   : { CAN_READ, CAN_WRITE },
   Values  : [ 0 .. 255, step size: 1 ],
   Default : 32
 White Balance Temperature, Auto
   ID      : 0x00000009,
   Type    : Boolean,
   Flags   : { CAN_READ, CAN_WRITE },
   Values  : [ 0 .. 1, step size: 1 ],
   Default : 1
 Gain
   ID      : 0x00000003,
   Type    : Dword,
   Flags   : { CAN_READ, CAN_WRITE },
   Values  : [ 0 .. 255, step size: 1 ],
   Default : 0
 Power Line Frequency
   ID      : 0x0000000d,
   Type    : Choice,
   Flags   : { CAN_READ, CAN_WRITE },
   Values  : { 'Disabled'[0], '50 Hz'[1], '60 Hz'[2] },
   Default : 2
 White Balance Temperature
   ID      : 0x00000008,
   Type    : Dword,
   Flags   : { CAN_READ, CAN_WRITE },
   Values  : [ 0 .. 10000, step size: 10 ],
   Default : 4000
 Sharpness
   ID      : 0x00000007,
   Type    : Dword,
   Flags   : { CAN_READ, CAN_WRITE },
   Values  : [ 0 .. 255, step size: 1 ],
   Default : 224
 Backlight Compensation
   ID      : 0x0000000c,
   Type    : Dword,
   Flags   : { CAN_READ, CAN_WRITE },
   Values  : [ 0 .. 2, step size: 1 ],
   Default : 1
 Exposure, Auto
   ID      : 0x0000000f,
   Type    : Choice,
   Flags   : { CAN_READ, CAN_WRITE },
   Values  : { 'Manual Mode'[1], 'Aperture Priority Mode'[3] },
   Default : 3
 Exposure (Absolute)
   ID      : 0x00000011,
   Type    : Dword,
   Flags   : { CAN_READ, CAN_WRITE },
   Values  : [ 1 .. 10000, step size: 1 ],
   Default : 166
 Exposure, Auto Priority
   ID      : 0x00000010,
   Type    : Boolean,
   Flags   : { CAN_READ, CAN_WRITE },
   Values  : [ 0 .. 1, step size: 1 ],
   Default : 0
 Pan (relative)
   ID      : 0x0000001c,
   Type    : Dword,
   Flags   : { CAN_READ, CAN_WRITE },
   Values  : [ -4480 .. 4480, step size: 0 ],
   Default : 0
 Tilt (relative)
   ID      : 0x0000001e,
   Type    : Dword,
   Flags   : { CAN_READ, CAN_WRITE },
   Values  : [ -1920 .. 1920, step size: 0 ],
   Default : 0
 Pan Reset
   ID      : 0x00000022,
   Type    : Button,
   Flags   : { CAN_READ, CAN_WRITE },
   Values  : [ 0 .. 0, step size: 0 ],
   Default : 0
 Tilt Reset
   ID      : 0x00000023,
   Type    : Button,
   Flags   : { CAN_READ, CAN_WRITE },
   Values  : [ 0 .. 0, step size: 0 ],
   Default : 0
 Focus
   ID      : 0x00000014,
   Type    : Dword,
   Flags   : { CAN_READ, CAN_WRITE },
   Values  : [ 0 .. 255, step size: 1 ],
   Default : 0
 LED1 Mode
   ID      : 0x046d0003,
   Type    : Choice,
   Flags   : { CAN_READ, CAN_WRITE, IS_CUSTOM },
   Values  : { 'Off'[0], 'On'[1], 'Blinking'[2], 'Auto'[3] },
   Default : 3
 LED1 Frequency
   ID      : 0x046d0004,
   Type    : Dword,
   Flags   : { CAN_READ, CAN_WRITE, IS_CUSTOM },
   Values  : [ 0 .. 255, step size: 1 ],
   Default : 0
 Disable video processing
   ID      : 0x046d0005,
   Type    : Boolean,
   Flags   : { CAN_READ, CAN_WRITE, IS_CUSTOM },
   Values  : [ 0 .. 1, step size: 1 ],
   Default : 0
 Raw bits per pixel
   ID      : 0x046d0006,
   Type    : Dword,
   Flags   : { CAN_READ, CAN_WRITE, IS_CUSTOM },
   Values  : [ 0 .. 1, step size: 1 ],
   Default : 0

Pour la motorisation, se sont les 4 options lié a Pan et Tilt qui vont nous interesser (rien ne vous empeche de faire mumuse avec les autres :-) )

 Pan (relative)
   ID      : 0x0000001c,
   Type    : Dword,
   Flags   : { CAN_READ, CAN_WRITE },
   Values  : [ -4480 .. 4480, step size: 0 ],
   Default : 0
 Tilt (relative)
   ID      : 0x0000001e,
   Type    : Dword,
   Flags   : { CAN_READ, CAN_WRITE },
   Values  : [ -1920 .. 1920, step size: 0 ],
   Default : 0
 Pan Reset
   ID      : 0x00000022,
   Type    : Button,
   Flags   : { CAN_READ, CAN_WRITE },
   Values  : [ 0 .. 0, step size: 0 ],
   Default : 0
 Tilt Reset
   ID      : 0x00000023,
   Type    : Button,
   Flags   : { CAN_READ, CAN_WRITE },
   Values  : [ 0 .. 0, step size: 0 ],
   Default : 0

On peut voir que 'Pan Reset' et 'Tilt Reset' ne prennent qu'un paramètre: 0
Pour les utiliser on lancera donc la ligne de commande:

 uvcdynctrl -d /dev/video0 -s 'Pan Reset' 0

Et vous verrez votre Web-Cam tourné horizontalement et revenir au centre.

 uvcdynctrl -d /dev/video0 -s 'Tilt Reset' 0

Pour la voir se recentrer verticalement


Pour le paramètre 'Pan (relative)' les valeurs acceptées vont de -4480 à 4480 comme indique pour Values
Si vous tenter de lire la valeur actuel des 'Pan (relative)' et 'Tilt (relative)' par la commande

   uvcdynctrl -d /dev/video0 -g 'Pan (relative)'

ou

   uvcdynctrl -d /dev/video0 -g 'Tilt (relative)'

Vous aurez un beau message d'erreur:

  ERROR: Unable to retrieve control value: A Video4Linux2 API call returned an unexpected error 22. (Code: 12)

Vous essayez de lire une valeur de position relative ( relative a elle meme), qui par définition est relative. C'est a dire égale a 0.
On regrette donc que ces 2 options soient en "CAN_READ", ce qui est de la responsabilité du constructeur ...

vous ne pouvez les utiliser qu'en écriture. Exemple de commande a passer:

   uvcdynctrl -d /dev/video0 -s 'Pan (relative)' -- -4480
   uvcdynctrl -d /dev/video0 -s 'Tilt (relative)' 1920

La 1ere commande va donc tenter de déplacer vers la droite (-) de 4480 unités ( le max accepté )par rapport a la position actuelle. La 2eme commande va tenter de deplacer vers le bas (+) de 1920 unités (le max accepter ) par rapport a la position actuelle.

Programmation UVC: les fonctions de libwebcam utilisées par uvcdynctrl

 #include <webcam.h>
 extern CControlId get_control_id (CHandle handle, const char *name);
 extern CResult get_control_list (CHandle handle, CControl **controls, unsigned int *count);
 extern int parse_control_value (const char *string, CControlValue *value);

a linker a libwebcam

Outils personnels