Frigate
Videobewaking 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).
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 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
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