retour vers linux
Sommaire |
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.
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.)
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.
#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