Linux Webcam Monitoring BTTV & Philips Webcam
Introduzione
Le webcam oggi presenti sul mercato, almeno quelle di livello home user sono tutte USB. Queste facilita l'utilizzo sotto diversi dispositivi ma spesso ne limita le potenzialità. Utilizzare una scheda di aquisizione PCI ed una videocamera collegata con segnale composito rappresenta sicuramente (almeno nel mio caso) una soluzione più affidabile e prestante.
La scheda utilizzata è una brooktree coorporation Bt848 Video Capture (Bt848KPF - CPH02-B) mentre la webcam in dotazione è una webcam philps, collegata con un cavo per il segnale video composito.
#lspci 00:10.0 Multimedia Video controller: Brooktree Coorporation Bt848 Video Capture (rev 12)
BTTV con GNU/LINUX
Dal punto di vista del sistema sono necessari alcuni moduli per il coretto supporto della scheda e della webcam, sono:
#sotto character device i2c.o i2c-algo-bit i2c-core
#sotto multimedia videodev.o bttv.o tuner.o
Configurazione dl kernel
# #multimedia devices # CONFIG_VIDEO_DEV=m # #video for linux # CONFIG_VIDEO_BT848=m
# i2C support # CONFIG_I2C=m CONFIG_I2C_ALGOBIT=m CONFIG_I2C_ALGOPCF=m CONFIG_I2C_PROC=m
Aggiungere nel file rc.modules
#per webcam modprobe i2c modprobe i2c-algo-bit modprobe i2c-core modprobe tuner modprobe bttv
una volta ricompilato il kernel e riavviato il sistema, dovremmo avere una situazione di questo tipo
#lsmod Module Size Used by Not tainted tuner 10272 0 (unused) bttv 98720 1 i2c-algo-bit 6984 1 [bttv] i2c-core 12900 0 [tuner bttv i2c-algobit] soundcore 3332 0 [bttv] videodev 6080 4 [usbvideo bttv]
In realtà il mio test si è svolto utilizzando una Slackware 9.1, che di default riconosce la scheda e non richiede ricompilazioni di alcun tipo. basta un dmesg per verificarlo:
bttv: driver version 0.7.107 loaded bttv: using 4 buffers with 2080k (8320k total) for capture bttv: Host bridge is Silicon Integrated Systems [SiS] 650 Host bttv: Bt8xx card found (0) PCI: Found IRQ 3 for device 00:10.0 bttv0: Bt848 (rev 18) at 00:10.0, irq 3, latency: 32, mmio: 0xef000000 bttv: using: BT848(*** UNKNOWN/GENERIC **) [card=0,autodetected] i2c-core.0: adapter bt848 #0 registered as adapter 0 bttv0: registered device video0 bttv0: registered device vbi0
Il comando dov4l
per poter affettuare un test (dump) più approfondito del nostro dispositivo si può utilizzare dov4l
./dov4l -h dov4l v0.5, (c) 2003 by folkert@vanheusden.com d device device to use (default is /dev/video0) q query capabilities i channel set input-channel t tuner set tuner (most of the time 0) m mode mode (PAL/NTSC/SECAM/AUTO) f frequency set frequency b brightness set brightness u hue set hue c color set color n contrast set contrast w whiteness set whiteness s width,height set size
Con questo utile programma possiamo anche agire sul setup del device cambiando alcuni parametri, come quelli mostrati dall'help del comando.
per effettuare una query sul device:
./dov4l -q -d /dev/video0 Canonical name for this interface: BT848A( *** UNKNOWN/GENERIC **) Type of interface: Can capture to memory Has a tuner of some form Can overlay its image onto the frame buffer Overlay clipping is supported Overlay overwrites frame buffer memory The hardware supports image scaling Number of radio/tv channels if appropriate: 4 Number of audio devices if appropriate: 1 Maximum capture width in pixels: 768 Maximum capture height in pixels: 480 Minimum capture width in pixels: 48 Minimum capture height in pixels: 32 Image size (x,y): 640, 480 The channel number: 0 The input name: Television Number of tuners for this input: 1 Channel has tuners Channel has audios The input is a TV input The norm for this channel: 1 Number of the tuner: 0 Canonical name for this tuner: Television Lowest tunable frequency: 0 Highest tunable frequency: -1 Current frequency: 4095MHz Flags describing the tuner: PAL tuning is supported NTSC tuning is supported SECAM tuning is supported Frequency is in a higher range (tuning frequencies are in 1/16th MHz) The video signal mode if relevant: The tuner is in NTSC mode The tuner auto switches, or mode does not apply Signal strength if known: 65535 The channel number: 1 The input name: Composite1 Number of tuners for this input: 0 Channel has audios The input is a camera The norm for this channel: 1 The channel number: 2 The input name: S-Video Number of tuners for this input: 0 Channel has audios The input is a camera The norm for this channel: 1 The channel number: 3 The input name: Composite3 Number of tuners for this input: 0 Channel has audios The input is a camera The norm for this channel: 1 Brightness: 36890 Hue: 28222 Colour: 32512 Contrast: 31019 Whiteness: 0 Depth: 16 Palette: RGB565 packed into 16 bit words.
Il comando setv4l
Un pò più semplice ma più intuitivo per il setup della videocamera setv4l
# ./setv4l /dev/video0 device: /dev/video0 name: bttv video capabilities: CAPTURE TUNER OVERLAY CLIPPING FRAMERAM SCALES min-size: 48x32 max-size: 768x480 channels: 4 audios: 1 brightness: 32768 hue: 32768 colour: 32512 contrast: 27648 whiteness: 0 depth: 16 palette: 3
A questo punto per poter utilizzare la webcam consiglio di puntare su due software che sono Xawtv (e gli altri programmi a corredo) per la visualizzazione delle immagini e Motion per effettuare una vera e propria videosorveglianza. Vediamo in modo sintetico come utilizzare questi software con la nostra webcam, per un approfondimento rimando alla consultazione dell'HOWTO già pubblicato:
http://www.sistemistiindipendenti.org/modules/news/article.php?storyid=100
Installazione e utilizzo di Xawtv
Questo software ci consente di verificare le possibilità di acquisizione della nostra webcam tramite la scheda. Effettuiamo lo scan per verificar se il device è stato didentificato:
#xawtv -hwscan This is xawtv-3.91, running on Linux/i686 (2.4.22-openmosix-2) looking for available devices Xlib: extension "XVideo" missing on display ":3.0". /dev/video0: OK [ -device /dev/video0 ] type : v4l name : BT848A( *** UNKNOWN/GENERIC **) flags: overlay capture tuner
Come si può notare il dispositivo viene visto tramite V4l come device /dev/video0. A questo punto posso eseguire:
#xawtv &
Per il setup standard di xawtv non vedrò nulla ma dovrò impostare (almeno nel mio caso) i valori di acquisizione:
TV norm: NTSC Video Source: Composite1 Frequency Table: Italy Capture: grabdisplay
A questo punto apparirà l'immagine. Per poter andare alla risoluzione massimo aggiungerò a xawtv da riga di comando:
#xawtv c /dev/video0 geometry 640x480
Alternativamente si possono specificare le opzioni in un file di configurazione dal nome .xawtv da salvare nella home dello user che esegue il programma. Un esempio di questo file può essere Configurazione ".xawtv "
[global] freqtab = italy pixsize = 640x480 jpeg-quality = 100 [defaults] norm = NTSC input = Composite1 capture = grab color = 55% bright = 60% hue = 43% contrast = 35%
A questo punto abbiamo verificato che la nostra scheda di acquisizione e la nostra webcam funzionano perfettamente. Dal punto di vista della qualità dell'immagine, il risultato non è eccezionale, la webcam è piuttosto vecchia (credo del 1998), il sensore dimostra poca capacità di lavorare in condizioni di luminosità scarse. In compenso il sistema utilizza meno risorse di sistema e sembra essere più affidabile che nei test condotti con webcam USB. Oltre alla risoluzione massima che sono riuscito a raggiungere (768x480), il sistema lavora agevolmente a 30 fps (frames per secondo), risolvendo il problema di immagini mosse che avevo alla stessa risoluzione con webcam USB, con cui ero riuscito al massimo ad arrivare a 15 fps (pwcx).
Installazione e utilizzo di Motion
Come ampiamente spiegato nell'articolo precedente con Motion possiamo effettuare l'acquisizione di immagini che impegnano il campo visivo della nostra webcam. Installazione di Motion
wget http://cesnet.dl.sourceforge.net/sourceforge/motion/motion-3.1.12.tar.gz sh ./configure --with-libavcodec=/usr/src/ffmpeg-0.4.8/libavcodec --without-pgsql make && make install
La configurazione è semplice i parametri più importanti impostati sono questi:
#motion.conf videodevice /dev/video0 framerate 100 width 640 height 480 threshold 1500 noise_level 32 night_compensate on snapshots 1800 output_normal yes target_dir /htdir/htdocs/webcam quality 100 ffmpeg_cap_new yes ffmpeg_timelaps on video_pipe /dev/video4 motion_video_pipe /dev/video6 webcam_port 8000 webcam_quality 90 webcam_motion no webcam_maxrate 100
Per poter utilizzare le video pipes occorre utilizzare il vloopback
tar vloopback-0.91.tar.gz cd vloopback-0.91 make insmod vloopback.o dev_offset=2 pipes=7 # cat /proc/video/vloopback/vloopbacks vloopback version 0.91 Loop Input Status Output Status 0 video2 - video3 - 1 video4 W video5 R 2 video6 W video7 - 3 video8 - video9 - 4 video10 - video11 - 5 video12 - video13 - 6 video14 - video15 -
Esecuzione di Motion Per poter lavorare con motion ed essere sicuro che acquisisse usando il segnale (NTSC) ho dovuto passarglielo da riga di comando:
motion -n ntsc Debug thread0 device: /dev/video0 input: 1 thread pid: 1264 waiting for threads to finish, pid: 1262 Opening video loopback device for normal pictures Failed to open video loopback root@openmosix1:/usr/local/etc# motion -n ntsc thread0 device: /dev/video0 input: 1 thread pid: 1267 waiting for threads to finish, pid: 1265 Opening video loopback device for normal pictures Opening video loopback device for motion pictures Webcam server listning on port: 8000 Motion detected File of type video/mpeg saved to: /htdir/htdocs/webcam/2004/04/15//122246.mpg File of type image/jpg saved to: /htdir/htdocs/webcam/2004/04/15/12/22/46-00.jpg Motion detected File of type image/jpg saved to: /htdir/htdocs/webcam/2004/04/15/12/22/46-01.jpg Motion detected File of type image/jpg saved to: /htdir/htdocs/webcam/2004/04/15/12/22/46-02.jpg
Risorse
Video For Linux http://online.infomedia.it/riviste/dev/68/articolo24/articolo.htm
Linux.bytesex.org http://linux.bytesex.org/
BTTV Mini-HOWTO http://it.tldp.org/HOWTO/BTTV.html#toc3
Dott. Paolo PAVAN [Netlink Sas] pavan@netlink.it
Data: Febbraio - Marzo 2004
Note finali
- Il presente documento è a semplice scopo divulgativo
- L'autore non si assume la responsabilità di eventuali danni diretti o indiretti derivanti dall'uso dei programmi, o
dall'applicazione delle configurazioni menzionate nel seguente articolo
- I marchi citati sono di proprietà dei rispettivi proprietari e sono stati utilizzati solo a scopo didattico o divulgativo.
- L'uso o il riutilizzo del presente articolo è liberamente consentito per scopi didattici o informativi previa citazione della fonte
- Sono possibili errori o imprecisioni, segnalatemele a pavan@netlink.it
- Chi volesse integrare il presente documento, può scrivere a pavan@netlink.it