Progetto videosorveglianza con Linux – Progetto Open Source

Progetto videosorveglianza con Linux - Progetto Open Source

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.

  1. scarica la patch e modifica il tuo kernel;
  2. Abilita la camUSB SPCA5XX Sunplus Vimicro Sonix da modulo;
  3. abilita la usb-ohci e V4L nel sistema;
  4. Reimposta il kernel;
  5. Crea una entry del file system per la cam con: $mknod /dev/video0 c 81 0
  6. 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:

  1. dev = l’open(ope_cam, O_ RDWR) apre il dispositivo di acquisizione video;
  2. ioctl (dev, VIDIOCGCAP & il vid_caps) fornisce le proprietà di questo dispositivo;
  3. ioctl (dev, VIDIOCGCHAN & il vid_chnl) trova i parametri channel per un canale;
  4. ioctl (dev, VIDIOCGFBUF & il vid_buf) trova le proprietà di frame buffer;
  5. ioctl (dev, VIDIOCGPICT & il vid_pi) trova il setup del quadro di acquisizione;
  6. ioctl (dev, VIDIOCSPICT & il vid_pic) parametri include profondità di colore, contrasto, e luminosità;
  7. ioctl (dev, VIDIOCSWIN & il vid_win) setup finestra dei parametri;
  8. fwrite (m_buf ,1 ,230400, p) salva i dati acquisiti;
  9. 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.

 

  1. scarica la patch e modifica il tuo kernel;
  2. Abilita la camUSB SPCA5XX Sunplus Vimicro Sonix da modulo;
  3. abilita la usb-ohci e V4L nel sistema;
  4. Reimposta il kernel;
  5. Crea una entry del file system per la cam con: $mknod /dev/video0 c 81 0
  6. 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:

  1. dev = l’open(ope_cam, O_ RDWR) apre il dispositivo di acquisizione video;
  2. ioctl (dev, VIDIOCGCAP & il vid_caps) fornisce le proprietà di questo dispositivo;
  3. ioctl (dev, VIDIOCGCHAN & il vid_chnl) trova i parametri channel per un canale;
  4. ioctl (dev, VIDIOCGFBUF & il vid_buf) trova le proprietà di frame buffer;
  5. ioctl (dev, VIDIOCGPICT & il vid_pi) trova il setup del quadro di acquisizione;
  6. ioctl (dev, VIDIOCSPICT & il vid_pic) parametri include profondità di colore, contrasto, e luminosità;
  7. ioctl (dev, VIDIOCSWIN & il vid_win) setup finestra dei parametri;
  8. fwrite (m_buf ,1 ,230400, p) salva i dati acquisiti;
  9. ioctl (dev, VIDIOCMCAPTURE & il vid_mmap) avvia l’acquisizione di un frame;

AXIS IP Camera


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

 

STAMPA     Tags:

10 Comments

  1. Francesco12-92 4 febbraio 2011
  2. giuskina 4 febbraio 2011
  3. giuskina 3 febbraio 2011
  4. linus 3 febbraio 2011
  5. s1m0n3t 3 febbraio 2011
  6. mingoweb 8 febbraio 2011
  7. giuskina 3 febbraio 2011
  8. s1m0n3t 4 febbraio 2011
  9. slovati 1 febbraio 2011
  10. NIck_BG 7 febbraio 2011

Leave a Reply