venerdì 11 novembre 2011

Una WEBCAM USB per l'embedded SX ARM Linux

Nell'articolo che segue vediamo come collegare una WEBCAM con interfaccia USB 2.0 alla SX ARM Linux e come inviare in streaming su LAN il video acquisito.

In questo articolo vediamo come: collegare una mini WEBCAM con interfaccia USB 2.0 alla Linux box SX ARM Linux, caricare i driver necessari al funzionamento e come inviare il flusso video acquisito in streaming su LAN tramite il software MJPG-streamer.

Requisiti Hardware

Per la stesura di quest'articolo è stato utilizzato:

  1. Una SX ARM Linux 1L (SX Arm Linux 1L: scheda Linux Embedded con supporto SD/MMC e linee di IO)

  2. Una alimentatore 220v - 12V CC (Alimentatore da barra DIN switching 220V - 12V 1500mA)

  3. Un WEBCAM con interfaccia USB (DLP-IO8 Modulo con ingressi/uscite TTL ingressi ADC a 10bit)

Collegamenti

I collegamenti da effettuare sono veramente minimali, è sufficiente alimentare la SX ARM Linux 1L con una tensione continua o alternata di almeno 12V, e collegare la WEBCAM ad una delle due porte USB 2.0 che equipaggiano la SX ARM Linux.

In questo esempio è necessario collegare l'embedded Linux ad una rete LAN su cui è connesso un PC client Linux o Windows. L'IP di default della SX ARM Linux 1L è: 192.168.2.127.

Installazione dei driver per la WEBCAM

Per il corretto funzionamento della WEBCAM calsse UVC con la SX ARM Linux 1L, è necessario caricare i driver contenuti nella cartella "driver" presente nel file compresso VIDEO_ARMLINUX.zip presente nel CD fornito a corredo dell'embedded.
I driver uvcvideo.ko v4l1-compat.ko v4l2-common.ko videodev.ko vanno installati sulla SX ARM Linux seguendo le istruzioni che seguono:

  • Decomprimere il file VIDEO_ARMLINUX.zip (il file viene fornito con l'acquisto di una SX ARM Linux) in una cartella del PC collegato in LAN con la SX ARM Linux.
  • Collegarsi in SSH alla 1L (ssh: 192.168.2.127 username: root password: root)
  • Creare sulla SX ARM Linux la cartella video/driver con il comando:

    mkdir -p /disk/video/driver

  • Tramite un client FTP connettersi alla SX ARM Linux (ftp: 192.168.2.127 username: root password: root modalità di trasferimento binaria).
  • Trasferire via FTP nella cartella /disk/video/driver/ della SX ARM Linux tutti i file contenuti nella directory "driver" dell'archivio archivio zip
  • Rendere eseguibili i driver con il comando:
    chmod +x /disk/video/driver/*
  • Da console SSH lanciare i seguenti comandi:

    insmod /disk/video/driver/v4l1-compat.ko
    insmod /disk/video/driver/videodev.ko
    insmod /disk/video/driver/v4l2-common.ko
    insmod /disk/video/driver/uvcvideo.ko

  • Verificare il corretto riconoscimento della WEBCAM con il comando: dmesg

    uvcvideo: Found UVC 1.00 device USB2.0 PC CAMERA (18ec:3299)
    uvcvideo: Failed to query (135) UVC control 1 (unit 0) : 0 (exp. 26).
    usbcore: registered new driver uvcvideo
    USB Video Class driver (v0.1.0)

A questo punto la WEBCAM è correttamente installata sulla SX ARM Linux ed è disponibile sul device /dev/video0

Installare MJPG-Streamer

MJPG-streamer ( mjpg-streamer.sourceforge.net/) è una applicazione a riga di comando per lo streaming di video acquisito da una webcam, su rete LAN. Lo streaming del tool MJPG-streamer può essere visualizzato su un browser internet come Firefox o Chrome; oppure con il client video VLC, o su un cellulare dotato di browser web.

Sfruttando la compressione hardware della webcam, il programma MJPG-streamer è in grado di ridurre i cicli CPU, rendendolo la soluzione ideale per dispositivi embedded e piccoli server.

Il programma MJPG-streamer viene fornito crosscompilato per l'embedded SX ARM Linux 1L all'interno del file VIDEO_ARMLINUX.zip.
Per l'installazione del tool è necessario procedere come segue:

  • Decomprimere il file VIDEO_ARMLINUX.zip (il file viene fornito con l'acquisto di una SX ARM Linux)
  • Tramite un client FTP connettersi alla SX ARM Linux (ftp: 192.168.2.127 username: root password: root modalità di trasferimento binaria).
  • Copiare nella SX ARM Linux tramite FTP, la cartella "mjpg-streamer" contenuta nel file precedentemente decompresso.
  • Rendere eseguibili il programma con il comando:
    chmod -Rf +x /disk/video/MJPG-streamer/

  • Linkare la libreria libjpeg necessaria al funzionamento del programma con il comando:
    ln -s /disk/video/mjpg-streamer/libjpeg.so.62 /lib/libjpeg.so.62

  • Esportare la variabile LD_LIBRARY_PATH con la path in cui sono contenuti i plugins del programma MJPG-streamer; con il comando:
    export LD_LIBRARY_PATH=/disk/video/mjpg-streamer/plugins/

  • Caricare i driver per la WEBCAM UVC come descritto nel paragrafo "Installazione dei driver per la WEBCAM".
  • Avviare il programma con il comando che segue:
    /disk/video/mjpg-streamer/mjpg-streamer -i "input_uvc.so -n" -o "output_http.so -w /disk/video/mjpg-streamer/www/ -p 8080"

    MJPG Streamer Version.: 2.0
    i: Using V4L2 device.: /dev/video0
    i: Desired Resolution: 640 x 480
    i: Frames Per Second.: 5
    i: Format............: MJPEG
    o: www-folder-path...: /mnt/disk/video/mjpg-streamer/www/
    o: HTTP TCP port.....: 8080
    o: username:password.: disabled
    o: commands..........: enabled

    In alternativa per velocizzare tutta la procedura di avvia del programma è possibile lanciare lo script "start" contenuto nella cartella "mjpg-streamer":

Con il demone MJPG Streamer in esecuzione, possiamo verificare se tutto funziona semplicemente aprendo con il browser internet di un PC collegato in rete con la SX ARM Linux, l'url http://[ip della SX ARM Linux]:8080

Dalla pagina web del programma MJPG Streamer sono visibili vari soluzioni di streaming come per esempio: in java o in javascript e anche con VideoLAN.
Per testare lo striming sul client VideoLAN (o VLC) è necessario scaricare il programma gratuito dall'URL
http://www.videolan.org/vlc/,
installarlo e lanciarlo.Dal menù "Media" selezionare la voce "Apri flusso di rete..." e digitare nel campo "Indirizzo" l'URL http://[ip della SX ARM Linux]:8080?action=stream

dopo pochissimi istanti il client VLC visualizzerà il flusso video acquisito dalla WEBCAM collegata alla SX ARM Linux.

Tra le molteplici possibilità di visualizzazione dello stream generato dal demone MJPG Streamer di particolare interesse risulta essere quella su terminali mobili come: IPdad, iPhone e Android:

Catturare singoli frame dalla WEBCAM

Nel caso la necessità fosse quella di catturare dalla WEBCAM un singolo frame e salvarlo in un file JPEG, nell'archivio VIDEO_ARMLINUX.zip è presente il programma CaptureFrame.

CaptureFrame non richiede alcuna installazione, è sufficiente trasferirlo via FTP nella memoria della ARM Linux, renderlo eseguibile con il comando:
chmod +x CaptureFrame

ed avviarlo.
./CaptureFrame

CaptureFrame accetta come opzioni:

-O file name o file path
-D device (default /dev/video0)
-V per impostare la modalità verbose.