venerdì 13 settembre 2013

Security Cam ovvero, Esperienze con Raspberry Pi, Motion e Linux


Security Cam ovvero, Esperienze con Raspberry Pi, Motion e Linux.
Motion è un programma che gira su Linux, l'ho scoperto qualche giorno fa per caso, parlando con un amico che stava cercando di monitorare una istallazione promozionale -un maxischermo promozionale per la precisione- attraverso una chiamata ad un utente Skype costruito per l'occasione. Gia' di per se era una esperienza interessante, che prima o poi recensiro' con un articolo ad hoc.



Raspberry
Parlando di come poter concludere  quel progetto, mentre stavamo in hangup su Skype, glooggavo qua e la sull'argomento. Mi sono interessato da subito a Motion dopo aver letto questa guida trovata durante il mio zapping.
Ho subito pensato che si potesse realizzare anche con la  Rasperry Pi, la nota scheda di prototipazione che da qualche mese ho qui a disposizione per i miei esperimenti.
Quindi ho iniziato seguendo la guida l'istallazione e la configurazione del programma. Funziona! Ho ottenuto, dopo un paio di giorni di prove, un server di video sorveglianza facilmente configurabile e piuttosto completo.
Adesso quindi passo alla descrizione del progetto:
Componenti:
1) Raspberry Pi mod B rev 2 (appena ricevuta da RsComponents) - La Raspberry in questione ha la porta ethernet, molto utile per poter trasmettere i filmati e le foto ricavate da Motion su un file server privato e su un sito internet esterno.
2) Webcam usb - io ho utilizzato una Trust HD cam che ha una qualita' dell'immagine dignitosa (1920 x 1080),viene riconosciuta subito dal sistema operativo ed è piuttosto economica (39 euro circa)Trust Webcam HD
  



- Ho fatto comunque anche delle prove con un'altra webcam usb la Hercules Classic che ha una qualita' inferiore (max 640x 480 pixels) ma ha il buon requisito di economicita' ( si trova  a circa 9 - 14 euro al supermercato), anche questa telecamera non e' stata un problema, appena attaccata alla presa usb e' stata riconosciuta ed ha iniziato a funzionare, senza necessita' di driver aggiuntivi
3) accesso ad internet per l'istallazione dei programmi necessarie per la condivisione su server remoto dei file video e jpg registrati dal sistema di video sicurity.
4) una scheda SD con istallata l'ultima versione del sistema operativo di Raspberry Pi .
 non sono indispensabilil monitor, mouse, tastiera e hub usb, in quanto la raspberry puo' essere approntata anche con una connessione da remoto via ssh, questa infatti e' la strada che ho percorso io. L'hub usb potrebbe essere necessario se l'assorbimento della webcam  dovesse superare i valori  erogati dalla nostra scheda che dipendono dalla scheda ma anche dall'alimentatore che stiamo utilizzando per alimentare  tutto il sistema.
A questo punto, direi che e' venuto il momento di collegare l'alimentazione alla Raspberry Pi e far partire il sistema operativo opportunamente prelevato dal sito ufficiale della Rasp.
Seguire a questo punto le istruzioni della guida all'istallazione di Motion da qui 
 A questo punto configurare il programma come descritto nella giuda tenendo conto che:
Dalle esperienze che ho potuto fare in questi giorni di porve, il programma fa tante cose, alcune delle quali possono essere inibite.Vediamo come:
Intanto va stoppato il programma che dopo l'istallazione parte in automatico con il comando

# /etc/init.d/motion stop

poi bisogna modificare i seguenti  files
/etc/motion/motion.conf
/etc/motion/threadXY.conf
Il primo e' il motore del programma, mentre il secondo serve per configurare le eventuali altre webcam collegate al sistema - se il sitema ha solo una webcam, non c'e' bisogno di modificare il secondo file.
Per modificare il file diconfigurazione si possono utilizzare diverse strade, io preferisco quella della modifica diretta attraverso il classico editor di test di Linux vi, ma si puo' agire su ogni elemento della configurazione anche attraverso il browser web che si attiva alla partenza del programma motion. ( quindi chi volesse fare cosi' deve far partire il programma con il comando " sudo motion " digitato dall'interno della cartella costruita ad hoc nella nostra home - nel mio caso " $HOME/motion "  - e chiamare il configuratore online all'indirizzo http://localhost:8080 attraverso il browser interno di Raspberry, oppure, se e' stato gia' definito il parametro " webcam_localhost off " , anche da un browser residente su un qualsiasi altro computer della rete -cioe' in rete interna con una numerazione ip sulla stessa classe della raspberry - ).
Ma come dicevo sopra, io preferiso entrare nella configurazione del Motion attraverso il semplice programma di editor testuale " vi ", con il comando
" sudo vi /etc/motion/motion.conf "
A questo punto come detto sopra, si puo' rendere disponibile il server a tutti i pc della rete interna con la modifica del parametro " webcam_localhost off "
Facendo questo si rende disponibile, oltre all'accesso alla configurazione, anche la pagina di controllo della telecamera, che viene aggiornata in continuazione con cio' che inquadra la cam. Questa pagina la si raggiunge all'indirizzo
" http://localhost:8081 " .
Se l'indirizzo non fosse disponibile, magari perche' sul server gira già un altro servizio proprio su questa porta, si può modificare ad esempio sulla porta 7071 soltanto variando questa riga del file di configurazione " webcam_port 8081 "
Il file di configurazione è molto ben commentato - in inglese - ma e' chiaro ed essenziale, diviso per capitoli, quindi potranno essere modificati tutti i parametri propri del server, i controlli di base HTTP, la gestione dei comandi esterni in shell, tutta la gestione delle immagini e dei video e la loro collocazione nelle cartelle di sistema, la gestione del movimento e del sistema di Capture Device, le istruzioni per il debug e per lo start del programma come demone Linux.
Ci sono anche molti parametri per la regolazione di un eventuale sistema motorizzato con stepper o motori in continua che gestisce lo spostamento della telecamera in funzione del eventuale movimento individuato, cioe' se la cam individua in movimento si attiva, registra un filmato, scatta delle foto, puo' attivare un allarme o inviare una mail o trasferire il filmato e le foto scattate su un server ftp esterno, ed e' stato implementato anche un sistema di motion tracking Pan e Tilt che dovrebbe seguire il soggetto in movimento spostando fisicamente la cam attraverso l'attivazione di due motori - appunto uno per il movimento di Pan ed uno per il movimento di Tilt - Questa parte del programma no ho avuto modo ancora di testrarla, ma leggendo il manuale sembra che sia ancora in fase di sviluppo , comunque non appena avro' effettuato dei test su questa parte del programma, scrivero' una guida con unpost apposito.
Ho provato ad aumentare la qualita' delle immagini, auentando la grandezza delle immagini registrate attraverso la webcam. Come detto sopra, ho fatto dei test con due webcam, la meno definita ha al massimo una definizione di 640 x 480, mentre la Trust HD puo registrare immagini con una definizione di 1920 x 1080. A questo grado di definizione pero' ci sono dei problemi di "reazione" del sistema, che, probabilmente a causa dei limiti dei velocita' del microprocessore, non garantisce costantemente  una ottima fluidita' delle immagini, vengono registrate delle immagini corrotte o con dei disturbi come la perdita di righe di pixe. quindi direi che non sia il caso di spingersi a questa definizione. Gli stessi problemi, ma naturalmente con una intensita' inferiore, si verificano alla velocita' di 1024 x 768, mentre a 640 x 480 non ho incontrato nessun genere di problema riguardo alla qualita' delle immagini prodotte.
Una delle opzioni che ho modificato e'
" ffmpeg_timelapse_mode hourly "
che crea un file di Time Lapse con le immagini che riceve la telecamera e lo chiude ogni ora, invece che ogni giorno come risulta essere settato di default. In questo modo nella cartella che abbiamo scelto per contenere i file creati di TimeLapse, ci troveremo tanti file video creati dal programma ffmpeg uno per ogni ora di attivita' del nostro sistema. Per far in modo che i file non si sovrascivano l'uno sull'altro, cosa che accade con la configurazione di default, ho settato nell'apposita sezione dedicata ai nomi dei file creati, il nome dei file che contenga anche la data e l'ora di sistema, aggiungendo  all'istruzione
" timelapse_filename tlapse/%Y%m%d-timelapse "
il comando per inserire l'ora i minuti ed i secondi di sistema alla creazione del file %H%M%S- , cosi nella mia configurazione adesso il settaggio e' questo
" timelapse_filename tlapse/%Y%m%d-%H%M%S-timelapse "
Ho potuto effettuare anche dei test con i settaggi dei valori di contrasto luminosita' e brillantezza delle immagini percepite dalla cam, ma devo essere sincero, secondo me la soluzione migliore rimane quella di default. ( un po' come gli hamburger di MacDonald, hanno un sapore standard, ma, alla fine, restano i migliori!)
L'ho fatta lunga, se qualcuno ha necessita' informazioni piu' dettagliate sul'argomento mi contatti pure attraverso il sito e saro' felice di condividere quello che ho imparato durante i miei test.
Tecnogeppetto

Nessun commento: