Baby Monitor – Video Streaming con Raspberry Pi

Nonostante il nome, la nuova fotocamera NoIR V2 per il Raspberry Pi non ha nulla a che fare con i film mafiosi degli anni '40. Ciò che la rende speciale non è una funzione aggiuntiva, ma piuttosto ciò che manca. Quasi tutte le fotocamere digitali sono progettate per catturare immagini dello stesso spettro della luce come un occhio umano normale, producendo foto e video realistici. Mentre le fotocamere possono visualizzare luce al di fuori di questo range, i filtri sono utilizzati per garantire che solo la luce desiderata raggiunga l'immagine finale

NoIR

La fotocamera NoIR fa quello che dice nel suo nome, a differenza della maggior parte delle fotocamere non ha alcun filtro per lo spettro infrarosso della luce. Questo rende le foto molto innaturali. La maggior parte del colore non è corretto e le superfici brillanti sono estremamente sbiadite. Eppure la fotocamera NoIR ha un vantaggio molto grande, è in grado di vedere in ambienti con scarsissima illuminazione, o catturare immagini in completa oscurità, utilizzando una sorgente di luce infrarossa invisibile. Le immagini risultanti potrebbero non essere esattamente da incorniciare ma sono molto più visibili rispetto a quelle riprese da una macchina fotografica standard nel buio (Video 1).

È possibile vedere un video e una raccolta di fotografie della fotocamera NoIR V2 sotto illuminazione a infrarossi nel buio più completo, ed anche una gamma di immagini diurne più artistiche.

Video 1: NoIR in funzione

Video Streaming

È estremamente utile per i moduli fotocamera usare il wireless di rete integrato sul Raspberry Pi 3 per lo streaming di video in diretta attraverso una rete. In questi casi ci sono due principali opzioni di configurazione di rete:

  • Il Raspberry Pi 3 può operare proprio come punto di accesso a cui i dispositivi si collegano direttamente, consentendogli di operare in modo indipendente da altre reti. Questa sarebbe la strada da percorrere se si vuole utilizzare un unico dispositivo come un vecchio telefono o tablet ad uso display per il video stream.
  • Collegare il Raspberry Pi 3 ad un router o access point wireless standard. Questo permette agli utenti di visualizzare il video streaming su uno smartphone o tablet, senza dover passare da una rete wireless ed una separata per lo streaming video. Tuttavia, se la rete WiFi domestica è molto utilizzata, avere il video streaming Raspberry Pi su di essa potrebbe causare problemi di congestione di rete e banda.

Baby Monitor

Combinando la visione notturna e le funzionalità di streaming wireless della fotocamera NoIR e Raspberry Pi 3, è stato progettato un sistema di baby monitor. È utile ai genitori per tenere sotto controllo un bambino che dorme con un feed video dal vivo su un telefono o tablet, con notifiche quando il bambino si sveglia e diventa inquieto. Per questo progetto si è preferito collegare il Raspberry Pi ad una rete standard. L'impostazione WiFi può essere effettuata utilizzando un terminale, ma è molto più semplice collegare un monitor HDMI e utilizzare l'ambiente desktop Raspbian. Impostare il Raspberry Pi per utilizzare una rete WiFi con l'icona di rete nella barra delle applicazioni. Per rendere più semplice la ricerca dell video stream, fare clic col destro sull'icona e impostate l'interfaccia wireless in modo da utilizzare un indirizzo IP statico (Figura 1).

Figura 1: Una visuale standard del modulo NoIR: giorno e notte

Figura 1: Standard camera vs Modulo NoIR: notte e giorno.

Aggiungere un case

Creare un case e montarlo presenta qualche ostacolo in questo progetto. Deve essere flessibile per consentire alla fotocamera di essere posizionata in modo tale da ottenere una buona inquadratura del bambino mentre dorme. Come tutti i moduli fotocamera, il dispositivo NoIR si collega al Raspberry Pi con un cavo largo da 16 mm. Inizialmente si è pensato di mettere la telecamera alla fine di un asta corta flessibile con la Pi in un case alla sua base. Ma c'è un problema: avere un qualcosa di piccolo che spunta fuori e che potrebbe entrare nella bocca di un bambino non è una buona idea. Si è fatto in modo che fosse abbastanza grande da evitare il rischio di soffocamento. La cosa migliore a tal proposito è stata quella di integrare la fotocamera e il Raspberry Pi insieme in un case unico e ruotare l'intera unità per ottenere l'angolo corretto.

Si è usato una struttura di plastica progettata per il collegamento di un GPS ad un parabrezza auto. A questa si è collegato un case ufficiale per Raspberry Pi3 montato al contrario. Un foro è stato praticato all'interno del coperchio del case e usato del nastro di montaggio per fissare il modulo telecamera all'interno, lasciando la lente leggermente in fuori. Il cavo corto è stato arrotolato intorno alla presa sul Raspberry Pi. Inoltre, alcuni fori sono stati praticati e montato due di questi LED a infrarossi nel coperchio. Successivamente, sono stati combinati in serie, e aggiunto la resistenza appropriata e ponticelli femmina per collegarli al terminale 5v sul connettore GPIO. È importante fare attenzione che i ponticelli non tocchino altri perni o la main board del Raspberry Pi.

Il supporto è stato attaccato ad un muro con adesivi senza l'uso di ventose poiché possono essere inaffidabili a lungo termine. Il case con la fotocamera interna è stato quindi rivolto verso il basso dalla parete sopra la culla, e può essere regolato per ottenere un angolo di visualizzazione ottimale (Figura 2).

Figura 2: Montaggio del modulo fotocamera e Raspberry Piu

Figura 2: Montaggio del modulo fotocamera e Raspberry Pi

Programmazione

Per installare e far funzionare il baby monitor si sono sperimentate alcune opzioni di programmazione. Python ha ampie librerie per l'interfaccia con entrambi i moduli di fotocamera standard e NoIR, incluse le opzioni di streaming di rete. Sebbene la programmazione per la fotocamera in Python sia ampiamente personalizzabile, utilizzando i comandi di trasmissione di socket server ci sono stati problemi significativi di latenza durante lo streaming di un feed HD su una rete. La fotocamera può anche essere interfacciata utilizzando i comandi del terminale di Linux standard e di scripting. È efficace per funzionalità di base, ma non è molto adatto per un programma complesso come quello necessario per questo progetto.

La soluzione scelta è la suite RPI Cam Web Interface. È molto flessibile con la configurazione, ma soprattutto manda in streaming live il video in diretta su una interfaccia web standard - ciò la rende compatibile con qualsiasi dispositivo smart con un browser web. Consente inoltre che il Raspberry Pi sia chiuso in modo corretto con un pulsante sull'interfaccia web. Nessuna preoccupazione per impostare la sicurezza sul video streaming poichè sarà visualizzabile soltanto su una rete WiFi criptata. La RPI Cam Web Interface tuttavia, supporta password di accesso rapido e una serie di autorizzazioni.

Prima dell'installazione, la telecamera deve essere attivata all'interno di Raspbian. Sotto Preferenze nel menu principale caricare il programma di configurazione Raspberry Pi e impostare l'opzione per abilitare la fotocamera. Con la fotocamera abilitata, l'installazione del software di interfaccia avviene incollando le seguenti righe in una finestra di terminale.

git clone https://github.com/silvanmelchior/RPi_Cam_Web_Interface.git

cd RPi_Cam_Web_Interface

chmod u x * .sh

./install.sh

In seguito si vedrà una finestra di dialogo con alcune opzioni. A meno che non si abbiano esigenze specifiche, premere Invio per avviare l'installazione con le impostazioni predefinite. Dopo il riavvio, l'accesso al software avviene inserendo l'indirizzo IP del Raspberry Pi in un browser. Può essere fatto sul Pi stesso o su qualsiasi dispositivo collegato alla stessa rete (Figura 3).

Figura 3: Cam Control

Figura 3: Cam Control

Alcuni test di risoluzione video, bitrate e framerate, sono state eseguite per ottenere prestazioni ottimali su una rete wireless. Dispositivi come questo sono spesso collocati lontano dal router e attraverso un paio di muri, quindi la potenza del segnale potrebbe non essere la migliore.

  • Risoluzione Video: 720x1280 - Si è trovata la risoluzione ideale, 720p HD. Diversamente dal solito, si è usato un video frame 720x1280 verticale per riempire lo schermo di uno smart phone usato in modalità verticale.
  • Video fps: 20 - Il valore di default di 25 fotogrammi al secondo è un pò eccessivo per osservare un bambino che non si muove molto durante il sonno. Abbassando il frame rate a 20 si permette comunque agli spettatori di vedere se il bambino si muove ma nello stesso tempo si lascia libera la rete.
  • Luminosità: 60 - L'aumento della luminosità sfoca un po' l'immagine, ma dà maggiore chiarezza in condizioni di scarsa luce.
  • Modalità esposizione: nightpreview - La NoIR V2 è buona in condizioni di scarsa luce, ma impostando l'esposizione a nightpreview, definisce un pò di più l'immagine.
  • Qualità immagine: 100, Qualità anteprima: 100 - Massimizzare la qualità dell'immagine e la qualità dell'anteprima non ha avuto alcun impatto sulle prestazioni di streaming, ma ha reso la chiarezza complessiva leggermente migliore. Impostare la larghezza di anteprima a 720 permette al video live di avere qualità totale.
  • Modalità di Rilevamento Movimenti: esterno

Si è cambiato il titolo di default in qualcosa di un po' più appropriato - Baby Cam, lasciando invariati i parametri di ore, minuti, secondi e data. Il conteggio costante dei secondi indica che il feed video è dal vivo e non ha funzionato male. Alcune impostazioni sono state modificate manualmente al di fuori dell'interfaccia utente web, attraverso modifiche al file / etc / raspimjpeg.

  • Aggiungendo la riga 'fullscreen true' alla fine del file si permette alla pagina index della fotocamera di interfacciarsi di default a schermo intero, piuttosto che mostrare i pulsanti di opzione.
  • La modifica della riga pre esistente motion_detection da false a true rende il sistema di rilevamento del movimento automatico all'avvio.

Rilevamento del movimento

All'interno del software sono state implementate alcuni script per inviare notifiche quando il bambino inizia ad essere agitato durante il sonno. La RPi Cam Web Interface ha algoritmi di rilevamento del movimento integrati che ben si adattano a rilevare anche il movimento più leggero. Si è provato a sintonizzare, attraverso tentativi ed errori, ed è stato risolto con le seguenti impostazioni, configurate sotto il pulsante 'Edit motion setting' nella pagina di indice di default.

  • On_event_start: python /etc/home/pi/alert.py - Quando viene rilevato un movimento verrà eseguito lo script python per l'invio di una notifica.
  • Soglia 2100 - Questa è difficile. La sensibilità di rilevamento del movimento è definita da un numero compreso tra 1 e 2147483647. Per ogni scenario può essere diverso a seconda della sensibilità richiesta. Avere un numero troppo alto porta ad innescare notifiche anche per movimenti impercettibili. 2100 è sembrato il numero adatto.
  • Lightswtich: 55 - Utile quando il bambino dorme con le tende leggermente aperte in una giornata nuvolosa. Questa opzione impedisce che il sole in movimento dietro alle nuvole porti a falsi inneschi a causa del cambiamento di luce.
  • Minimum_motion_frames: 3 - Il numero di fotogrammi consecutivi di cui il movimento ha bisogno prima che il sensore scatti. Un bambino non si muove come Flash, avere un numero poco più alto di 1 permette di non avere falsi inneschi.

Sotto le impostazioni di pianificazione si sono eliminate le box sotto Motion Start e Motion Stop. Queste sono usati quando la registrazione avviene a rilevamento di un movimento. Per un baby monitor si richiede un live alert, non una registrazione video.

Purtroppo il motion service può avere complicazioni durante l'esecuzione di alcuni comandi. Navigando sulla rete, si è scoperto che si tratta di un bug che molti utenti hanno riscontrato senza grandi soluzioni. Se si scopre che lo script di alert non è in esecuzione, bisogna avviare il programma di movimento di modalità daemon dalla riga di comando per permettere un funzionamento corretto. È un aggirare il problema piuttosto che che una soluzione, ma può essere effettuato automaticamente ad ogni avvio di Raspberry Pi. Modificare bashrc tramite il comando 'sudo nano .bashrc' e aggiungere la riga' motion -n 'alla fine del file e il problema dovrebbe essere evitato (Video 2).

Video 2: Raspberry Pi NoIR Camera

L'invio di notifiche

Il parametro on_motion_start è stato utilizzato per attivare ed eseguire uno script python che invia notifiche. Vi è una gamma di diversi fornitori che offrono applicazioni su iOS e Android per ricevere le notifiche da dentro uno script Python. Si è usato Instapush, anche se altri servizi funzionano altrettanto bene. Basta iscriversi al loro sito web, creare una nuova applicazione e poi incollare il codice fornito con l' app e i parametri del codice segreto in uno script python.

L'API Instapush deve anche essere installato sul Raspberry Pi, semplicemente con la seguente riga in una finestra di terminale.

sudo pip install instapush

Il seguente script è stato posizionato in / home / directory Pi e nome file 'alert.py'

import RPi.GPIO as GPIO
import time
import os.path
from instapush import Instapush, App
GPIO.setmode(GPIO.BCM)
GPIO.setup(4, GPIO.IN, pull_up_down = GPIO.PUD_UP)

input_state = GPIO.input(4)
if input_state == False and os.path.isfile('active') == False:
open('active', 'a')
app = App(appid='xxxxxxxx', secret='xxxxxxxx')
app.notify(event_name='Baby_Monitor', trackers={ 'Baby': 'Louis'})
time.sleep(600)
os.remove('active')
  • Le righe da 1 a 4 importano i moduli necessari per lo script.
  • Le righe 5 - 7 imposta il sistema di numerazione dei pin GPIO sul Raspberry Pi, seleziona un numero di pin e imposta l'uso come un trigger switch e poi dà la variabile 'input_state'
  • La riga 8 è un'istruzione if per verificare due condizioni:
    1. Se l'interruttore collegato tra GPIO, pin 4 e pin di massa è attivo. E' stato inserito un ponticello per collegare il pin 4 al pin di massa vicino. La rimozione del ponticello disattiva l'invio di notifiche.
    2. Se un file chiamato 'active' è nella directory corrente. Ciò serve per assicurare che le notifiche vengano inviate solo una volta ogni 10 minuti per evitare un enorme flusso di avvisi inviati consecutivamente.
  • La riga nove 9 crea un file vuoto 'active' nella directory corrente.
  • Le righe 10 e 11 sono il codice Instapush per attivare l'invio di notifiche.
  • La riga 12 attende 600 secondi, o 10 minuti.
  • La riga 13 elimina il file 'active'.

 

Figura 3: RAspberry PI CAM

Figura 3: Esempio di applicazione della Raspberry PI CAM

Ultime riflessioni

La fotocamera NoIR V2 (Figura 3) è un ottimo modo per ottenere immagini nitide in condizioni di scarsa illuminazione, e la maggiore fedeltà di V2 fornisce immagini e video di grande qualità. Oltre al monitoraggio dei bambini che dormono, la combinazione di Interfaccia, macchina fotografica NoIR e un Raspberry Pi 3 può dar vita ad un sofisticato sistema di telecamere di sicurezza. Oltre all'invio di notifiche, si potrebbe aggiungere al sistema un relè che suoni un allarme, accenda le luci in una stanza o blocchi una porta con un solenoide. Quasi tutto ciò che la Raspberry Pi è in grado di fare può essere innescato dal rilevamento di movimenti. Inoltre, l'intera unità è più piccola, più economica ed offre una maggiore fedeltà rispetto a molti sistemi di sorveglianza in commercio. Combinandola con una grande fonte di luce infrarossa, ad esempio una matrice di LED, la fotocamera NoIR V2 potrebbe visualizzare una vasta area nel buio assoluto.

Link

Articolo originale: https://www.element14.com/community/community/raspberry-pi/raspberrypi_projects/blog/2016/04/25/noir-v2-video-streaming-baby-monitor

 

 

Una risposta

  1. Maurizio Di Paolo Emilio Maurizio 10 luglio 2016

Scrivi un commento