Creare un sistema di videosorveglianza con Raspberry Pi - parte 2

preview-sorveglianza
Salve a tutti,
in questo articolo continuiamo con la creazione del nostro sistema di videosorveglianza home made. Se ancora non avete letto la prima parte introduttiva, potete farlo a questo indirizzo.
Oggi vedremo sia il modulo di detection di movimento sia il sistema di notifica che ci informerà in caso di intrusi.

Modulo di detection del movimento

Come già detto nel precedente articolo questo modulo dovrà individuare se nella scena ripresa dalla webcam c'è stato del movimento. Siccome il Raspberry non ha una potenza di calcolo capace di calcolare cose complesse come potrebbe essere un flusso ottico, la cosa più semplice che mi è venuta in mente di fare è una semplice sottrazione di frame successivi e calcolarci sora una qualche statistica.

Vediamo più nello specifico come funziona questo modulo. La webcam è accesa e sta riprendendo la scena. Prendiamo il frame e facciamo una sottrazione pixel a pixel con il frame all'istante precedente. Se vediamo l'immagine risultante da questa operazione, noteremo che vengono mostrati solo i pixel che hanno cambiato colore nella transizione dal frame al tempo t-1 e al tempo t. Questa differenza è ancora RGB perché la sottrazione avviene su tutti e tre i canali.
A questo punto l'immagine differenza viene trasformata in un'immagine greyscale per appiattire i tre canali ad un unico canale e infine si fa una sogliatura con un valore che ho scelto sperimentalmente per portare l'immagine greyscale ad una mappa binaria (immagine composta da soli pixel neri e bianchi).
OpenCV mette a disposizione una funzione che, data un'immagine black and white, restituisce il numero di pixel che non sono neri. Grazie a questa funzione possiamo discriminare se c'è stato movimento o meno nella scena con un semplice controllo sul numero dei pixel.
Va da sé che anche questo controllo deve essere aggiustato a mano in base a dove posizionerete la webcam e alla scena che andrete a monitorare.

Vediamo ora il codice che fa tutto questo. I dettagli implementativi sono descritti sotto forma di commento direttamente nel codice. La classe definita in camera.py serve per gestire le operazioni fatte sulla webcam mentre motionDetection.py è dove viene fatta la detection del movimento vera e propria.

Modulo di notifica

Una volta rilevato il movimento nella scena è essenziale mandarci una notifica in qualche modo.
Qualche settimana fa Federico ci ha mostrato come creare un bot su Telegram e quindi perché non approfittarne? Grazie a Telegram infatti, è possibile creare un sistema di notifica veloce e intuitivo. Inoltre le notifiche arrivano direttamente sul proprio smartphone.. cosa c'è di meglio?

Seguiamo le istruzioni dell'articolo su BotFather e creiamo quindi un nuovo bot. Ricordiamoci di prendere il TOKEN per accedere alle HTTP API una volta generato il bot.
Successivamente lanciare sempre nella chat di BotFather il comando /setcommands e selezionare il nostro bot qualora ve lo chieda.
Ora bisognerà inserire i comandi che a breve andremo ad implementare nel formato che ci viene richiesto:

Vediamoli più nel dettaglio. attenti è il comando che fa partire la videosorveglianza e quindi la notifica di movimento. Grazie a questo comando ci arriveranno degli ALERT testuali con timestamp che ci avvertiranno di un movimento rilevato. Questa opzione sarà attivata di default all'avvio del bot. riposo invece smette di rilevare il movimento e quindi non ci manderà più le notifiche testuali. instaon ci spedisce un frame ogni volta che rileva un movimento mentre instaoff disattiva questa funzionalità. instatest infine, permette di mandarci una istantanea a comando.

Il codice è piuttosto semplice ma c'è da notare una cosa importante. Ovviamente non tutti devono poter accedere a questo bot. Per privacy e sicurezza, infatti, è ragionevole che solo a noi sia concesso avere queste notifiche. Per questo viene implementato un controllo sull'ID utente di telegram. Non solo! Qualora un'altra persona voglia accedere al nostro sistema, una notifica con il suo nome, cognome e nome utente ci verrà recapitato 🙂

Per trovare il nostro ID utente lanciamo questo piccolo bot in python e stampiamo a console le info che ci serve sapere. Ricordate di mettere nella variabile TOKEN il codice che vi ha dato BotFather al momento della creazione del bot. Una volta fatto partire il bot, nell'apposita chat, inviamo un messaggio a caso e a console apparirà il dato che ci serve.

Una volta preso l'ID, lo possiamo sostituire al posto di ID_DA_SOSTITUIRE nel codice sottostante nel quale è già integrato la parte di motion detection. Le funzionalità vengono gestite attraverso il settaggio di flag globali.

Per oggi è tutto! Come sempre se avete bisogno di delucidazioni, se volete dare consigli o idee sul progetto, non esitate a scriverci un commento qua sotto. Prossimamente la terza parte... stay tuned!

Ingegnere Informatico e Ricercatore se compiace al Prodigioso Spaghetto Volante. Sono uno spartan racer, massimo esperto di serie tv, fotografo amatoriale e appena ne ho l’occasione preparo la valigia e parto

Creare un sistema di videosorveglianza con Raspberry Pi - parte 2 ultima modifica: 2016-11-22T11:52:18+00:00 da Andrea Salvi


Advertisment ad adsense adlogger