Techniek voor je (slimme) huis

Camerabewaking met Frigate: detecteer personen en objecten

Met Frigate en een vleugje ai pak je camerabewaking professioneel aan, met krachtige detectie van personen, dieren en objecten.

Het is natuurlijk interessant om enkele IP-camera’s op te hangen om je eigendommen te bewaken. Maar als de nieuwigheid er af is blijven de beelden vaak onaangeroerd. Bewegingsmeldingen kunnen helpen maar ook die worden door veel valse meldingen al snel genegeerd. Met Frigate (NVR) kun je geholpen door AI veel nauwkeuriger personen, dieren en objecten detecteren. Via een integratie met Home Assistant kun je bovendien handig inspelen op meldingen. We laten zien hoe je er mee aan de slag gaat!

Waarom Frigate?

Frigate NVR, kortweg Frigate, is een Network Video Recorder. Zo’n systeem gebruik je om via het netwerk beelden van IP-camera’s op te nemen. Met een NVR kun je alles centraal én lokaal beheren via bijvoorbeeld een app of browser. Een NVR kan beelden opnemen en meldingen geven bij de detectie van personen of objecten. Bekende opties naast Frigate zijn Blue Iris, Synology Surveillance Station en Unifi Protect.

Steeds vaker wordt AI toegepast. Dat heeft veel potentie. Niemand heeft zin om de hele dag naar camerabeelden te kijken. Veel liever ontvang je een melding als er echt iets interessants gebeurt. En dan liefst met zo min mogelijk valse meldingen. Een extra voordeel is dat alleen dan hoeven opnames hoeven te worden gemaakt.

Blue Iris biedt slimme detectie met CodeProject.ai of DeepStack. Maar de software is afhankelijk van Windows, wat voor velen een probleem is. Frigate biedt objectdetectie met TensorFlow. De software werkt onder Linux en kun je relatief eenvoudig op een server installeren, eventueel met extra hardware om de objectdetectie te versnellen. We hebben zelf heel goede ervaringen met Frigate: het werkt zeer stabiel en is mede dankzij de integratie met Home Assistant erg functioneel.

Frigate NVR detecteert objecten zoals bijvoorbeeld fietsen en bewaart een snapshot en kort fragment.

Wat heb je nodig

De meest gangbare methode om Frigate te installeren is via Docker met Docker Compose. Ook kun je de software als add-on in Home Assistant installeren. De optionele Home Assistant-integratie staat overigens los van de software maar geeft leuke extra’s, die we straks kort benoemen.

Frigate stelt geen hoge eisen aan de hardware. Een Intel Celeron-processor zoals de N100 is bijvoorbeeld al prima. Wel kunnen extra’s nodig zijn voor objectdetectie, zeker bij meerdere camerastreams. Een goede ‘detector’ versnelt het detecteren van objecten enorm en ontlast de processor, waardoor je stroom bespaart. Een goed voorbeeld is de Google Coral TPU (Tensor Processing Unit). Die is speciaal ontwikkeld voor het versnellen van machine learning-toepassingen. Wij gebruikten de USB-versie, beschikbaar vanaf ongeveer $60. Prijzen en levertijden variëren.

De eisen qua opslag zijn ook niet hoog, omdat alleen gebeurtenissen worden vastgelegd. Om te beginnen is een paar gigabyte genoeg. Verder hangt het vooral af van de resolutie van de streams voor opnames en het aantal dagen waarover je de gebeurtenissen gaat bewaren. Dit is aanpasbaar. Voor het decoderen van videostreams is een GPU wenselijk, al is een geïntegreerde GPU (‘iGPU’) al meer dan toereikend.

We gebruiken de Google Coral voor het versnellen van objectdetectie.

Keuze IP-camera

Uiteraard heb je ook één of meerdere IP-camera’s nodig. Merken die vaak worden aanbevolen voor Frigate zijn Dahua, Hikvision en Amcrest. Hier gebruiken we twee camera’s van Hikvision en een model van Foscam. Het is raadzaam een camera te kiezen die RTSP-streams ondersteunt en liever meerdere. Je kunt dan bijvoorbeeld opnemen in een hogere resolutie terwijl je een substream met lagere resolutie gebruikt voor objectdetectie. Er zijn naast RTSP ook andere manieren om streams op te halen met bekende camera’s. In de documentatie van Frigate vind je daar tips voor.

Bij het instellen van de streams kun je vaak nog kiezen tussen H.264 en H.265 of hoger. Hierbij geeft H.264 de beste compatibiliteit met browsers en met Home Assistant. Frigate zelf ondersteunt H.265 prima en we zijn ook geen problemen tegengekomen in recente browsers en met Home Assistant. Door de hogere compressie vraagt H.265 minder bandbreedte.

Voor een IP-camera die je binnen gebruikt kan WiFi volstaan. Maar een camera die je buiten gebruikt sluit je voor de beste stabiliteit aan via een netwerkkabel. Het is een groot pluspunt als je PoE kunt gebruiken (Power-over-Ethernet). Je kunt de camera dan vanuit de switch (of een losse PoE-injector) van voeding voorzien via de netwerkkabel. Let er wel op dat de IP-camera dit ook moet ondersteunen.

Voor binnen kan een eenvoudige camera met WiFi volstaan.

Integratie Home Assistant

Er bestaat een heel praktische Frigate-integratie voor Home Assistant. Voor die integratie maakt het niet uit hoe of op welk systeem je Frigate hebt geïnstalleerd. Je kunt dus naar voorkeur Docker Compose of de add-on gebruiken. Wel is MQTT nodig: daar bewaart Frigate alle relevante gegevens waar deze integratie op vertrouwt.

De integratie is zeker niet vereist omdat Frigate volledig zelfstandig werkt. Het geeft je wél heel veel slimme bewakingsmogelijkheden die je mist binnen Frigate zelf. Door de combinatie met Home Assistant kun je bijvoorbeeld direct reageren op de detectie van een persoon, auto, fiets, hond, kat of paraplu. Zet bijvoorbeeld de verlichting aan als een persoon is gedetecteerd, activeer de tuinsproeier om een kat weg te jagen of stuur een melding naar je smartphone met afbeelding en fragment als je op vakantie bent.

We zullen in een toekomstig artikel tips voor de integratie met Home Assistant geven.

Er is een heel praktische integratie voor Home Assistant beschikbaar zodat je kunt reageren op gebeurtenissen.

Installatie via Docker

Je kunt Frigate via Docker installeren of als add-on voor Home Assistant. Hier behandelen we een installatie via Docker Compose. Lees eventueel onze instructies voor de installatie van Docker en Docker Compose onder Ubuntu. Daarin geven we ook tips voor het werken met deze tools.

Bestand voor Docker Compose

Maak een mapje voor Frigate op je systeem. Hierin maak je vervolgens een docker-compose.yml-bestand. Voor de inhoud kun je het onderstaande voorbeeld gebruiken. Raadpleeg eventueel de online documentatie voor aanvullende details (https://docs.frigate.video/frigate/installation/). Maak ook de onderliggende mappen ./config voor je configuratie en ./storage om de database, snapshots en opnames te bewaren.

version: "3.9"
services:
  frigate:
    container_name: frigate
    privileged: true
    restart: unless-stopped
    image: ghcr.io/blakeblackshear/frigate:stable
    shm_size: "82mb" # aanpassen voor jouw camera
    devices:
      - /dev/bus/usb:/dev/bus/usb # USB Coral
      - /dev/apex_0:/dev/apex_0 # PCIe Coral
      - /dev/dri/renderD128 # Intel hwaccel
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ./config:/config
      - ./storage:/media/frigate
      - type: tmpfs
        target: /tmp/cache
        tmpfs:
          size: 1000000000
    ports:
      - "5000:5000"
      - "8554:8554" # RTSP feeds
      - "8555:8555/tcp" # WebRTC over tcp
      - "8555:8555/udp" # WebRTC over udp
    environment:
      FRIGATE_RTSP_PASSWORD: "password"

De waarde bij smh_size in regel 8 is afhankelijk van het aantal streams. In de documentatie bij Frigate vind je een formule om dit te berekenen. Je kunt eventueel beginnen met bijvoorbeeld 64mb. Dat is genoeg voor twee IP-camera’s met een detectie-stream van 720p. Als de waarde te klein blijkt vind je een waarschuwing in het logboek inclusief een aanbevolen waarde en kun je het alsnog aanpassen. Op het logboek komen we straks terug.

Via regel 10-12 zorgen we dat Frigate toegang heeft tot een Google Coral TPU en tot de geïntegreerde GPU van een Intel-processor voor het hardware-matig decoderen van videostreams. Mogelijk is in jouw situatie een aanpassing nodig, waar we op terug komen als we de camerastreams gaan instellen.

Waar je verder op moet letten zijn de volumes voor je configuratiebestanden en voor de opslag van onder andere opnames en snapshots. In dit voorbeeld kiezen we de onderliggende mappen ./config in regel 15 en ./storage in regel 16. Als deze mappen nog niet bestaan zullen ze automatisch worden gemaakt. Voor ./storage zou je ook naar bijvoorbeeld een externe harde schijf kunnen verwijzen die je hebt gemound.

Configuratiebestand maken

Voordat je Frigate kunt starten moet je eerst een configuratiebestand maken met de naam config.yml in de map ./config. We beginnen met de onderstaande configuratie. We gaan dit in het vervolg aanpassen. Het maken van aanpassingen kan overigens ook handig via de beheerdersomgeving.

mqtt:
  enabled: False

cameras:
  dummy_camera: # <--- this will be changed to your actual camera later
    enabled: False
    ffmpeg:
      inputs:
        - path: rtsp://127.0.0.1:554/rtsp
          roles:
            - detect

Frigate starten

Je kunt nu Frigate starten. Ga daarvoor naar de map met het bestand docker-compose.yml. Geef dan de volgende opdracht:

docker compose up -d

Je kunt de optie -d eventueel weglaten om alle meldingen te zien. Nadat Frigate is gestart is de beheerdersomgeving beschikbaar via http://ipadres:5000. We hebben nog geen camera’s ingesteld, dus er is nog niet heel veel te zien. Dat gaan we verderop doen.

Met de opdracht docker compose down kun je Frigate stoppen. Het kan nodig zijn om Frigate te herstarten nadat je aanpassingen aan de configuratie hebt gemaakt. Al kan je de configuratie ook via de beheerdersomgeving aanpassen, wat vaak de voorkeur zal hebben. Daar vind je óók een optie om te herstarten. Je kunt nu naar de stap waarin we de beheerdersomgeving gaan verkennen.

Installatie als add-on in Home Assistant

Frigate kun je ook als add-on installeren onder Home Assistant OS. Let er in dat geval wel op dat singleboardcomputers zoals de Raspberry Pi en Odroid N2+ die vaak voor Home Assistant worden gebruikt niet altijd snel genoeg zijn. Vooral bij objectdetectie met meerdere camerastreams kun je zonder extra hardware tegen beperkingen aanlopen. Met een Google Coral TPU is dat, ook als je de add-on gebruikt, in ieder geval op te lossen.

Stel voordat je verder gaat je profiel in op de geavanceerde modus. Open daarvoor je profiel door in het menu aan de linkerkant op je naam te klikken. Zet dan een vinkje bij Geavanceerde modus. Je ziet nu extra opties in de beheerdersomgeving.

We gaan nu de add-on installeren en een configuratiebestand maken waar we in het vervolg mee kunnen gaan werken.

Zet in je profiel in Home Assistant de geavanceerde modus aan.

Add-on winkel uitbreiden

We moeten eerst de add-ons voor Frigate beschikbaar maken in de winkel. Ga daarvoor naar Instellingen / Add-ons.en klik op Add-on winkel. Open rechtsboven het menu (de drie puntjes) en kies Repositories. Voer de locatie https://github.com/blakeblackshear/frigate-hass-addons in en klik op Toevoegen. Sluit het venster. Vernieuw het overzicht met add-ons via F5. In de add-on winkel zie je nu onder het kopje Frigate verschillende add-ons voor deze toepassing.

Je kunt Frigate als add-on installeren binnen Home Assistant.

Add-on installeren

Open de add-on winkel. Onder het kopje Frigate kun je kiezen tussen onder meer Frigate en Frigate (Full Access). Die laatste heeft meer toegangsrechten voor je systeem, wat soms nodig is om een Google Coral TPU of geïntegreerde GPU te gebruiken. Daarom geven we de voorkeur aan deze add-on.

Installeer de add-on. Zet vervolgens vinkjes bij Start bij opstarten, Watchdog, Automatisch bijwerken en Weergeven in zijbalk. De optie Beschermingsmodus is actief maar kun je eventueel uitzetten. Start de add-on nog niet. We moeten eerst een configuratiebestand maken.

Zet vinkjes zodat Frigate onder meer automatisch start en in de zijbalk wordt weergegeven.

Configuratiebestand maken

Voor de configuratie van Frigate moet je een configuratiebestand genaamd frigate.yml in de configuratiemap (/config) van Home Assistant zetten. Dat is heel makkelijk. Installeer een add-on zoals File editor. Open dan File editor en klik op het icoontje linksboven (Browse Filesystem). Je zit standaard in de goede map (./config). Klik dan op het icoontje linksboven (New File). Voer de naam frigate.yaml in.

Gebruik een add-on zoals File editor om een configuratiebestand voor Frigate te maken.

Je kunt nu de configuratie voor Frigate invoeren. Gebruik het onderstaande voorbeeld om mee te beginnen.

mqtt:
  enabled: False

cameras:
  dummy_camera: # <--- this will be changed to your actual camera later
    enabled: False
    ffmpeg:
      inputs:
        - path: rtsp://127.0.0.1:554/rtsp
          roles:
            - detect

Frigate starten

Je kunt nu Frigate starten. Open daarvoor de add-on via Instellingen / Add-ons. Kies Frigate en klik op Starten. Wacht even tot Frigate is gestart. Daarna kun je Frigate direct via het menu in de zijbalk openen. Je komt dan in de beheerdersomgeving. Die gaan we in de volgende stap verkennen.

De beheerdersomgeving van Frigate is direct vanuit Home Assistant te bereiken.

Beheerdersomgeving verkennen

Hier zullen we kort de belangrijkste onderdelen van de beheerdersomgeving toelichten.

Camera’s

Onder Cameras kun je uiteraard alle camera’s bekijken. Nu zijn er nog geen camera’s, maar straks zie je bij elke toegevoegde camera de belangrijkste opties. Wat precies beschikbaar is hangt af van de instellingen. Daar komen we later op terug.

  • Events: hier kun je naar een chronologisch overzicht met alle gebeurtenissen voor deze camera. Voor elke gebeurtenis is een clip en snapshot beschikbaar is.
  • Recordings: hier kun je naar een handig chronologisch overzicht met alle opnames.

Via ’toggles’ kun je per camera detectie, opnames en snapshots aan of uit zetten.

Onder Cameras vind je een overzicht van alle camera’s die je binnen Frigate hebt toegevoegd.

Gebeurtenissen

Ga je via het menu naar Events dan kun je alle gebeurtenissen van alle camera’s in één handig overzicht bekijken. Hierbij kun je nog filteren op camera, label (bijvoorbeeld cat, dog, person) en zone.

Een zone is een gebied op een camerabeeld. Heb je bijvoorbeeld een camera met je hele oprit dan zou je het gedeelte bij de voordeur als een zone kunnen instellen. Op het werken met zones komen we later terug.

Over Events zie je alle gebeurtenissen, waarbij je de gemaakte snapshots en/of opnames kunt bekijken.

Opslag, systeeminformatie en logboek

Onder Storage kun je zien hoeveel opslag er is gebruikt en wat er nog vrij is. Ook het geheugengebruik en de bandbreedte van camerastreams is zichtbaar.

Ga je naar System dan zie je nuttige systeeminformatie. Zo lees je bijvoorbeeld of er een detector (zoals de Google Coral TPU) wordt gebruikt. Ook het gebruik van een GPU voor het decoderen van streams wordt hier zichtbaar. Verder zie je wat het processor- en geheugengebruik van andere processen is.

Onder Logs vind je het logboek, dat inzicht geeft in eventuele problemen.

Het logboek geeft nuttige informatie over jouw installatie van Frigate.

Configuratie aanpassen

Als je naar Config gaat zie je de configuratie van Frigate waar je deze eventueel ook kunt aanpassen. Heb je aanpassingen gemaakt, gebruik dan de optie Save & Restart om Frigate te herstarten, zodat de wijzigingen van kracht worden. Dit is ook waar we in het vervolg de wijzigingen gaan maken.

Camera’s instellen

We gaan er vanuit dat jouw IP-camera’s zijn geactiveerd en toegankelijk zijn via het netwerk. Voordat we deze aan Frigate toe kunnen voegen, gaan we eerst een gebruikersaccount maken en de streams instellen. Open daarvoor de configuratie van jouw ip-camera. De meeste camera’s kun je via de browser configureren.

Gebruikersaccount maken

Meestal zal de toegang tot je camera zijn afgeschermd met een wachtwoord. Dit raden we in ieder geval ten zeerste aan. Hoewel je dat account zou kunnen gebruiken. is het praktischer om een extra gebruikersaccount te maken speciaal voor Frigate. Bij de camera’s van Hikvision ga je daarvoor naar Configuratie / Systeem / Gebruikersbeheer. Maak hier een gebruiker met het niveau Operator en bewaar de accountgegevens.

Maak een gebruikersaccount aan zodat Frigate toegang tot de camerabeelden heeft.

Bij de camera’s van Foscam kun je een gebruikersaccount maken onder Settings / Basic Settings / User Accounts. Maak een gebruiker met het niveau Administrator en bewaar de accountgegevens.

Camerastreams configureren

We gaan twee camerastreams gebruiken: een hoofdstream voor opnames en een substream voor objectdetectie. Voor beide streams kiezen we de optimale resolutie en framerate. Het uitgangspunt voor de streams is als volgt:

  • Voor de hoofdstream kies je veelal de hoogste resolutie die de camera ondersteunt en een framerate van 15 fps of iets daarboven.
  • Voor de substream voor objectdetectie zul je meestal een lagere resolutie gebruiken en een lage framerate van 5 fps. Je kunt de resolutie eventueel iets verhogen als de objecten die je gaat detecteren vrij klein zijn. De framerate kun je eventueel ook iets hoger maken om de detectie van snel bewegende objecten te verbeteren.

Gebruik voor beide streams h.265 als dit beschikbaar is of anders h.264. Schakel bij compatibiliteitsproblemen eventueel terug naar h.264. Gebruik liever geen h.265+.

Foscam-camera’s

Op het beeld hieronder zie je onze instellingen voor de hoofdstream en substream voor de Foscam R4M. We zullen hieronder de instellingen voor de Hikvision-camera’s doornemen.

De meeste IP-camera’s kun je via je browser configureren, zoals deze Foscam R4M.

Hikvision-camera’s

Bij de twee camera’s van Hikvision kiezen we een resolutie van 2688×1520 pixels voor de hoofdstream. We vullen achter Beeldfrequentie de gewenste framerate van 15 fps in. Bij i-frame-interval vullen we 30 in. Bij Video-opname kiezen we h.265 in plaats van h.264. Aanvullend kun je achter H.265+ nog h.265+ aanzetten maar we laten dit uit voor een betere compatibiliteit.

Configuratie van de hoofdstream voor opnames bij de camera van Hikvision.

Bij onze Hikvision-camera’s is de hoogste resolutie voor de substream 640×480 pixels. Je kunt echter optioneel, via de systeeminstellingen, een derde stream activeren die wél een hogere resolutie ondersteunt tot 1280×720 pixels. Dat heeft onze voorkeur. Daarom kiezen we ervoor deze derde stream in te schakelen. Veel camera’s van dit merk hebben overigens deze optie!

Instellingen voor onze derde stream bij de camera van Hikvision.

Door de derde stream in te schakelen verlies je overigens wel features die de camera zelf biedt zoals gezichtsherkenning (door de camera), h.264+ en h.265+. Die opties zijn echter niet nodig voor onze toepassing.

Voor de substream selecteren we een resolutie van 1280×720 pixels en een frame-rate en i-frame-interval van 8 fps. Meer is voor detectie niet nodig. Ook kiezen we weer voor h.265.

We schakelen op de Hikvision-camera’s een derde stream in die we gebruiken voor objectdetectie.

Test je camerastream

Je hebt nu een gebruikersaccount waarmee je toegang hebt tot de camerastreams en je hebt een hoofdstream en substream ingesteld. We gaan de RTSP-streams eerst testen met het programma VLC Media Player (https://www.videolan.org). Zo komen we niet voor verrassingen te staan. Installeer de software, kies onder Media de optie Netwerkstream openen en blader naar de url.

Voor onze camera van Hikvision bereik je de hoofdstream en derde stream via de url’s hieronder.

rtsp://gebruiker:wachtwoord@ipadres:554/Streaming/Channels/101
rtsp://gebruiker:wachtwoord@ipadres:554/Streaming/Channels/103

Voor de Foscam-camera’s moeten we de volgende url’s gebruiken:

rtsp://gebruiker:wachtwoord@ipadres:88/videoMain
rtsp://gebruiker:wachtwoord@ipadres:88/videoSub

Vervang in deze url’s uiteraard gebruiker en wachtwoord door het ingestelde gebruikersaccount en vervang ipadres door het IP-adres van de IP-camera. Voor jouw camera kunnen deze url’s afwijkend zijn.

Gebruik VLC Media Player om je camerastreams te testen.

Camera’s toevoegen

We gaan nu een eerste camera toevoegen aan Frigate die we binnen noemen. Ga daarvoor naar Config in de beheerdersomgeving. Begin met de onderstaande configuratie waarbij je achter path: de url voor de RTSP-stream zet. Klik dan op Save & Restart. Na een korte wachttijd kun je onder Cameras als het goed is de camerastream bekijken. Dit is een belangrijke eerste stap zodat je weet dat het werkt.

mqtt:
  enabled: False

cameras:
  binnen:
    enabled: True
    ffmpeg:
      inputs:
        - path: rtsp://gebruiker:wachtwoord@ipadres:88/videoSub
          roles:
            - detect
    detect:
      enabled: False

In de volgende stappen gaan we proberen om de prestaties te verbeteren, door indien beschikbaar gebruik te maken van hardwareversnelling voor het decoderen van de camerastreams, en een detector zoals de Google Coral TPU om de objectdetectie te versnellen.

Hardwareversnelling

Bij de huidige configuratie zal ffmpeg de processor gebruiken voor het (softwarematig) decoderen van de streams. Het is verstandig hardware-versnelling te gebruiken als je die mogelijkheid hebt. Daarmee ontlast je de processor. Hoewel een grafische kaart kan worden gebruikt is een geïntegreerde GPU meer dan toereikend. Voor de 9e generatie Intel-processor die we hier gebruiken voegen we de parameter preset-vaapi toe als parameter onder ffmpeg zoals je hieronder ziet in regel 8.

Voor de 10e generatie Intel-processors en later gebruik je preset-intel-qsv-h264 toe voor h.264-streams en preset-intel-qsv-h265 voor h.265-streams.

Let er op dat soms een aanpassing aan je docker-compose.yml nodig is. Voor de hier gebruikte preset-vaapi moet Frigate toegang tot /dev/dri/renderD128 hebben wat we eerder ook al zo hadden ingesteld. Test na deze aanpassing of je camerastream nog steeds werkt.

mqtt:
  enabled: False

cameras:
  binnen:
    enabled: True
    ffmpeg:
      hwaccel_args: preset-vaapi
      inputs:
        - path: rtsp://gebruiker:wachtwoord@ipadres:88/videoSub
          roles:
            - detect
    detect:
      enabled: False

Raadpleeg de documentatie (https://docs.frigate.video/configuration/hardware_acceleration/) voor meer informatie over hardware-versnelling. Je vindt daar ook andere opties, samen met de wijzigingen die nodig zijn aan je docker-compose.yml en/of de configuratie van Frigate.

Detector configureren

Frigate zal standaard de processor gebruiken voor het detecteren van personen en objecten, wat niet erg efficiënt is. Er zijn goede redenen om een Google Coral Edge TPU te gebruiken. Deze is specifiek ontwikkeld voor het TensorFlow-platform van Google, een open-source softwarebibliotheek. Frigate gebruikt die bibliotheek voor het detecteren en identificeren van personen en objecten. Het achterliggende model is daarbij getraind voor bijvoorbeeld personen, auto’s, dieren of andere objecten.

De Edge TPU zal de detectie enorm versnellen waardoor de processorbelasting in Frigate tot een minimum beperkt kan blijven. Dit merk je zeker in het stroomverbruik en daarmee de kosten voor 24×7 gebruik. Helaas is met name de usb-variant soms lastig te verkrijgen, en al wat prijziger dan voorheen. De uitvoering met mini-PCIe is eenvoudiger te verkrijgen maar past niet in elk m.2-slot, let daar op.

Gebruik je een detector dan moet je die in de configuratie toevoegen. Voor de Google Coral TPU voeg je de onderstaande gemarkeerde regels toe.

mqtt: ...

detectors:
  coral:
    type: edgetpu
    device: usb

cameras: ...

Er zijn ook andere detectors waarmee goede winst valt te behalen, zoals TensorNT voor grafische kaarten van Nvidia en OpenVINO dat werkt op niet al te oude Intel-systemen. Voor meer details kun je de documentatie (https://docs.frigate.video/configuration/object_detectors/) raadplegen.

Aanpassingen controleren

Als je na het herstarten naar System gaat kun je onder Detectors zien of de gekozen detector, zoals de Google Coral TPU in dit voorbeeld, daadwerkelijk als detector wordt gebruikt. Onder GPUS zie je of de geïntegreerde GPU wordt herkend en benut door Frigate. In je logboek onder Logs zie je overigens ook of de TPU wordt herkend en benut.

De geïntegreerde GPU wordt door Frigate benut voor hardware-versnelling.

Gebeurtenissen vastleggen

We gaan onze camera zodanig instellen dat personen en eventueel ook dieren en objecten worden gedetecteerd. Frigate kan bij elke detectie een snapshot en opname (clip) maken. We gaan stap voor stap al deze opties activeren voor de bewuste camera en daarna verder optimaliseren.

Detectie van personen

We gaan er eerst voor zorgen dat personen worden gedetecteerd. De configuratie voor de camera passen we daarvoor als volgt aan:

cameras:
  binnen:
    enabled: True
    ffmpeg:
      inputs:
        - path: rtsp://gebruiker:wachtwoord@ipadres:88/videoSub
          roles:
            - detect
        - path: rtsp://gebruiker:wachtwoord@ipadres:88/videoMain
          roles:
            - record
    detect:
      enabled: True

In regel 9-11 voegen we de hoofdstream toe met de rol record om aan te geven dat deze stream voor opnames moet worden gebruikt. Als je geen aparte stream hebt kun je eventueel de stream die je voor detectie gebruikt deze extra rol geven. In regel 12-13 zetten we detectie aan. Personen worden hierbij standaard gedetecteerd. Dit kunnen we eventueel uitbreiden om dieren en objecten te detecteren.

Dieren en objecten detecteren

We willen ook dieren en objecten detecteren. Daarvoor passen we de configuratie als volgt aan:

cameras:
  binnen:
    enabled: True
    ffmpeg:
      inputs:
        - path: rtsp://gebruiker:wachtwoord@ipadres:88/videoSub
          roles:
            - detect
        - path: rtsp://gebruiker:wachtwoord@ipadres:88/videoMain
          roles:
            - record
    detect:
      enabled: True
    objects:
      track:
        - person
        - dog
        - cat
        - bicycle
        - umbrella

In regel 14-20 geven we aan wat er zoal moet worden gedetecteerd. Als je dit weglaat zullen alleen personen worden gedetecteerd. Als voorbeeld hebben we dog, cat, bicycle en umbrella toegevoegd. In de documentatie vind je nog meer opties (https://docs.frigate.video/configuration/objects) zoals airplane, bus, train, boat en hotdog, maar we schatten in dat het merendeel niet van toepassing zal zijn.

Snapshots en opnames

We willen dat er ook snapshots en opnames worden gemaakt. Deze opties zetten we als volgt aan via regels 21-24:

cameras:
  binnen:
    enabled: True
    ffmpeg:
      inputs:
        - path: rtsp://gebruiker:wachtwoord@ipadres:88/videoSub
          roles:
            - detect
        - path: rtsp://gebruiker:wachtwoord@ipadres:88/videoMain
          roles:
            - record
    detect:
      enabled: True
    objects:
      track:
        - person
        - dog
        - cat
        - bicycle
        - umbrella
    record:
      enabled: True
    snapshots:
      enabled: True        

Bekijken snapshots en clips

Als je naar Cameras gaat zie je alle actieve camera’s. Per camera kun je naar de bijbehorende gebeurtenissen (Events) of opnames (Recordings) Klik je op een camerabeeld dan zie je daaronder ook handig gerubriceerd wat er zoal is gedetecteerd. Op onderstaande afbeelding zie je dat bijvoorbeeld al fietsen, katten en personen zijn gedetecteerd.

Je kunt dit verder onderzoeken door bijvoorbeeld alle gebeurtenissen met een fiets te bekijken. Ook kun je bijvoorbeeld op camera of datum filteren. In het voorbeeld hieronder zie je alle gebeurtenissen met een fiets, waarbij zelfs voorbijgangers in de straat worden herkend.

Hier zie je hoe goed Frigate is in het detecteren van fietsen.

Open je een gebeurtenis dan zijn een clip en snapshot beschikbaar. Een clip bevat een opname van precies deze gebeurtenis. Een snapshot toon een afbeelding met een box er omheen en een percentage dat aangeeft hoe zeker het model is dat het bijvoorbeeld een kat is:

Frigate laat zien hoe zeker het is dat het een kat heeft gedetecteerd.

Gebieden maskeren

Het is nuttig om bepaalde gebieden op het camerabeeld die vaak een ongewenste detectie geven te maskeren. Daarmee beperk je de systeembelasting. Denk aan bijvoorbeeld een boom of overhangende struik die beweegt in de wind. Je kunt zien welke gebieden veel detecties geven. Open hiervoor het camerabeeld, ga naar Debug, klik op Show options en zet een vinkje bij Motion boxes. Je ziet nu rode vakjes op het camerabeeld rond plekken weer beweging werd gedetecteerd.

Frigate kan laten zien wáár het beweging heeft gedetecteerd.

Zie je bijvoorbeeld struiken heen en weer gaan dan kun je daarvoor een masker toevoegen, zodat er in het vervolg geen onnodige analyse wordt gedaan. Hiervoor klik je op Mask & Zone creator. Klik op Add om een eerste masker toe te voegen. Klik op het camerabeeld op plekken waar je een punt toe wil voegen of houd een punt ingedrukt om deze te verslepen. Om op een andere plek een masker toe te voegen kies je weer Add.

Je ziet een hele reeks coördinaten zoals in het voorbeeld hieronder. Voorheen moest je deze handmatig aan de configuratie toevoegen. Nu hoef je alleen op Save te klikken. Controleer eventueel onder Config de nieuwe configuratie voor de bewuste camera.

motion:
  mask:
    - 508,610,616,680,855,661,1027,384,806,370,600,386REMOVE
    - 768,576,809,407,399,412

Uiteraard kun je ook bij andere camera’s maskers toevoegen. Na het maken van aanpassingen moet je Frigate herstarten zodat ze van kracht zijn. Herstarten kan via het menu (de drie puntjes rechtsboven).

Door maskers te maken kun je bepaalde gebieden markeren zodat ze geen detectie geven.

Zones maken

Je kunt in Frigate ook zones aanmaken voor delen van een bepaald camerabeeld. Dat werkt vergelijkbaar met het maskeren van gebieden via de Mask & Zone creator. Dit kan heel praktisch zijn. Zo kun je op het beeld van een oprit bijvoorbeeld een apart gedeelte aanwijzen met daarin het gebied rond de voordeur. Vaak zul je immers extra geïnteresseerd zijn in personen die voor de voordeur staan.

Zones helpen je ook om ongewenste meldingen tegen te gaan. Neemt de camera bijvoorbeeld een stukje van de weg mee, dan helpen zones je om auto’s die langsrijden of personen die langslopen te negeren, door jouw terrein als zone in te stellen. In je configuratie ziet dat er bijvoorbeeld uit zoals hieronder. Pas eventueel de naam zone_0 aan naar een herkenbare naam (zoals voordeur).

    zones:
      zone_0:
        coordinates: 1072,147,1058,408,895,435,693,398,692,113

Je kunt nu bijvoorbeeld onder Events alle gebeurtenissen zien waarbij een persoon werd gedetecteerd bij je deur door bij Labels voor Person te kiezen en bij Zones de zojuist aangemaakte zone rond je voordeur.

Door een zone te maken kun je gebeurtenissen in die specifieke zone bekijken.

Werken met filters

Het is vrij normaal als je af en toe een valse detectie in het overzicht met gebeurtenissen ziet. Soms komt dat door het achterliggende model. Een kat kan bijvoorbeeld voor een hond worden aangezien, of andersom. Er kunnen ook andere redenen zijn voor foute meldingen. Door de gebeurtenissen te analyseren kun je daar wat aan doen. We zullen hier enkele voorbeelden geven.

Score en threshold

We gaven eerder al aan dat er een bepaalde score wordt toegekend aan gedetecteerde personen, dieren en objecten. Neem het onderstaande voorbeeld. Hier wordt een hekje ten onrechte aangezien voor een hond. De score is met ongeveer 71% echter vrij laag. Er zijn meerdere manieren om dit op te lossen. In dit geval ligt het voor de hand om zelf waardes voor min_score en threshold te kiezen.

Met de waarde min_score bepaal je welke score nodig is voor Frigate om een object te gaan volgen. De threshold bepaalt of Frigate de detectie als positief moet beschouwen. Alleen dan zal het een gebeurtenis hiervoor aanmaken. In dit geval kies je bijvoorbeeld een threshold van 0.75. De detectie wordt dan verworpen als de score minder dan 75% is. In je configuratie kun je dat als hieronder instellen.

    objects:
      track:
      - person
      - dog
      filters:
        dog:
          min_score: 0.6
          threshold: 0.75

Oppervlakte van de box

Om valse meldingen verder te beperken kun je ook kijken naar de grootte van het gedetecteerde gebied. Het is handig als er al een (foute) detectie is geweest. Je kunt dan direct zien hoe groot het gedetecteerde gebied is. Daarvoor ga je naar Cameras en klik je bij de gewenste camera op Events. Klik dan op één van de gebeurtenissen en ga naar Snapshot.

Je ziet nu je snapshot met een box om het gedetecteerde gebied. Daarbij kun je ook de score in procenten aflezen met daarachter een getal. Dat getal is in feite de oppervlakte (lengte x breedte) van de box.

In het voorbeeld hieronder zien we als oppervlakte de waarde 186455. Het gaat om een box van grofweg 440×420 pixels op een snapshot van 1280×720 pixels. Hoe groot de box precies is kun je eventueel met een programma als Paint nagaan. Een kat is veel kleiner. Een filter is dus een logische optie. We schatten 240×240 pixels als maximale grootte wat heel ruim is. De oppervlakte is dan 57600 pixels. In je configuratiebestand kun je nu voor max_area de waarde 57600 opnemen. Een kat wordt genegeerd als de oppervlakte groter dan die waarde is.

De omvang van de box is veel groter dan de omvang van een kat.

Merk op dat je dit filter ook voor het eerdere voorbeeld met de hond kunt gebruiken. Een hond is vrijwel altijd kleiner dan het hek. Je kunt dan voor max_area een waarde nemen die net wat kleiner is dan het detecteerde gebied.

Verhoudingen van de box

Behalve naar de oppervlakte van de box kun je ook kijken naar de verhoudingen van de box. Ofwel: is het een staande of liggende box? Hiervoor kun je de filters min_ratio en max_ratio gebruiken.  Een ratio van 1 is in feite een vierkante box. Kleiner betekent een staande box. De waarde 0.5 is bijvoorbeeld een relatief hoge en smalle box. Groter betekent een liggende box. De waarde 2 is een relatief brede en platte box.

Optioneel: gebruik van go2rtc

Binnen Frigate kun je optioneel gebruik maken van go2rtc. Dit geeft je diverse voordelen., Je kunt bijvoorbeeld naar live beelden kijken in een hogere resolutie met WebRTC of MSE. Ook kun je go2rtc als een soort relay gebruiken, zodat er minder (aparte) verbindingen met de IP-camera nodig zijn.

In je configuratiebestand configureer je eerst bovenaan go2rtc met de gewenste streams, zoals in het voorbeeld hieronder. Je kunt daarbij extra opties voor ffmpeg opgeven. Hier vragen we bijvoorbeeld in regel 13 en 16 om audio te converteren naar het formaat opus.

mqtt: ...

detectors: ...

go2rtc:
  streams:
    oprit:
    - rtsp://gebruiker:wachtwoord@ipadres:554/Streaming/Channels/101
    oprit_sub:
    - rtsp://gebruiker:wachtwoord@ipadres:554/Streaming/Channels/103
    woonkamer:
    - rtsp://gebruiker:wachtwoord@ipadres:88/videoMain
    - ffmpeg:woonkamer#audio=opus
    woonkamer_sub:
    - rtsp://gebruiker:wachtwoord@ipadres:88/videoMain
    - ffmpeg:woonkamer_sub#audio=opus

Bij de configuratie van de camera’s pas je nu de verwijzing aan zodat go2rtc (via 127.0.0.1:8554) wordt aangesproken, zoals je in het voorbeeld hieronder ziet.

Merk op dat we ook hier enkele extra opties hebben toegevoegd. Met output_args in regel 17-18 geven we aan dat we ook audio willen opnemen voor de bewuste camera. Standaard zal audio namelijk niet worden opgenomen. In regel 20 en 24 hebben we ?video&audio toegevoegd om naast video ook audio op te vragen bij go2rtc.

cameras:
  oprit:
    ffmpeg:
      hwaccel_args: preset-vaapi
      inputs:
      - path: rtsp://127.0.0.1:8554/oprit_sub
        input_args: preset-rtsp-restream
        roles:
        - detect
      - path: rtsp://127.0.0.1:8554/oprit
        input_args: preset-rtsp-restream
        roles:
        - record
  woonkamer:
    ffmpeg:
      hwaccel_args: preset-vaapi
      output_args:
        record: preset-record-generic-audio-aac
      inputs:
      - path: rtsp://127.0.0.1:8554/woonkamer_sub?video&audio
        input_args: preset-rtsp-restream
        roles:
        - detect
      - path: rtsp://127.0.0.1:8554/woonkamer?video&audio
        input_args: preset-rtsp-restream
        roles:
        - record

Ten slotte

We hopen dat je met de hulp van dit artikel een goede start kunt maken! Er zal wat tweaken nodig zijn om bijvoorbeeld jouw camerastreams goed te laten werken. Ook de optimale detectie van bijvoorbeeld personen vraagt soms wat aanpassingen. De integratie met Home Assistant is hier niet in detail besproken. Maar dat bewaren we graag voor een toekomstig artikel als hier behoefte aan is.

Deel dit artikel
Deelbare link
Vorig artikel

Installatie van Docker en Compose onder Ubuntu

Volgend artikel

Ollama: bouw je eigen open-source ChatGPT

Comments 1
Geef een reactie

Je e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *

Gerelateerde artikelen
Deze website gebruikt cookies. Leer meer over het gebruik van cookies: privacybeleid