Skip to main content

Frigate

174165.jpgVideobewaking is niet langer enkel voor grote bedrijven. Met betaalbare camera's en open-source software zoals frigate,... kan iedereen zijn huis of bedrijf monitoren en beveiligen.

Hardware

Frigate kan je op zowat alle hardware installeren. Zelfs een Raspberry PI is geschikt. Het enige waar je wat moet over nadenken is de schijfruimte. Want hoe lang wil je bepaalde beelden stockeren? Hoe meer diskruimte, des te langer je beelden kan herbekijken in de tijd.

Een ander interessant stuk is ook een TPU. Dit is een speciale processor die AI helpt beelden te analyseren. En laat frigate daar nu juist heel sterk in zijn. Dus dit is zeker het aankopen te overwegen. In mijn voorbeeld heb ik een Coral USB Accelerator aangekocht. Het is niet zo evident dit te configureren, maar eens het draait, ontlast het je computer (je CPU) heel hard.

Installatie

De voorkeur gaat uit van een docker image. Daar ik proxmox gebruik, dus eerst een VM onder proxmox, en daaronder dan docker.
Let op, OS gebruik Ubuntu 22 !!! Indien hoger, opletten met python versie en coral driver dat niet geinstalleerd kan worden (nog niet).

En hoe erg is het niet? Ik heb de voorbije 3 dagen zitten prutsen om mijn frigate server te herinstalleren na een hypervisor crash (eigen fout). En nu ik alles terug netjes heb, kom ik tot de vaststelling dat ik hier alles al es uitgeshreven had? Enfin, de nieuwe installatie is ahv een LXC container, is nog iets beter qua performance voor je server. ;) Een geluk bij een ongeluk? En zo forceren we onszelf om te blijven investeren in ...

Voorlopig draait alles. En dit dankzij een betere USB kabel, en mirgratie naar LXC container.

LXC Container

ahv volgende manual:

 
bij path even opzoeken wat de het juist adres is van de usb...
Doorlussen in proxmox
docker compose voorbeeld:
      - /dev/bus/usb/002/006:/dev/bus/usb/002/006
 
Docer compose

/srv/frigate/docker-compose.yml 

services:
  frigate:
    container_name: frigate
    restart: unless-stopped
    stop_grace_period: 30s
    image: ghcr.io/blakeblackshear/frigate:stable
    shm_size: "1024mb"
    environment:
      - OMP_NUM_THREADS=4
      - ONNX_NUM_THREADS=4
      - ONNX_DISABLE_CPU_AFFINITY=1
    volumes:
      - /srv/frigate/config:/config
      - /srv/frigate/data:/media/frigate
      - type: tmpfs 
        target: /tmp/cache
        tmpfs:
          size: 1000000000
    devices:
      - /dev/bus/usb:/dev/bus/usb
      - /dev/bus/usb/002/006:/dev/bus/usb/002/006
    ports:
      - "8971:8971"
      - "5000:5000"
      - "8554:8554"
Deel van frigate config

/srv/frigate/config/config.yaml | head -50


mqtt:
  host: 192.168.xxx.xxx
  port: 1883
  user: mqtt
  password: xxxxxxxx
  topic_prefix: homeassistant
  client_id: frigate
  stats_interval: 60

ffmpeg:
  output_args:
    record: preset-record-generic-audio-aac

detectors:
  coral:
    device: usb
    enabled: true
    type: edgetpu


------

VM Container (verouderd).

apt install docker -y

apt install docker-compose -y

docker volume create portainer_data

docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest

 Handige commando's

Op de proxmox machine:

lsusb
Bus 001 Device 018: ID 1a6e:089a Global Unichip Corp.
Bus 002 Device 007: ID 18d1:9302 Google Inc.


~# ls -l /dev/dri/by-path/
total 0
lrwxrwxrwx 1 root root 13 Sep 5 05:09 pci-0000:00:02.0-render -> ../renderD128

Onder lsusb zie je 2 nodes staan. Dit is de standaard (Global Unichip Corp.), of degene eens de drivers onder linux zijn geladen.

De docker image (stack):

   services:
  frigate:
    container_name: frigate
    privileged: true
    restart: unless-stopped
    image: ghcr.io/blakeblackshear/frigate:stable
    cap_add:
      - CAP_PERFMON
    shm_size: "512mb"
    devices:
      - /dev/bus/usb:/dev/bus/usb
      - /dev/dri/renderD128:/dev/dri/renderD128
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /opt/frigate/config/config.yml:/config/config.yml:rw
    ports:
      - "5000:5000"
      - "1935:1935"
    environment:
      FRIGATE_RTSP_PASSWORD: "StrongPassword"

ref: http://ghcr.io/blakeblackshear/frigate:stable

En tot slot een voorbeeld van de config.yml onder frigate:

mqtt:
  enabled: true
  host: 192.168.XXX.216
  port: 1883
  user: mqtt
  password: XXX
  topic_prefix: frigate
  stats_interval: 60

ffmpeg:
  output_args:
    record: preset-record-generic-audio-aac # Enable audio with video

detectors:
  coral:
    type: edgetpu
    device: usb

detect:
  stationary:
    interval: 50
    threshold: 50

birdseye:
  enabled: true
  width: 1920
  height: 1080
  quality: 8
  mode: motion

record:
  enabled: true
  retain:
    days: 31
    mode: motion
  events:
    retain:
      default: 10

logger:
  default: info

cameras:
  Perry: # <<< VOORDEUR >>>
    enabled: true
    ffmpeg:
      inputs:
        - path: rtsp://XXX:XXX@perry:554/mpeg/media.amp?profile=profile_hd
          roles:
            - detect
            - record
    detect:
      enabled: true
      width: 1280
      height: 720
    objects: # This is the important part for specifying objects (linked with the coral detector!)
      track:
        - person
        - cat
        - car
        - bicycle
        - motorcycle
    ui:
      order: 1
    motion:
      mask: 0.571,0.468,0.783,0.477,0.788,0.543,0.57,0.512
    zones: {}

  abigail: # <<< OPRIT >>>
    enabled: true
    ffmpeg:
      inputs:
        - path: rtsp://XXX:XXX@abigail:80/videoMain
          roles:
            - detect
            - record
    detect:
      enabled: true
      width: 1280
      height: 720
    objects: # This is the important part for specifying objects (linked with the coral detector!)
      track:
        - person
        - cat
        - car
        - bicycle
        - motorcycle
    motion:
      mask: 0.738,0.054,0.92,0.054,0.92,0.003,0.728,0.004
    ui:
      order: 2

  Napoleon: # <<< ATELIER >>>
    enabled: true
    ffmpeg:
      inputs:
        - path: rtsp://XXX:XXX@napoleon:80/videoMain
          roles:
            - detect
            - record
    detect:
      enabled: true
      width: 1280
      height: 720
    objects: # This is the important part for specifying objects (linked with the coral detector!)
      track:
        - person
        - cat
        - car
        - bicycle
        - motorcycle
    zones: {}
    ui:
      order: 4
  
  Roquefort: # <<< ZIJTUIN >>>
    enabled: true
    ffmpeg:
      inputs:
        - path: rtsp://XXX:XXX@Roquefort:80/videoMain
          roles:
            - detect
            - record
    detect:
      enabled: true
      width: 1280
      height: 720
    objects: # This is the important part for specifying objects (linked with the coral detector!)
      track:
        - person
        - cat
    motion:
      mask: 1,0.008,0.999,0.901,0.481,0
    ui:
      order: 7

  
  Duchess:  # <<< Atelier - Stock >>>
    enabled: true
    ffmpeg:
      inputs:
        - path: rtsp://XXX:XXX@Duchess:80/videoMain
          roles:
            - detect
            - record
    detect:
      enabled: true
      width: 1280
      height: 720
    objects: # This is the important part for specifying objects (linked with the coral detector!)
      track:
        - person
        - cat
        - car
        - bicycle
        - motorcycle
      filters:
        car: {}
    zones: {}
    motion: {}
    ui:
      order: 6

  Toulouse:   # <<< Atelier - Bureau >>> 
    enabled: true
    ffmpeg:
      inputs:
        - path: rtsp://XXX:XXX@Toulouse:80/videoMain
          roles:
            - detect
            - record
    detect:
      enabled: true
      width: 1280
      height: 720
    objects: # This is the important part for specifying objects (linked with the coral detector!)
      track:
        - person
        - cat
        - car
        - bicycle
        - motorcycle
      filters:
        person: {}
        bicycle: {}
    zones: {}
    motion:
      mask: 
        0.207,0.885,0.295,0.784,0.377,0.666,0.499,0.617,0.569,0.657,0.606,0.709,0.594,0.753,0.581,0.801,0.582,0.862,0.584,0.986,0.253,0.99
    ui:
      order: 5

  Froufrou: # <<< ACHTERTUIN >>>
    ffmpeg:
      inputs:
        - path: rtsp://XXX:XXX@froufrou:554/h264Preview_01_sub
        #- path: rtsp://XXX:XXX@froufrou:554/h264Preview_01_main
          roles:
            - detect
            - record
      hwaccel_args: []
    detect:
      enabled: true
      width: 640 #1152 #2304
      height: 480 #648 #1296
      fps: 5 #8
    onvif:
      host: froufrou
      port: 8000
      user: XXX
      password: XXX
    objects: # This is the important part for specifying objects (linked with the coral detector!)
      track:
        - person
        - cat
    ui:
      order: 8

  Lafayette: # <<< PARKING >>>
    enabled: true
    ffmpeg:
      inputs:
        - path: rtsp://XXX:XXX@Lafayette:80/videoMain
          roles:
            - detect
            - record
    detect:
      enabled: true
      width: 1280
      height: 720
    objects: # This is the important part for specifying objects (linked with the coral detector!)
      track:
        - person
        - cat
        - car
        - bicycle
        - motorcycle
    zones: {}
    motion:
      mask: 0.241,0.117,0.3,0.119,0.29,0.003,0.223,0.001
    ui:
      order: 3

camera_groups:
  Overzicht:
    order: 1
    icon: LuSwitchCamera
    cameras:
      - birdseye
      - Duchess
      - Froufrou
      - Napoleon
      - Lafayette
      - abigail
      - Roquefort
      - Toulouse
      - Perry

version: 0.14

Naslag