community italiana di domotica personale
 
Realizzare un NVR (Network Video Recorder) per videosorveglianza con motionEye (parte 2)

Realizzare un NVR (Network Video Recorder) per videosorveglianza con motionEye (parte 2)

SCOPI DEL PROGETTO:
  • Realizzare un sistema di videosorveglianza personale con registrazione continua / a rilevazione movimento tramite il software “motion” e il frontend web “motionEye”
  • Livello di difficoltà: medio
  • Costo: variabile in base all’hardware in uso
CONCETTI AFFRONTATI:
  • Configurazione software
COMPONENTI SOFTWARE UTILIZZATE:
COMPONENTI FISICI UTILIZZATI:
  • In base a quelli scelti e utilizzati nella realizzazione della “parte 1” (installazione e prima configurazione)
PROGETTO MAGGIORMENTE INDICATO PER:

Linux - Raspbian - Home Assistant HASSIO

NOTE E DISCLAIMER
  • qualsiasi eventuale modifica agli impianti domestici dev'essere progettata e realizzata SOLO da personale qualificato;
  • qualsiasi modifica non prevista attuata in proprio è a propria responsabilità personale nonché a proprio rischio e pericolo (i contenuti della presenta pagina hanno infatti puro scopo didattico) e fa decadere garanzia, omologazioni e certificazioni di qualità; dei dispositivi interessati;
  • tutte le tecniche descritte si intendono applicate a software e firmware aggiornati alle ultime versioni disponibili;
  • gli articoli di inDomus sono totalmente indipendenti e non sponsorizzati. Se mai questo cambiasse, verrà segnalato chiaramente sulle pagine oggetto di sponsorizzazione;
  • questa pagina è materialmente scritta e manutenuta da più individui: non ci si aspetti né si pretenda un supporto personale. In caso di difficoltà, chiedere supporto alla community sul nostro forum o sulla nostra chat;
  • se hai bisogno di orientarti, c'è la mappa.
Revisione progetto: 1.3

videosorveglianza domotica

Abstract

Come abbiamo visto nella “parte 1” di questo progetto, realizzare in proprio un NVR (Network Video Recorder) – ovvero un sistema di videosorveglianza domestico – non è né particolarmente costoso né complicato se si utilizzano componenti di mercato affiancati da software per lo più gratuiti. Nello specifico, nella prima parte del progetto abbiamo visto come installare il software “motionEye” al fine, appunto, di dotarci di un sistema versatile e abbastanza semplice da usare.

In questa seconda parte vedremo come configurare il nostro NVR a partire dall’aggiunta di un o più telecamere fino ad arrivare alla configurazione del motore per il riconoscimento del movimento, utile a videoregistrare eventuali eventi di questo tipo (sia localmente che su hard disk in rete o sul Cloud) sia ad esser notificati in merito.

Si parte

Assunti

Per utilizzare la presente seconda parte del progetto si assume che:

  • motion & motionEye siano correttamente installati e funzionanti (indipendentemente da dove e come) sulla base delle indicazioni della parte 1 del progetto;
  • si disponga di una IP Cam già configurata in rete locale, oppure una telecamera locale collegata direttamente al computer sul quale è in esecuzione l’NVR.

Aggiungere una telecamera

Il primo passo da compiere dopo l’iniziale installazione dell’NVR è, ovviamente, quello di integrare una o più telecamere alla sua configurazione.

N.b. In merito a quali telecamere è possibile integrare a motionEye far riferimento al paragrafo che tratta specificamente questo tema.

Le tipologie di telecamere supportate da motionEye sono:

  • telecamere basate su Video4Linux 2 (V4L2);
  • telecamere locali (MMAL);
  • generiche telecamere di rete (Network Camera);
  • telecamere remote erogate da un altro NVR basato su motionEye;
  • telecamere Motion JPEG (MJPEG).

Nella stragrande maggioranza dei casi si utilizzano IP Cam di mercato che, per essere integrate con questo NVR, sfruttando la terza voce, “Network Camera” – sebbene in alcuni casi vengano certamente comode anche le altre quattro alternative.

Ora, prima di avventurarsi nella configurazione su motionEye di una nuova “Network Camera” (ovvero il contesto che approfondiremo), ciò di cui l’utente ha necessità è conoscere l’indirizzo di streaming della propria IP Cam.

Non si tratta di nulla di particolarmente complesso, ma comunque di un parametro dal quale non si può prescindere: senza questa informazione non sarà possibile integrare la IP Cam a motionEye. Se si è inesperti, per capire quale sia questo indirizzo può venire in aiuto una guida scritta inizialmente allo scopo di integrare le IP Cam presso altri contesti – ma ugualmente utile in questo.

A mo’ d’esempio, l’indirizzo di streaming della IP Cam utilizzata da noi per questo progetto (una YI Dome modificata con firmware yi-hack-v4) è rtsp://192.168.1.200/ch0_0.h264.

Si tratta ovviamente solo di un esempio: ogni IP Cam ha il proprio indirizzo.


Una volta scoperto (e testato!) il proprio flusso saremo pronti a cliccare su “You have not configured any camera yet. Click here to add one” per aprire il wizard di integrazione nuova telecamera:

motionEye - Aggiunta IP Cam

Una volta selezionato “Network Camera“, il wizard chiederà di inserire l’indirizzo di streaming di cui sopra nonché eventuali credenziali di accesso allo stesso (che potrebbero in realtà già essere incluse nell’indirizzo stesso, in caso non compilare i campi):

motionEye - Aggiunta IP Cam - Network Camera

Nel campo “Camera” motionEye consente di scegliere – quando disponibili – tra le varie modalità di connessione. In caso la scelta sia tra TCP e UDP, scegliere sempre il primo.

Una volta terminata la configurazione, cliccare su “OK” per terminare l’integrazione della IP Cam al proprio NVR. Se tutto andrà bene, da lì a pochi attimi si aprirà una finestra che visualizzerà il contenuto dello stream video (a un fotogramma al secondo, ma quessto solo per la visualizzazione sul browser: il flusso video arriva comunque all’NVR per intero, quale esso sia).

Configurare motionEye

È quindi il momento di perfezionare la configurazione della IP Cam. Tutte le impostazioni che seguono sono relative alla telecamera selezionata in alto a sinistra nel menu dell’interfaccia web di motionEye.

In realtà le prime due voci (“Preferences” e “General Settings“) sono relative a motionEye (globalmente) e non hanno bisogno di molte spiegazioni: si tratta di impostazioni legate alla visualizzazione dell’interfaccia e poco altro. Consentono infatti di organizzare in righe/colonne la visualizzazione delle varie telecamere integrate, regolarne la risoluzione e il framerate di visualizzazione, le password.

Ciò che è davvero interessante – ed è specifico per ogni telecamera integrata a motionEye – sono le impostazioni a seguire.

Vetrina Promo

Video Device

Presso la sezione “Video Device” si perfeziona la configurazione dello stream video. Sono disponibili vari campi:

motionEye - Video Device

Il primo, “Camera Name“, ovviamente consente di impostare un nome da associare alla telecamera; seguono campi non modificabili, fino ad arrivare ad “Automatic Brightness“, switch che consente di attivare/disattivare la regolazione automatica della luminosità d’immagine. Se la telecamera supporta già di per sé tali automatismo, lasciare disattivato questo parametro.

ATTENZIONE: tutte le impostazioni di motionEye hanno effetto sulle prestazioni generali dell’NVR e del computer che lo gestisce. Nel caso dei quelle relative alla/alle IP Cam, è importante se non mandatorio evitare assolutamente di impostare una risoluzione, una rotazione e un framerate diversi da quelli nativi del flusso in ingresso. Questo perché, facendo diversamente, si innesca una inevitabile rilelaborazione dello stesso, con impatto (importante!) sulle prestazioni.

Video Resolution” e “Frame Rate” consentono di regolare la risoluzione e il framerate dello stream video, non a livello di telecamera (che continuerà sempre ad erogare quel che sa erogare per come sa farlo) ma a livello dell’NVR, ovvero di come esso tratterà il flusso video. Il consiglio è quello di regolare valori identici a quelli dello stream video in ingresso: impostare valori diversi innesca una rielaborazione del flusso video già alla ricezione dello stesso da parte dell’NVR (prima ancora di applicare le logiche di rilevazione movimento che vedremo a seguire), con le conseguenze spiegate nel box qui sopra.

Il box “Extra Motion Options” consente di aggiungere parametri aggiuntivi (non regolabili dall’interfaccia web) dell’applicativo “motion”, il quale sta sotto il cofano di motionEye. Tutti i parametri eventualmente utilizzabili sono elencati qui.

Infine, cliccando sullo switch ON/OFF in alto a sinistra nel riquadro, la telecamera viene attivata/disattivata.

File Storage

In questa sezione si determina il comportamento di motionEye in termini di salvataggio di filmati e istantanee su filesystem, esso sia del disco locale, di un disco esterno, di un disco di rete o sul cloud (cosa e come registrare lo vedremo in seguito).

motionEye - File Storage

Vediamo i vari campi:

Storage Device / Root Directory Si tratta della voci che permettono di decidere dove salvare i contenuti.
Su “Storage Device” (selezionando “Custom Path“) è possibile scegliere un percorso specifico impostato poi nella voce “Root Directory“. Se si vuole utilizzare un disco locale collegato al computer è necessario collegarlo prima dell’avvio di motionEye e poi selezionarlo nella lista che appare nell’elenco “Storage Device“. Se si vuole utilizzare un percorso di rete (per esempio una condivisione Samba/CIFS di rete su NAS, o altro) è necessario impostare “Storage Device” su “Custom Path” e nel campo “Root Directory” impostare il percorso.
Disk Usage Indica, rispetto al disco scelto (che sia un “Custom Path” o un disco locale), la percentuale di spazio complessivamente allocato (non solo quello relativa ai file prodotti da motionEye, ma la complessiva).
Upload Media Files Questa voce, se impostata a “ON“, consente di copiare i contenuti salvati da motionEYE anche su altre location, scegliendo inotre quali tipologie (video e/o foto). È possibile scegliere FTP/SFTP, Dropbox, Google Drive, Google Photo, Dropbox.
Call a Web Hook Questa voce permette di effettuare una chiamata HTTP in GET o POST ogni qual volta un nuovo contenuto (video e/o foto) viene registrato.
Run a Command Questa voce permette di eseguire un comando del sistema operativo che ospita motionEye ogni qual volta un nuovo contenuto (video e/o foto) viene registrato.

Text Overlay

Questa sezione permette, se attivata tramite lo switch in alto a sinistra, di sovrapporre del testo con delle informazioni aggiuntive (nome della telecamera, data e ora, numero di frame variati ecc.) sugli stream video visibili tramite l’interfaccia web di motionEye.

motionEye - Text Overlay

Il parametro “Text Scale” permette di regolare la dimensione di tale testo, mentre gli altri due consentono di scegliere quali informazioni posizionare e dove.  Come vedremo, risulta essere una funzione particolarmente utile in fase di fine tuning delle funzionalità di rilevazione movimento.

Video Streaming

Questa sezione, quando abilitata (il solito switch ON/OFF in alto a sinistra) consente di “ritrasmettere” sulla rete il flusso video ricevuto dalla telecamera.

motionEye - Video Streaming

Si tratta di una funzione particolarmente apprezzata quando, per esempio, il nostro HUB personale non supporta l’integrazione diretta del flusso video prodotto dalla nostra telecamera, o quando si vuoi redirigere il flusso vero qualche altro host della nostra rete. La cosa interessante sta anche nella possibilità di poter variare il framerate (campo “Streaming Frame Rate“, la qualità complessiva del flusso video, al fine di ridurre il traffico di rete (“Streaming Quality“) nonché il dimensionamento (“Streaming Image Resizing“).

È inoltre possibile scegliere la porta presso la quale esporre il flusso video, scegliere un qualche tipo di autenticazione, se ottimizzare il flusso video in base alla staticità dell’immagine (“Motion Optimization“). Una volta impostati questi parametri, cliccando sui link sottostanti l’interfaccia fornirà i percorsi presso i quali il flusso viene ritrasmesso (il primo non è un flusso bensì l’ultima istantanea raccolta dalla telecamera).

N.b. Questa funzionalità ovviamente consuma risorse computazionali. Se non necessaria, ricordarsi sempre di disabilitarla.

Still images

Questa sezione permette, se attivata con lo switch in alto a sinistra, di scattare delle fotografie a partire dallo stream video in arrivo dalla telecamera; tali istantanee vengono poi salvate presso il percorso impostato alla voce “File Storage“. utilizzando come nomenclatura del nome quella impostata nel campo “Image File Name“.

motionEye - Still images

Le modalità di scatto sono svariate. Agendo sul menu “Capture Mode” è possibile scegliere se scattare:

Motion Triggered ad ogni rilevazione movimento ogni fotogramma considerato nella fase di rilevazione viene salvato
Motion Triggered (One Picture) ad ogni rilevazione movimento un fotogramma, il primo, viene salvato
Interval Snapshot arbitrariamente, salvando un fotogramma ogni tot secondi. Impostazione particolarmente utile quando si vogliano realizzare dei filmati time-lapse
All frames sanvando tutti i fotogrammi ricevuti dal flusso video (usare con grande cautela!)
Manual manualmente, direttamente dall’interfaccia motionEye

Infine, la voce “Preserve Pictures” consente di impostare quale sia la profondità storica degli scatti salvati da mantenere sullo storage: impostando per esempio “For One Month” tutti i file più vecchi di un mese verranno automaticamente cancellati, e così via.

Movies

Analogamente alla sezione “Still Images” di cui sopra, questa sezione permette (sempre se attivata con lo switch in alto a sinistra), di salvare dei filmati a partire dallo stream video in arrivo dalla telecamera; tali video vengono poi salvati presso il percorso impostato alla voce “File Storage” utilizzando come nomenclatura del nome quella impostata nel campo “Movie File Name“.

motionEye - Movies

Impostando lo switch “Movie Passthrough” a “ON“, motionEye si limita a salvare il flusso nel formato in cui lo riceve, al più abbassandone la qualità laddove il campo “Movie Quality” sia regolato a un valore inferiore al 100%. A “OFF“, invece, è possibile scegliere tra vari formati (attenzione: anche questa opzione consuma occasionalmente molte risorse). Se “Movie Passthrough” viene impostato a “OFF“, è possibile scegliere il codec video di export del filmato.

Le modalità di registrazione sono due. Agendo sul menu “Recording Mode” è possibile scegliere se salvare:

Motion Triggered innescando la registrazione solo a fronte di una rilevazione di movimento
Continuous Recording continuamente

La prima opzione (“Motion Triggered“) prevede la regolazione di massima durata (“Maximum Movie Lenght“): se impostata a “0” è indefinita (dura quanto dura l’evento di rilevazione movimento), altrimenti per il massimo di secondi indicato dalla configurazione.

Anche la seconda opzione (“Continuous Recording“) prevede la regolazione di massima durata, ma qui il senso è diverso: dato che la registrazione in questo caso è ininterrotta, questo parametro decreta ogni quanto “spezzettare” in più file la registrazione continua.

Infine, la voce “Preserve Movies” consente di impostare quale sia la profondità storica dei video salvati da mantenere sullo storage: impostando per esempio “For One Month” tutti i file più vecchi di un mese verranno automaticamente cancellati, e così via.

Motion Detection

Si tratta della sezione forse più importante dell’NVR, dato che il sistema è concepito, fondamentalmente, per la videosorveglianza.
Le impostazioni di questa sezione, quando attiva (il solito switch in alto a sinistra), determinano quali siano le condizioni per le quali, in base all’analisi del flusso video, si possa dichiarare che “ci sia del movimento davanti alla telecamera”, dando vita a un evento di rilevazione.

Il tema è ampissimo, tanto da essere spiegato in dettaglio nel paragrafo a seguire “Come regolare la rilevazione di movimento“.

motionEye - Motion Detection

In questa sezione si trovano i seguenti parametri fondamentali:

Frame Change Threshold La percentuale dei fotogrammi che deve variare affinché scatti la rilevazione, quando non è attivo il campo “Auto Threshold Tuning“.
Maximum Change Threshold La quantità massima di pixel che, se variati, non innesca più la rilevazione, quando non è attivo il campo “Auto Threshold Tuning“.
Auto Threshold Tuning Auto-regolazione di soglia di innesco.
Auto Noise Detection Auto-regolazione della riduzione del disturbo di segnale.
Noise Level Percentuale di disturbo del segnale, quando non è attivo il campo “Auto Noise Detection“.
Light Switch Detection La percentuale di pixel variati oltre la quale l’evento viene considerato come cambio repentino di luminosità.
Despeckle Filter Filtro di riduzione del rumore video.
Motion Gap Quantità di secondi che devono trascorrere prima che il motore di riconoscimento del movimento si “armi” nuovamente dopo una rilevazione.
Captured Before Quanti fotogrammi salvare (come “Still Images” o “Movies“) a monte dell’inizio un evento di rilevazione.
Captured After Quanti fotogrammi salvare (come “Still Images” o “Movies“) alla fine di un evento di rilevazione.
Minimum Motion Frames Quanti fotogrammi sequenziali devono avere le caratteristiche di rilevazione movimento affinché si inneschi, effettivamente, l’evento.
Mask Attiva/disattiva il mascherino.
Mask Type Tipologia di mascherino (automatico o modificabile a mano).
Show Frame Changes Attiva/disattiva la presenza, nell’angolo in alto a destra, dell’indicatore di pixel variati rispetto al fotogramma precedente (prevede che “Text Overlay” sia attivo).

Notification

Si tratta della sezione che consente di innescare delle azioni di notifica a fronte di ogni evento di rilevazione movimento, in base ovviamente alle impostazioni che eventualmente lo determinano viste nella sezione precedente.

motionEye - Motion Notification

Sostanzialmente le tipologie di notifica sono quattro:

Send an Email Per inviare, alla rilevazione di movimento, una mail. I campi sono tipicamente quelli necessari allo scopo: server, autenticazione, crittografia, se includere degli scatti di anteprima oppure no.
Call A Web Hook Voce utile a innescare un evento di pubblicazione HTTP GET o POST a fronte di un evento di rilevazione movimento. Particolarmente usato in abbinamento a strumenti come IFTTT o come gli HUB personali.
Run A Command Questa voce permette di eseguire un comando del sistema operativo che ospita motionEye ogni qual volta un nuovo evento di rilevazione movimento viene innescato.
Run An End Command Questa voce permette di eseguire un comando del sistema operativo che ospita motionEye ogni qual volta termina un evento di rilevazione movimento.
ATTENZIONE: Il meccanismo di notifica è particolarmente utile – specialmente utilizzando “Call a Web Hook” o “Run a A /End Command” – per integrare le telecamere a mo’ di sensore di movimento sui propri HUB personali. All’integrazione in questo senso con l’HUB Home Assistant abbiamo dedicato una guida ad hoc.

Working Schedule

L’ultima sezione nonché la più semplice da spiegare: consente di impostare in che giorni e in che orari l’NVR debba essere operativo nel rilevare eventuali movimenti (con tutto quel che ne consegue in termini di videoregistrazioni).

motionEye - Working Schedule

Regolare la rilevazione di movimento

motionEye è un ottimo strumento, ma per utilizzarlo al meglio bisogna capire come funzioni. Una configurazione frettolosa non porta, solitamente, alcun valido risultato, portando l’utente a colpevolizzare il software quando invece il problema sta nell’uso corretto dello stesso.

Capire come regolare le impostazioni relative alle proprie telecamere non è difficile, ma prevede pazienza e dedizione per un tempo limitato ma necessario.

N.b. Tutte le considerazioni che seguono danno per scontato l’attivazione di “Text Overlay” e di “Show Frame Chages” nella sezione “Motion Detection“: si tratta di un piccolo trucchetto utile a regolare le impostazioni.

Come funziona

In primis bisogna aver chiaro come funzioni il processo di rilevazione del movimento. Le sezioni relative alla configurazione di motionEye che contribuiscono a tale processo sono essenzialmente “Video Device” e “Motion Detection“.

Il processo è il seguente:

  • il flusso arriva a motionEye;
  • il flusso viene rielaborato in base alle impostazioni di “Video Device” (se sono identiche al quelle del flusso stesso, esso non viene manipolato);
  • il flusso passa al motore “motion”, regolato in base alle impostazioni “Motion Detection” e, fotogramma dopo fotogramma provvede in sequenza:
    • se è attivo un mascherino, ad applicarlo;
    • se attivi, ad applicare i filtri anti-rumore (sia il “Despeckle Filter” che il “Noise Filter“);
    • a misurare il numero di pixel variati rispetto al fotogramma precedente;
    • se il valore è nel range (quindi tra “Frame Change Threshold” e “Maximum Change Threshold“), il fotogramma viene considerato come “in movimento”;
    • si passa al fotogramma successivo ricominciando il giro, e se anch’esso è “in movimento”, viene verificati quanti siano stati i fotogrammi “in movimento” in sequenza e, se tale valore è superiore a quello dell’impostazione “Minimum Motion Frames“, si innesca l’evento di “movimento rilevato”.

Qualora l’evento si inneschi, di conseguenza si innescano a cascata le eventuali altre impostazioni, ovvero quelle legate al salvataggio dei filmati (“Movies“) e/o delle fotografie (“Still Images“) presso lo storage predeterminato (“File Storage“), innescando infine eventuali notifiche (“Notifications“).

Strategie di configurazione

In primis è necessario sapere qual è il numero massimo di pixel elaborati, per ogni fotogramma, dal motore “motion”. Per saperlo basta guardare la propria impostazione “Video Device“: se si sta usando una telecamera in risoluzione impostata, diciamo, a 1280×720, il numero massimo di pixel sarà dato dalla moltiplicazione:

1280 x 720 = 921.600

Le telecamere ovviamente si intendono fisse, non mobili, pertanto in situazione di quiete (nessun movimento di alcun tipo) il numero di pixel variati da un fotogramma e quello successivo dovrebbe essere 0. Teoricamente, perché così non è mai.

Impostando “Motion Detection” senza alcuna elaborazione della immagine, come segue:

motionEye - Motion Detection - Senza filtri

si noterà, nell’immagine della telecamera, un numero di pixel variati, fotogramma dopo fotogramma, piuttosto alto.
Nel caso dell’immagine (1280×720) d’esempio:

motionEye - Motion Detection - Senza filtri - Dashboard

il numero di pixel variati è altissimo, (quasi il 100% di 921.600 pixel) di malgrado l’immagine sia abbastanza immobile. Il perché è spiegato dal “rumore di fondo”: i pixel, anche impercettibilmente, cambiano, e il motore rileva la cosa come variazione.

L’obiettivo primario, quindi, è quello di portare più vicino allo 0 possibile il numero di pixel variati quando l’immagine è in stato di quiete. Per farlo useremo sia un mascherino che i filtri.

MASCHERINO E FILTRI

Rimanendo nel solco dell’esempio dell’immagine di cui sopra, è evidente che ci siano di per sé degli elementi di disturbo, come gli alberi mossi dal vento e il traffico veicolare in strada. Per risolvere il problema useremo lo switch “Mask” con “Mask Type” impostato a “Editable“. Cliccando su “Edit” andremo a selezionare quale parte dell’immagine venga esclusa dal processo di valutazione del movimento:

motionEye - Motion Detection - Mask - Dashboard

Successivamente andremo ad attivare sia il “Despeckle Filter” che il “Noise Filter“: mentre il primo prevede un’impostazione ON/OFF, il secondo permette di impostare un valore percentuale (anche automatico, volendo). Noi imposteremo come segue:

motionEye - Motion Detection - Mascherino e filtri

Una volta attuate le modifiche, immediatamente il numero di pixel variati da fotogramma a fotogramma varierà di conseguenza, portandosi molto vicino allo 0 (o proprio a zero):

motionEye - Motion Detection - Mascherino e filtri - Dashboard

A questo punto la camera è da considerarsi calibrata.

REGOLAZIONE MOVIMENTO

Ora è possibile configurare, finalmente, la sensibilità al movimento tramite i parametri “Frame Change Threshold” e “Maximum Change Threshold“.

Il numero di pixel presi in analisi dal motore non è più quello iniziale: ricordiamoci che la valutazione viene fatta a valle dell’applicazione di mascherino, pertanto tale mascherino, quando applicato, riduce il numero di pixel. Nel caso dell’immagine d’esempio il mascherino copre circa la metà dell’immagine, pertanto il numero di pixel utili sarà all’incirca:

921.600 / 2 = 460.800

Un’altra considerazione importante va fatta: come deve comportarsi l’immagine se moltissimi pixel cambiano improvvisamente tutti assieme, malgrado mascherino e filtri? Capitare, capita: immaginiamo nel caso di una telecamera da esterno durante il passaggio di una nuvola che cambi velocemente la luminosità dell’immagine, oppure l’attivazione automatica dei LED notturni a una cert’ora. Vogliamo dunque indicare a “motion” di non considerare come movimento un cambiamento repentino di più di 2/3 dei pixel, ovvero:

(460.800 / 3) * 2 = 307.200

A questo punto, arrotondando, imposteremo 300.000 come valore del campo “Maximum Change Threshold“.

N.b. L’uso del parametro “Maximum Change Threshold” fa sì che se la telecamera venisse improvvisamente oscurata (da un panno, o altro) il movimento non verrebbe rilevato, pertanto si consiglia di valutare con attenzione se sia il caso di utilizzarlo o meno. In alternativa per evitare falsi positivi a fronte di cambiamenti repentini di luminosità, parametro “Light Switch Detection“, dal canto suo, dovrebbe (usiamo il condizionale perché i test hanno dato risultanze contraddittorie) dovrebbe far sì che, se una data % di pixel variasse improvvisamente luminosità, tale evento verrebbe escluso dalla rilevazione di movimento.

Imposteremo finalmente la (cruciale) soglia di pixel variati (oltre la quale il fotogramma venga considerato “in movimento”) tramite il cursore “Frame Change Threshold“. Ovviamente tale percentuale è applicata ai “pixel rimanenti” (i 460.800 dell’esempio) e più viene regolata alta, più l’NVR sarà “sensibile” nel rilevare movimenti.

Infine, regoleremo “Minimum Motion Frames“: quanti fotogrammi taggati come “in movimento”, uno di seguito all’atro sequenza, innescano il vero e proprio evento “movimento”? Tutto è anche legato al numero di fotogrammi al secondo (framerate) della telecamera: se vengono elaborati 20 fotogrammi al secondo, impostare questo campo a 20 significherà che il movimento verrà rilevato se consecutivo entro un secondo; impostandolo a 10, entro mezzo, e così via.

Una volta salvate le impostazioni, il meccanismo di rilevazione del movimento per la telecamera sarà finalmente operativo.

Considerazioni finali

Il motore “motion” funziona piuttosto bene, ma il più delle volte necessita di un certo tempo e un po’ di pazienza per esser messo a punto. Non scoraggiatevi: le tecniche di cui sopra, se seguite in modo puntuale, aiutano a trovare la quadra rispetto alla sensibilità della propria o delle proprie telecamere, così da ottenere una rilevazione del movimento molto precisa e puntuale.

Importantissimo è arrivare – come spiegato nella prima parte della spiegazione delle regolazioni – a ridurre il più possibile il numero di pixel considerati (erroneamente, ma senza colpa) variati da fotogramma a fotogramma: partire infatti da una configurazione che tenda allo zero su questo parametro è garanzia di un buon risultato finale.

La soglia che innesca la rilevazione movimento (“Frame Change Threshold“) è regolabile da 0% a 20% e lavora al meglio, in abbinamento a “Maximum Change Threshold” e Minimum Motion Frames“, quando la calibrazione a monte è ben fatta.

Utilizzare un NVR per determinare la rilevazione del movimento è certamente più complicato rispetto all’uso degli strumenti software forniti (a volte) assieme alle telecamere, ma rispetto a quest’ultimi è innegabile come i risultati ottenibili tramite NVR siano enormemente più precisi ed affidabili. Bisogna solo avere la pazienza di arrivare ad una configurazione ben fatta.

Bonus: Timelapse

Un po’ per divertimento, un po’ per utilità personale, l’idea di realizzare dei video timelapse tramite la raccolta automatica di fotogrammi tramite motionEye è qualcosa di realizzabile semplicemente e con buoni risultati.

In questo paragrafo vedremo come, tramite l’uso combinato di motionEye e di Raspberry Pi dotato di sistema operativo Raspberry Pi OS (sul quale motionEye è installato, ma la procedura è la stessa anche su altri sistemi Linux), realizzare quotidianamente un filmato timelapse della giornata trascorsa. Ovviamente la cosa è realizzabile anche da altri sistemi operativi: basterà usare software che, a partire dai fotogrammi raccolti, assemblino il filmato.

ARVE Error: src mismatch
provider:    youtube
url: https://www.youtube.com/watch?v=CrMpWO5Q8WU&t=4

src: https://www.youtube-nocookie.com/embed/CrMpWO5Q8WU?start=4&feature=oembed
src mod: https://www.youtube-nocookie.com/embed/CrMpWO5Q8WU?start=4
src gen: https://www.youtube-nocookie.com/embed/CrMpWO5Q8WU

RACCOLTA DEI FOTOGRAMMI

Prima cosa da fare è impostare motionEye in modo da scattare un fotogramma ogni tot secondi. Recarsi quindi presso il box “Still Images” e impostare come segue*:

motionEye - Still Pictures - Timelapse settings
*ovviamente l’impostazione è personale: ognuno può impostare ciò che crede.

Questa configurazione farà sì che ogni due minuti venga raccolta una fotografia. Ovviamente più sono i file più è accurato il filmato.

Tali file verranno salvati in base alle impostazioni di “File Storage“: a mo d’esempio noi ipotizzeremo che per questa IP Cam il percorso nel quale vengano automaticamente create le cartelle dei singoli giorni dentro le quali vengano salvati i fotogrammi sia:

/etc/motioneye/Camera1

Le immagini più vecchie di un giorno verranno poi cancellate automaticamente.

N.b. Di nuovo: non usate la microSD locale del Raspberry Pi per realizzare queste configurazioni, ma piuttosto usate un disco esterno o di rete, così come spiegato nella parte 1 di questo progetto.
CARTELLA TARGET

Creiamo una cartella nella quale salvare i filmati timelapse e lo script usato per crearli. La creeremo sotto /etc/motioneye, ma ovviamente è possibile crearla dove si crede.

Eseguire il comando (personalizzandolo come si crede):

sudo mkdir /etc/motioneye/timelapse
CREAZIONE SCRIPT

A questo punto creiamo uno script in grado, quando evocato, di entrare nella cartella dei contenuti relativi al giorno corrente ed assemblare, usando il comando ffmpeg, il corrispondente filmato timelapse.

cd /etc/motioneye/timelapse/
sudo nano timelapse.sh

nell’editor che si aprirà inseriamo la seguente stringa:

cd /etc/motioneye/Camera1/ && cd "$(\ls -1dt ./*/ | head -n 1)" && cat *.jpg | ffmpeg -framerate 25 -f image2pipe -vcodec mjpeg -i - -vcodec mpeg4 -b:v 9999999 -qscale:v 0.1 -f avi /etc/motioneye/timelapse/"timelapse_`date +%Y-%m-%d-%H-%M-%S`.avi"

avendo ovviamente cura di correggere, in testa e in coda, i due percorsi:

  • /etc/motioneye/Camera1/
  • /etc/motioneye/timelapse/

sostituendoli eventualmente con i propri percorsi: il primo, relativo alla cartella dove vengono salvati i contenuti della telecamera e il secondo dove andranno salvati i filmati timelapse.
Conclusa la configurazione, salvare e uscire (CTRL+X, Y, Invio).

Eseguire poi il comando (eventualmente da personalizzare in base ai propri percorsi):

sudo chmod 777 timelapse.sh

a questo punto (posto che ci sia già qualche fotogramma catturato da motioneye sul filesystem) è possibile eseguire il comando per verificare che tutto funzioni:

./timelapse.sh

Se non si presentano errori, al termini dell’esecuzione presso il percorso /etc/motioneye/timelapse (o il percorso che si è scelto) sarà presente il proprio filmato.

TEMPORIZZAZIONE

Con i fotogrammi che si creano da soli (e si cancellano da soli) e con uno script funzionante, a questo punto è possibile impostare il sistema affinché a fine giornata venga creato il filmato del giorno in modo automatico. Per farlo entriamo in modifica sul file di crontab:

export VISUAL=nano; crontab -e

posizioniamoci in fondo e aggiungiamo:

59 23 * * * /etc/motioneye/timelapse/timelapse.sh

avendo eventuale cura nel correggere il percorso, qualora lo si sia personalizzato.
Salvare e uscire (CTRL+X, Y, Invio).

Infine:

sudo service cron start

A questo punto tutti giorni alle 23:59 verrà creato il proprio filmato timelapse della giornata.

Questa pagina è redatta, manutenuta e aggiornata dallo staff di inDomus, un gruppo di persone molto diverse tra loro che trovi, per domande e supporto, sul forum e sulla chat del sito. Alcuni link sono taggati in qualità di affiliati Amazon e riceviamo un compenso dagli acquisti idonei, utile al sostenimento del sito, ma le nostre recensioni sono tutte indipendenti e non sponsorizzate. Se ti sei perso, a tua disposizione c'è la mappa.