Frigate NVR

Frigate is een lokale NVR (Network Video Recorder) die gebruik maakt van OpenCV en Tensorflow voor real time object identificatie zoals personen, dieren, auto’s, etc… door de beelden te analyseren uit IP-camera’s in of rond je huis.

Voor het gebruik van Frigate in Home Assistant is er een integratie die toegevoegd kan worden en die een connectie maakt met een Frigate server (die in HAOS ook weer als Add-on geïnstalleerd kan worden).

De communicatie tussen Frigate en Home Assistant geschiedt middels MQTT dus een MQTT Broker (zoals bv. Mosquitto) is een vereiste.

TensorFlow is een process om via AI detectie objecten te detecteren en dat kost aardig wat processor-capaciteit. Standaard kan daarvoor de CPU gebruikt worden maar met meerdere camera’s zal de CPU het niet meer kunnen verwerken en speciaal voor dit doel is er door Google een Coral Tensor Processing Unit ontwikkeld. Deze TPU is er in een aantal variaties en ideaal voor Frigate in Home Assistant is er de USB-uitvoering.

Hoe werkt het?

Een IP camera stuurt een video-stream naar Frigate en de bewegingen in de video wordt met een detectie mechanisme in een zogenaamde ‘snippet’ verpakt en de ‘detector’ zal met Tensorflow dit analyseren met behulp van AI machine learning en de ‘objects’ als resultaat proberen te voorspellen. Elke hit boven de (standaard) 70% wordt opgepakt en bewaard in een snapshot en een recording.

Wat heb je hiervoor nodig qua hardware?

  • Een Raspberry Pi 4 of Intel NUC met Home Assistant (OS)
  • Bij voorkeur dus een Coral TPU op de USB-3 poort
  • IP camera’s die een RTSP (Real Time Streaming Protocol) stream sturen, bij voorkeur H.264 en meerdere streams in verschillende resoluties.
  • Optioneel een externe opslag, bv NAS

Wat heb je nodig qua software?

  • Home Assistant OS
  • Externe media opslag instelling in Home Assistant
  • Mosquitto MQTT Broker
  • Frigate Add-on via HACS
  • Frigate Integratie in HA

Externe opslag

Mocht je niet genoeg disk ruimte op de Home Assistant server hebben om alle recordings en snapshots op te slaan, maak dan gebruik van een externe Media-disk in Home Assistant. Noem deze dan frigate en het zal dan ge-mount worden als /media/frigate in Home Assistant.

Add-On in HA

Installatie van Frigate via de Add-on’s kan door de repository  https://github.com/blakeblackshear/frigate-hass-addons toe te voegen aan de Add-On Winkel. Daarna kan de Add-on geïnstalleerd worden

Het is ook mogelijk om de Full-Access versie van Frigate Add-on te installeren, deze heeft toegang tot meer hardware in Home Assistant zoals de Coral TPU of de GPU.

Configuratie frigate.yaml

Voordat deze gestart kan worden, is een configuratiebestand nodig en die dient aangemaakt te worden in de directory /config als frigate.yaml. Meer informatie over de configuratie instellingen vind je op de site van frigate. Een bijvoorbeeld voor de basis configuratie met recording en snapshots:

mqtt:
  enabled: True
  host: 192.168.1.123
  port: 1883
  #user:
  #password:

cameras:
  Tuin:
    ffmpeg:
      inputs:
        - path: rtsp://rtsp:12345678@192.168.1.10:554/av_stream/ch0
          roles:
            - detect
      hwaccel_args: preset-vaapi # <- Alleen voor Intel met geïntegreerde GPU!

    detect:
      enabled: True
      width: 1920 
      height: 1080 # <- stream is 1080P

detectors:
  cpu1:
    type: cpu
    num_threads: 3
  cpu2:
    type: cpu
    num_threads: 3

record:
  enabled: True
  retain:
    days: 2
    mode: motion
  events:
    retain:
      default: 7
      mode: active_objects
      objects:
        dog: 2
        car: 2
        person: 7

  objects:
    track:
      - person
      - dog
    filters:
      person:
        threshold: 0.7

snapshots:
  enabled: True

De MQTT instellingen zijn in ieder geval de host en port, indien nodig zet hier dan ook user en password in.

In mijn test-opstelling gebruik ik een Sonoff GK-200MP2B camera en via eWeLink is de URL voor de RTSP stream te vinden. Deze staat (met het default password) in het path van de input voor de camera.

Verstandig is het om de hardware acceleratie toe te voegen en daarmee de CPU ietwat te ontlasten door de ingebouwde GPU te gebruiken. De instellingen voor de hardware-acceleratie vind je terug in de ‘cameras’ sectie van de configuratie.

De role ‘detect’ is enabled (True) en die staat dan ook als role bij de camera aangegeven. Vanuit de Detectie worden de beelden geanalyseerd en ook worden de snapshots hiermee gemaakt. Het deel ‘detectors’ in de configuratie geeft aan welke hardware hiervoor gebruikt wordt, in deze test-opstelling dus de CPU.

Tenslotte worden de ‘record‘ en ‘snapshots‘ enabled (True) en standaard zullen de videos voor de komende 10 dagen opgeslagen worden. Hierna zal de oudste video verwijderd worden zodat altijd een geschiedenis van 10 dagen videos bewaard blijven. In deze configuratie is dat aangepast naar 2 dagen, behalve voor personen, die bewaren we 7 dagen.

Aangezien er objects zijn gedefinieerd in de recording-events, dienen deze ook apart in objects-track gedeclareerd te worden. Een filter zorgt ervoor dat de analyse voor personen tenminste 70% zeker moeten zijn.

Frigate UI

Met bovenstaande configuratie kan Frigate als server gestart worden en kan een icon via de zijbalk weergegeven worden.

Home Assistant Integratie

Voeg de Frigate integratie toe via HACS en herstart Home Assistant.

Via de Integraties van Home Assistant kan Frigate nu toegevoegd worden. Kies voor ‘Frigate‘ en er verschijnt een melding om de URL van de Frigate server in te voeren, accepteer deze default URL en kies voor VERZENDEN (Voor de Full Access versie van Frigate, gebruik de URL http://ccab4aaf-frigate-fa:5000)

Hierna zal de integratie in Home Assistant geladen worden. Zowel Frigate zelf als de IP Camera’s worden herkend en gevraagd wordt om deze in een ruimte te plaatsen en toe te voegen aan de integratie.

Voorbeeld van de Tuin sensors in Frigate integratie:

Hiermee kan dan een Dashboard van Home Assistant gevuld worden met de hier getoonde entiteiten, bijvoorbeeld:

Uiteraard kunnen nu automatiseringen in Home Assistant of in Node-RED gemaakt worden et als input één of meerdere van deze sensoren.