Frigate NVR - Videoanalyse mit AI
Spätestens, wenn Du Netzwerkkameras hast, möchtest Du diese auch zur Überwachung einsetzen (auf privatem Gelände natürlich). Hierfür biete viele Hersteller All-In-One Lösungen mit einem Zentralen Recorder an, welcher dann die eigenen Kameras einbinden kann und bei Bildveränderungen Aufzeichnungen auf eine Festplatte ablegt. Da heutzutage aber eh nur noch IP-Kameras verwendet werden, kann man das Thema auch selbst in die Hand nehmen. Eventuell sagt Dir MotionEye, iSpy oder Shinobi etwas. Eine etwas modernere Lösung ist Frigate. Hier werden verschiedene Kamera-Streams live analysiert und Objekte mit künstlicher Intelligenz erkannt.
Voraussetzungen
- Debian (12) nativ - z.B. auf einem Mini PC
- Docker
- Portainer (optional)
Video
Grundsystem
Wie in der Dokumentation empfohlen, nutze ich hier ein natives Linux-System mit Docker. Wie man so ein System aufsetzt, habe ich hier erklärt.
Portainer
Um Dir die Arbeit mit Docker etwas leichter zu machen, kannst Du Portainer nutzen. Dieses Stück Open Source Software läuft ebenfalls als Container und hilft Dir dabei, Deine Container und Images auf einer grafischen (Web-)Oberfläche zu verwalten. Zwingend notwendig ist das natürlich nicht für dieses Video.
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
sudo mkdir -p /media/frigate/storage/
sudo touch /media/frigate/config.yml
Hier meine Beispiel-Datei für docker-compose
:
version: "3.9"
services:
frigate:
container_name: frigate
privileged: true # this may not be necessary for all setups
restart: unless-stopped
image: ghcr.io/blakeblackshear/frigate:stable
shm_size: "128mb"
devices:
- /dev/bus/usb:/dev/bus/usb # passes the USB Coral, needs to be modified for other versions
- /dev/dri/renderD128 # for intel hwaccel, needs to be updated for your hardware
volumes:
- /etc/localtime:/etc/localtime:ro
- /media/frigate/config.yml:/config/config.yml
- /media/frigate/storage/:/media/frigate
- type: tmpfs # Optional: 1GB of memory, reduces SSD/SD Card wear
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: "test1234"
Meine Beispiel-Config
Im ersten Schritt wird die Erkennung deaktiviert, um zu testen ob der Stream läuft.
mqtt:
enabled: False
cameras:
cam1:
ffmpeg:
hwaccel_args: preset-vaapi
inputs:
- path: rtsp://admin:geheimpasswort@10.10.9.90:554/11
roles:
- detect
detect:
enabled: False # <---- disable detection until you have a working camera feed
width: 1920
height: 1080
Am Ende des Videos habe ich dann noch Aufzeichnungen konfiguriert:
mqtt:
enabled: False
detectors:
coral:
type: edgetpu
device: usb
objects:
track:
- person
- dog
- cup
- eye_glasses
filters:
person:
min_score: 0.6
record:
enabled: True
events:
pre_capture: 5
post_capture: 5
objects:
- person
- dog
cameras:
cam1:
ffmpeg:
hwaccel_args: preset-vaapi
inputs:
- path: rtsp://admin:geheimpasswort@10.10.9.90:554/11
roles:
- detect
- record
detect:
enabled: True
width: 1920
height: 1080
cam2:
ffmpeg:
hwaccel_args: preset-vaapi
inputs:
- path: rtsp://streamer:geheimpasswort@10.10.9.91:554/h264_stream
roles:
- detect
- record
detect:
enabled: True
width: 640
height: 480
Transparenz-Hinweis (Level 1)
An diesem Beitrag ist kein Hersteller beteiligt! Sämtliche Produkte habe ich selbst gekauft und trage die kompletten Kosten für diesen Beitrag alleine! Die Inhalte wurden somit von niemandem gesehen oder abgestimmt. Es handelt sich zu 100% um meine persönliche Meinung und Erfahrung!