
Progetto videosorveglianza con Linux - Progetto Open Source
Ho creato un progetto PCAM (Pico Camera) con un microcontrollore ARM (LPC2142 - datasheet) ed una camera seriale (C328). Il progetto è molto semplice e di basso costo. Ora posso condividere un progetto per un prodotto di videosorveglianza più complesso. Poiché un blog è troppo piccolo per fornire ogni dettaglio per l’implementazione, tenterò di offrire le informazioni di orientamento per le persone che si volgeranno a DIY.
Il sistema (progetto videosorveglianza con Linux) sfrutta una scheda di valutazione ARM9 autoinstallante ed una webcam USB commerciale.
Per favore nota, non è un progetto commerciale, così il suo costo BOM non è la considerazione maggiore. Il kit ARM più comunemente disponibile è l’S2C2410/2440 (ARM920T), si può ottenere anche la scheda beagle col potente OMAP3530. Comunque, in questo progetto, l’elaborazione video sarà gestita dal processore ARM con la libreria V4L (Video per Linux), piuttosto che DSP nell'OMAP3530. Sfrutteremo le periferiche di scheda SDRAM, la flash memory NOR/NAND, USB host ,Ethernet, RS232, audio I/O (I2S) e JTAG.
I compiti principali per questo progetto sono: sviluppo driver, acquisizione video ed elaborazione backend (sia memoria locale in un dispositivo USB sia l’invio ad un web server interno o esterno).
Driver
I fornitori principali di cam USB sono Omnivision, VICMicro, Micron e Sunplus. Qualche volta è difficile ottenere direttamente le specifiche ed il codice sorgente del driver da questi venditori. Comunque la maggior parte delle cam USB possono essere rilevate nel desktop Linux. Ed è possibile ottenere i driver dalle comunità open source. Si può visionare il progetto Spca5xx e trovare i driver, poi inserire la scheda ARM. Gli step seguenti sono familiari per uno sviluppatore Linux.
- scarica la patch e modifica il tuo kernel;
- Abilita la camUSB SPCA5XX Sunplus Vimicro Sonix da modulo;
- abilita la usb-ohci e V4L nel sistema;
- Reimposta il kernel;
- Crea una entry del file system per la cam con: $mknod /dev/video0 c 81 0
- registra la cam con: $insmod spca5xx.o
Video per Linux
Per favore fai riferimento al manuale di V4L per informazioni dettagliate per lo sviluppo del programma di acquisizione video. Si può usare V4L API per accedere alla cam e catturare l'immagine. Ci sono molti programmi esemplificativi disponibili per desktop Linux a cui si può far riferimento. Per esempio, Cheese in Ubuntu è un buon punto di partenza. Per verificare l'API seguente in V4L si può usare:
- dev = l'open(ope_cam, O_ RDWR) apre il dispositivo di acquisizione video;
- ioctl (dev, VIDIOCGCAP & il vid_caps) fornisce le proprietà di questo dispositivo;
- ioctl (dev, VIDIOCGCHAN & il vid_chnl) trova i parametri channel per un canale;
- ioctl (dev, VIDIOCGFBUF & il vid_buf) trova le proprietà di frame buffer;
- ioctl (dev, VIDIOCGPICT & il vid_pi) trova il setup del quadro di acquisizione;
- ioctl (dev, VIDIOCSPICT & il vid_pic) parametri include profondità di colore, contrasto, e luminosità;
- ioctl (dev, VIDIOCSWIN & il vid_win) setup finestra dei parametri;
- fwrite (m_buf ,1 ,230400, p) salva i dati acquisiti;
- ioctl (dev, VIDIOCMCAPTURE & il vid_mmap) avvia l’acquisizione di un frame;
Miglioramento
La videosorveglianza è una fetta di mercato attivo con molte innovazioni. Tale mercato può essere diviso ulteriormente in molti piccoli segmenti. In generale, le cam stanno divenendo più intelligenti (riconoscimento video, collegamenti di rete), più chiare (da bassa risoluzione a HD) e più economiche. Come progetto di cam casalinga, esso può essere elevato a versioni commerciali.
C'è molto per migliorare questo progetto. Si può usare l'interfaccia di cam originaria dell’ S3C2440. Si può aggiungere il controllo PTZ (Pan/Tilt/Zoom) per le cam. Si può promuovere l'Ethernet a WiFi. Si possono aggiungere memoria di massa locale e flash card. Si può installare l’embedded server e DDNS per poter accedere remotamente alla cam. Ci si può connettere alla cam da telefonino tramite server WAP. Si può aggiungere l'audio se si vuole. Si può usare il framework gstreamer per convertire le immagini in AVI o altri formati di stream. Si può installare la cam su un robot mobile. Si può spiegare il riconoscimento dell’oggetto in movimento comparando le immagini sequenziali.
Se si vuole ottenere una cam di videosorveglianza ad alta risoluzione, si deve usare la schedaOMAP3530 o la scheda Blackfin. Si dice che siano in grado di occuparsi di gestire il video encoding.264. Ma io non sono abile con DSP.
Comunque, se Lei non ha la scheda ARM, provare prima QEMU. Alternativamente, si può tentare di sviluppare il codice nel proprio Linux PC, poi eseguirlo su NAS.
- scarica la patch e modifica il tuo kernel;
- Abilita la camUSB SPCA5XX Sunplus Vimicro Sonix da modulo;
- abilita la usb-ohci e V4L nel sistema;
- Reimposta il kernel;
- Crea una entry del file system per la cam con: $mknod /dev/video0 c 81 0
- registra la cam con: $insmod spca5xx.o
Video per Linux
Per favore fai riferimento al manuale di V4L per informazioni dettagliate per lo sviluppo del programma di acquisizione video. Si può usare V4L API per accedere alla cam e catturare l'immagine. Ci sono molti programmi esemplificativi disponibili per desktop Linux a cui si può far riferimento. Per esempio, Cheese in Ubuntu è un buon punto di partenza. Per verificare l'API seguente in V4L si può usare:
- dev = l'open(ope_cam, O_ RDWR) apre il dispositivo di acquisizione video;
- ioctl (dev, VIDIOCGCAP & il vid_caps) fornisce le proprietà di questo dispositivo;
- ioctl (dev, VIDIOCGCHAN & il vid_chnl) trova i parametri channel per un canale;
- ioctl (dev, VIDIOCGFBUF & il vid_buf) trova le proprietà di frame buffer;
- ioctl (dev, VIDIOCGPICT & il vid_pi) trova il setup del quadro di acquisizione;
- ioctl (dev, VIDIOCSPICT & il vid_pic) parametri include profondità di colore, contrasto, e luminosità;
- ioctl (dev, VIDIOCSWIN & il vid_win) setup finestra dei parametri;
- fwrite (m_buf ,1 ,230400, p) salva i dati acquisiti;
- ioctl (dev, VIDIOCMCAPTURE & il vid_mmap) avvia l’acquisizione di un frame;

Miglioramento
La videosorveglianza è una fetta di mercato attivo con molte innovazioni. Tale mercato può essere diviso ulteriormente in molti piccoli segmenti. In generale, le cam stanno divenendo più intelligenti (riconoscimento video, collegamenti di rete), più chiare (da bassa risoluzione a HD) e più economiche. Come progetto di cam casalinga, esso può essere elevato a versioni commerciali.
C'è molto per migliorare questo progetto. Si può usare l'interfaccia di cam originaria dell’ S3C2440. Si può aggiungere il controllo PTZ (Pan/Tilt/Zoom) per le cam. Si può promuovere l'Ethernet a WiFi. Si possono aggiungere memoria di massa locale e flash card. Si può installare l’embedded server e DDNS per poter accedere remotamente alla cam. Ci si può connettere alla cam da telefonino tramite server WAP. Si può aggiungere l'audio se si vuole. Si può usare il framework gstreamer per convertire le immagini in AVI o altri formati di stream. Si può installare la cam su un robot mobile. Si può spiegare il riconoscimento dell’oggetto in movimento comparando le immagini sequenziali.
Se si vuole ottenere una cam di videosorveglianza ad alta risoluzione, si deve usare la schedaOMAP3530 o la scheda Blackfin. Si dice che siano in grado di occuparsi di gestire il video encoding.264. Ma io non sono abile con DSP.
Comunque, se Lei non ha la scheda ARM, provare prima QEMU. Alternativamente, si può tentare di sviluppare il codice nel proprio Linux PC, poi eseguirlo su NAS.
Riferimenti
Video for Linux
http://www.thedirks.org/v4l2/
Spca5xx e Linux Embedded
http://mxhaard.free.fr/embedded.html

Un sistema di videosorveglianza completo come quello presentato in questo progetto e’ fondamentale per aumentare il livello di sicurezza, sia che si tratti di controllare l’interno di un’abitazione, gli accessi ad un’area privata, o anche per il controllo di siti produttivi o industriali. Le possibilita’ di estensione del progetto sono numerose, come del resto accennato nell’articolo: si potrebbe ad esempio introdurre una funzione di riconoscimento dei pattern (simile a cio’ che ad esempio avviene in molti distributori di carburante self-service per il riconoscimento delle targhe). Inoltre, e questo e’ un plus del progetto, vengono utilizzati degli strumenti open-source: V4L (Video for Linux), ad esempio, e’ utilizzato per gestire non solo le webcam USB, ma permette di realizzare molte altre applicazioni quali: visione dei programmi televisivi, registrazione da TV, streaming, acquisizione e memorizzazione delle pagine teletext, ecc.
… si può fare di tutto con linux e con una webcam, peccato che mastico poco linux.
grazie ad un progetto del genere, xò meglio averlo l’audio ! PS grazie x i link
se la cam è quella i LED IR per la sorveglianza notturna, che a mio avviso sarebbero necessari, ormai anche le scrause cinesi hanno.
Ho giusto un pc embedded linux che volevo utilizzare come dvr con una webcam…non riuscivo a trovare il software adatto e…eccolo qua!! Grazie!
esiste anche la possibilità di avere la visione a infrarossi che qualcuno sappia? mi farebbe comodo per videosorvegliare l’esterno del giardino :))
La visione ad infrarossi non dipende né dal software, né dall’hardware del pc. Basta una telecamera sensibile agli infrarossi (quasi tutte, se non hanno un apposito filtro ir) e un illuminatore ir. Ad esempio alcune telecamere di videosorveglianza hanno un illuminatore integrato, composto da una serie di led ir posizionati intorno alla telecamera. In caso di una telecamera sprovvista di led esistono illuminatori separati, simili a faretti led, ma che emettono luce infrarossa.
sono sistemi perfetti per una bellissima casa domotica controllata
6 sempre una sorta di wikipedia da consultare a piacere … cmq passo passo ne mastico sempre di più. Poi arriveranno anche delle riviste del settore
Il progetto è davvero stupefacente!
Il fatto che ci sia l’audio o meno ciò non importa! La cosa che mi piace di più di questo progetto è che è open source!
Complimenti al progettista!
Ottimo progetto… E’ sempre preferibbile utilizzare un sistema LINUX per la sua stabilità…