Installare Frigate su Raspberry Pi con HAssOS



In questa guida cerco di spiegare passo-passo (diciamo per principianti) come installare Frigate (per l’analisi dei flussi video) su Raspberry Pi 4 con Home Assistant OS. Come sempre cercherò di scrivere un articolo come piace a me: inserirò le informazioni necessarie senza dilungarmi troppo, senza continue ripetizioni (in stile SEO) e andando al punto, ma inserendo le informazioni che è necessario sapere (per capire cosa si sta facendo).

Come prima cosa, naturalmente, dovete avere un’installazione di Home Assistant funzionante e correttamente configurata. Inoltre bisogna considerare che l’hardware su cui lo facciamo girare (RPi) è piuttosto limitato, quindi se abbiamo diverse telecamere (o anche poche telecamere con risoluzione alta) lo stressiamo troppo e rischiamo che non riesca a gestire tutto. Per queste casistiche è meglio quindi utilizzare un HW dedicato (es. minipc) su cui installare Frigate, e integrarlo poi in Home Assistant.

Inoltre è caldamente consigliato avere una Coral USB (Coral) per l’elaborazione dlele immagini, per evitare di sovraccaricare esageratamente la CPU.
Un’altra cosa da tenere in considerazione è che serve sicuramente un disco esterno per salvare eventuali snapshot, perché la SD non va decisamente bene per questo compito). E’ anche meglio scordarsi la registrazione continua o altre funzioni da NVR: rischiamo di “bruciare” il nostro SSD esterno inutilmente.

1.    Configurazione tipo (HW/SW)

Nel mio caso mi trovo nella seguente situazione (cioè, se avete la mia stessa configurazione e seguite la guida, vi garantisco che funziona):

  • Raspberry Pi 4 – 8 GB

o   SSD Esterno

  • Home Assistant 2022.9.5

o   Supervisor 2022.09.1

o   Operating System 9.0

2.    Prerequisiti

Come detto dovete naturalmente avere:

·        

 

3.    Installare Frigate NVR

Possiamo cominciare con l’installazione di Frigate.

Andiamo su “Impostazioni”


 

Poi su “Componenti aggiuntivi”

 


Clicchiamo sul botton “RACCOLTA DI COMPONENTI AGGIUNTIVI” in basso a destra

 


Dal menu a tendina in alto a destra scegliamo “Repository”

 


Nella finestra che si apre inseriamo questo indirizzo: https://github.com/blakeblackshear/frigate-hass-addons e clicchiamo su “AGGIUNGI”

 


Se tutto va a buon fine, troveremo il nuovo repository aggiunto tra quelli disponibili. Usciamo cliccando su “CHIUDI”

 


A questo punto dovrebbe comparirvi il nuovo repository con i suoi addons, ma nel mio caso non me lo mostrava. Ho quindi dovuto premere il tasto “F5” sulla tastiera per fargli ricaricare la pagina

 


Procediamo con l’installazione cliccando sul primo addon (“Frigate NVR”)

 


Si aprirà la pagina del componente. Clicchiamo su “INSTALLA”

 


Al termine dell’installazione spuntiamo le voci “Watchdog” e “Mostra nella barra laterale” (quest’ultima non è obbligatoria, ma è sicuramente una comodità).
NON AVVIAMO ANCORA FRIGATE, c’è un altro passaggio da fare prima!

 


4.    Installare File editor

Se avete già installato “File editor” potete saltare questo passaggio e andare direttamente lla prossima sezione.

Torniamo indietro alla pagina dei repository e cerchiamo, tra gli “Offical add-ons” il nostro “File editor”. Questo addon permette di creare/modificare qualunque file a partire dalla cartella “config”

 


Clicchiamoci sopra e procediamo con l’installazione. Al termine possiamo avviarlo. Per comodità è buona cosa aggiungere alla barra laterale anche File editor

 

Infine avviamolo cliccando sul bottone "AVVIA".

5.    Creazione del file frigate.yml

Apriamo File editor (se lo avete messo nella barra laterale è più comodo)

 


Clicchiamo sull’icona della cartella in alto a sinistra

 


Verifichiamo di trovarci nella cartella “config” e quindi clicchiamo sull’icona di creazione di un nuovo file (l’icona del file con il “+”) in alto a sinistra

 


Inseriamo “frigate.yml” come nome del file e clicchiamo su “OK”

 


Apriamo il file appena creato cliccandoci sopra

 


Appena si apre incolliamo il seguente testo all’interno:
mqtt:

 mqtt:  
  host: 192.168.x.x  
  user: mqtt.username  
  password: mqtt.password  
 objects:  
  track:  
   - person  
   - cat  
 cameras:  
  camera_1:  
   ffmpeg:  
    inputs:  
     - path: rtsp://192.168.1.X:554/user=admin_password=YYYY_channel=1_stream=0.sdp?real_stream  
      roles:   
       - detect  
    hwaccel_args:  
     - -c:v  
     - h264_v4l2m2m  
   detect:  
    width: 1280  
    height: 720  
   snapshots:  
    enabled: true  
    crop: false  

Dove:

  • “192.168.x.x” è l’indirizzo IP del server (broker) MQTT (ATTENZIONE: non funzionano né “localhost” né “127.0.0.1”, dovete per forza mettere l’IP del vostro Raspberry)
  • “mqtt.username” è il nome utente di MQTT. Se avete seguito la mia guida sull’installazione del broker MQTT, è “mqtt_user”
  • “mqtt.password” allo stesso modo del nome utente, questa è la password MQTT
  • “camera_1” è il nome che vogliamo dare alla videocamera
  • “rtsp://192.168.X.X:554/user=admin_password=YYYY_channel=1_stream=0.sdp?real_stream” è l’indirizzo del flusso RTSP della vostra videocamera, con le varie impostazioni di accesso. Se non le sapete, solitamente potete trovare le informazioni su questo sito: https://www.ispyconnect.com/camera
  • “hwaccel_args” sono i parametri per l’accelerazione hardware (per permettere alla CPU di sfruttare le decodifiche HW e non eseguire troppo lavoro di decodifica via SW). I parametri che vedete vanno bene per Raspberry Pi 3/4, trovate tutti i dettagli sulla pagina ufficiale: Hardware Acceleration | Frigate
  • “larghezza” è la risoluzione orizzontale dell’immagine. Dipende dalla vostra videocamera. Genericamente è “1280” se è 720p o “1920” se è 1080p
  • “altezza” è la risoluzione verticale, come sopra in genere è (chiaramente) “720” se è 720p o “1080” se è 1080p
  • “snapshots” è la sezione che abilita l’acquisizione/salvataggio degli snapshot in corrispondenza degli eventi (rilevamento oggetti). Se non lo abilitiamo (in alternativa potete anche usare “clip”, ma su Raspberry lo sconsiglio) non avremo eventi, anche in caso di rilevamento

Per vedere tutte le possibili configurazioni e capire meglio cosa fanno/come modificarle, potete fare riferimento alla documentazione ufficiale di Frigate: Configuration File | Frigate

Una volta finito di compilare il file, salviamo cliccando sull’icona del dischetto in alto a destra

 


6.    Avviare Frigate NVR

Torniamo in “Impostazioni”

 


“Componenti aggiuntivi”

 


Apriamo “Frigate NVR”

 


E finalmente possiamo avviarlo cliccando su “AVVIA”

 


Cliccando sulla scheda “Registro” verifichiamo il corretto avvio del componente

 


Se avete errori è necessario risolverli (di solito basta una ricerca su Google del codice di errore).

Nel menu principale clicchiamo su “Frigate”

 


Qui troviamo la schermata principale del nostro Frigate NVR, con l’elenco delle telecamere e i “tasti veloci” per accedere alle funzionalità (EVENTS e RECORDINGS) e la possibilità di attivare/disattivare le funzioni (Detect, Recording e Snapshot)

 


Ad esempio se clicchiamo su “Events”

 


Accediamo alla lista degli eventi (di default vengono mantenuti per 10 giorni) con i loro dettagli, oltre alla possibilità di visionare gli screenshot e l’affidabilità del rilevamento

 


7.    Ricevere gli eventi tramite MQTT

Molto probabilmente se abbiamo installato Frigate, vogliamo anche ricevere le notifiche per gli eventi scatenati dal riconoscimento della telecamera. Per fare questo possiamo basarci sui messaggi MQTT che l’addon invia al broker MQTT.

Prima di tutto vediamo che tipo di messaggi vengono trasmessi. Andiamo quindi su “Impostazioni”

 


Quindi apriamo “Dispositivi e servizi”

 


Cerchiamo “Mosquitto broker” e clicchiamo su “Configura”

 


Nella sezione “Ascolta un argomento” inseriamo “frigate/#” (cioè gli diciamo di ascoltare tutti i messaggi con argomento “frigate”) e clicchiamo su “INIZIA AD ASCOLTARE”



Ci arriveranno subito parecchi messaggi, come si può vedere dallo screenshot qui sotto

 


Questo ci aiuta a capire come sono strutturati i vari messaggi che vengono inviati.

Mettiamoci ora in ascolto dell’argomento “frigate/events/#” (cioè degli eventi notificati da Frigate) e facciamo in modo di generarne uno (passiamo semplicemente davanti alla telecamera). Dovremmo vedere un messaggio simile a questo

 


Ora abbiamo tutto quello che ci serve per poter gestire gli avvisi quindi, se vogliamo ricevere una notifica (ad esempio) ogni volta che viene rilevata una persona, dobbiamo ascoltare l’argomento “frigate/events” e poi verificare

  • Che sia stato generato dalla camera “camera_1” (nel caso avessimo più telecamere)
  • Che la label sia “person” (se vogliamo solo notifiche relative alla rilevazione delle persone)
  • Altri parametri che possiamo gestire a piacimento

Possiamo quindi procedere alla creazione dell’automazione.
Andiamo su “Impostazioni”

 


“Automazioni e scene”

 


In basso a destra clicchiamo sul bottone “CREA AUTOMAZIONE”

 


Nel popup che si apre scegliamo “Inizia con un’automazione vuota”

 


Clicchiamo su “AGGIUNGI ATTIVAZIONE”

 


Nel menu a tendina selezioniamo “MQTT”

 


E come “Argomento” inseriamo “frigate/events” in modo che l’automazione si attivi ogni volta che un “evento” viene scatenato da Frigate

 


Poi clicchiamo su “AGGIUNGI CONDIZIONE”

 


Nel menu a tendina scegliamo “E” (così possiamo combinare più condizioni che devono essere tutte verificate per scatenare l'azione)

 


Clicchiamo su “AGGIUNGI CONDIZIONE” all’interno del riquadro “&” appena creato

 


Nel menu a tendina selezioniamo “Modello”

 


E come “Valore modello” inseriamo il seguente testo:

 {{trigger.payload_json["type"] == "new"}}  

In questo modo diciamo ad HA di attivare l’automazione solo se l’evento è di tipo “new” (nuovo) e non per gli “update” (aggiornamenti) o per “end” (fine).
Poi clicchiamo di nuovo su “AGGIUNGI CONDIZIONE”

 


Nel menu a tendina scegliamo di nuovo “Modello” e inseriamo il seguente testo:

 {{trigger.payload_json["after"]["camera"] == "camera_1"}}  

Dove “camera_1” è il nome della nostra telecamera. Cioè gli diciamo che ci interessano gli eventi relativi solamente alla telecamera specificata (se ne avete solo 1 non serve, ma se ne avete di più è utile).
Poi clicchiamo ancora su “AGGIUNGI CONDIZIONE”



Nel menu a tendina scegliamo di nuovo “Modello” e inseriamo il seguente testo:

 {{trigger.payload_json["after"]["label"] == "person"}}  

Cioè gli stiamo dicendo che, oltre alle 2 condizioni precedenti, la’utomazione deve attivarsi solo se viene rilevata una persona e non (ad esempio) se viene rilevato un gatto

 


Volendo potete aggiungere altre condizioni, come ad esempio l’inserimento dell’allarme, oppure una certa fascia oraria. O ancora potete decidere in base alla presenza o meno in casa delle Person.
Insomma, potete sbizzarrirvi.

Proseguiamo cliccando su “AGGIUNGI AZIONE”

 


Nel menu a tendina scegliamo “Chiama servizio”

 


Nel menu di destra scegliamo “Modifica in YAML”, perché al momento non è prevista la modifica grafica per questo tipo di messaggi

 


Quindi incolliamo il seguente testo:

 service: servizio_di_notifica_telegram
 data:  
  message: Messaggio (non visualizzato ma obbligatorio)  
  data:  
   photo:  
    - url: >-  
      http://ccab4aaf-frigate:5000/api/events/{{trigger.payload_json["after"]["id"]}}/snapshot.jpg  
     caption: >-  
      La videocamera ha rilevato un/una  
      {{trigger.payload_json["after"]["label"]}}  

Dove “servizio_di_notifica_telegram” è l’id del vostro servizio di notifica. Il resto potete lasciarlo com’è.
"message" è obbligatorio, ma non viene visualizzato da nessuna parte.
“caption” può essere modificato a piacere, MA è importante sapere che potete mettere solo 1 placeholder (il parametro tra “{{“ e “}}”), perché se ne mettete 2 non funziona più nulla (e non vi dà errore!).

 


Quindi possiamo salvare la nuova automazione cliccando su “SALVA” in basso a destra

 


FINE!

Adesso, se passiamo davanti alla telecamera, riceveremo un avviso sul telefono.

 

8.    Considerazioni aggiuntive (Coral)

Ci sono alcune considerazioni aggiuntive da valutare riguardo l’analisi dei flussi video. Come potete ben immaginare (e come già menzionato in precedenza) analizzare dei flussi video in continuazione per cercare/riconoscere degli oggetti è un lavoro molto pesante. Se questo compito è demandato alla CPU (che è in grado di eseguire tantissimi lavori diversi, ma non è specializzata in nulla, per così dire), ciò si traduce in un carico abnorme che usa tutte le risorse (e alla lunga può usurare prematuramente il nostro Raspberry, poiché causa un calore costante).

Per risolvere in parte questo problema si ricorre ad Hardware esterni, estremamente specializzati in questo compito. Attualmente il più famoso è Coral (https://coral.ai/), di cui io consiglio vivamente la versione USB per 3 motivi:

  • E’ compatibile con tutto
  • Non necessita di driver
  • Se cambia l’HW (passiamo da Raspberry a MiniPC, o viceversa, ad esempio) lo possiamo spostare facilmente

Tutto questo a discapito di un po’ di performance (che volendo possiamo ovviare aggiungendo un secondo Coral USB).

Tuttavia Coral è specializzato nel riconoscimento degli oggetti in un’immagine, ma (per dirlo in parole semplici) a fare tutto il resto è una chiavica. Questo significa che non possiamo semplicemente passare ogni fotogramma a Coral per dirgli di analizzarlo e vedere se trova qualcosa, non riuscirebbe a starci dietro.
Quindi il flusso video viene sempre “processato” dalla CPU, per vedere se trova qualcosa che “si muove”. Quando lo trova passa il fotogramma a Coral e gli chiede di capire cos’è; in questo modo ognuno fa “il suo lavoro” con il minimo sforzo e la massima efficienza.

Per farvi capire meglio, vi allego uno screenshot dell’utilizzo della CPU del Raspberry senza Coral e con Coral, nell’utilizzo di una singola telecamera 720p a 5 fps

 


Giusto per completezza, se volete collegare Coral USB al Raspberry, vi consiglio di attaccarlo ad un Hub USB alimentato, perché se avete anche altri dispositivi (SSD, chiavetta Zigbee, ecc.) c’è il rischio che il Rapberry non ce la faccia a fornire sufficiente alimentazione. Infatti la Coral USB può richiedere fino a 900 mA di picco (vedere il datasheet Coral-USB-Accelerator-datasheet.pdf), mentre il Raspberry (qualunque modello con 4 USB) è in grado di fornire al massimo 1,2 A per tutte le 4 porte insieme. Se ne deduce quindi che già solo se avete un SSD esterno collegato al Raspberry, siete oltre la soglia. Se avete anche un dongle Zigbee, non ci state dentro di sicuro.
Io ho usato questo Hub, testato e funziona: https://www.amazon.it/gp/product/B076YRSWGH, voi potete prendere quello che più preferite, ma cercate di stare su qualcosa di buono, altrimenti rischiate che non funzioni a dovere (ad esempio molti degli Hub economici hanno la corrente condivisa tra l’alimentatore esterno e la porta USB, quindi causano un assorbimento anche al Raspberry).

 

I parametri di configurazioen di Coral per Frigate li trovate qui: https://docs.frigate.video/configuration/detectors
(in sostanza basta aggiungere il corretto “detector”)

 

Commenti

Post popolari in questo blog

Creare un sensore weather (previsioni del tempo) da Meteo & Radar in Home Assistant

Home Assistant - Recuperare informazioni aggiuntive da Netatmo (termostato)

Creare un sensore del prezzo del gas (PSBIL_BUY) in Home Assistant

Installare Portainer su NAS Synology

Esporre UPS da NAS Synology verso Home Assistant (NUT)

Ricevere la posizione GPS quando si parcheggia l'automobile (con Home Assistant)

Creare MQTT Server (broker) in Home Assistant (HASSIO)

Tasmota (via OTA) su BlitzWolf BW-SHP10 (e su Tuya ESP in generale)

JC vs Khaby Lame