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:
- Installazione di Home Assistant (OS o Supervised) funzionante
- Telecamera IP con flusso RTSP
- MQTT broker già configurato (vedi https://blog.andreafumi.it/2022/09/creare-mqtt-server-broker-in-home.html)
·
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
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
Posta un commento