Frigate NVR - OpenCV, Tensorflow und MQTT
Frigate NVR - Ein vollständiger und lokaler NVR für Home Assistant mit AI-Objekterkennung. Verwendet OpenCV und Tensorflow zur lokalen Objekterkennung in Echtzeit für IP-Kameras.
Installation
Frigate ist ein Docker-Container, der auf jedem Docker-Host ausgeführt werden kann, auch als HassOS-Addon. Beachten Sie, dass ein Home Assistant Addon nicht dasselbe ist wie die Integration. Die Integration ist erforderlich, um Frigate in Home Assistant zu integrieren.
Abhängigkeiten
MQTT-Broker - Frigate benötigt einen MQTT-Broker. Wenn Sie Home Assistant verwenden, müssen Frigate und Home Assistant mit demselben MQTT-Broker verbunden sein.
Speicher
Frigate verwendet die folgenden Speicherorte für Lese-/Schreibvorgänge im Container. Docker-Volume-Mappings können verwendet werden, um diese auf einen beliebigen Speicherort auf Ihrem Host-Rechner abzubilden.
/media/frigate/clips
: Wird für die Speicherung von Snapshots verwendet. In Zukunft wird es wahrscheinlich von Clips in Snapshots umbenannt werden. Die Dateistruktur hier kann nicht geändert werden und ist nicht dafür gedacht, manuell durchsucht oder verwaltet zu werden./media/frigate/recordings
: Interner Systemspeicher für Aufnahmesegmente. Die Dateistruktur kann hier nicht geändert werden und ist nicht zum Durchsuchen oder manuellen Verwalten vorgesehen./media/frigate/frigate.db
: Standardspeicherort für die Sqlite-Datenbank. Während des Betriebs von frigate werden neben dieser Datei auch mehrere andere Dateien angezeigt. Wenn Sie den Speicherort der Datenbank verschieben (häufig erforderlich, wenn Sie ein Netzlaufwerk unter /media/frigate verwenden), empfiehlt es sich, ein Volume mit Docker unter /db zu mounten und den Speicherort der Datenbank in der Konfigurationsdatei in/db/frigate.db
zu ändern.- /tmp/cache": Cache-Speicherort für Aufzeichnungssegmente. Die ersten Aufnahmen werden hierher geschrieben, bevor sie geprüft, in mp4 konvertiert und in den Ordner "recordings" verschoben werden.
/dev/shm
: Es wird nicht empfohlen, dieses Verzeichnis zu ändern oder es mit Docker abzubilden. Dies ist der Speicherort für rohe dekodierte Frames im gemeinsamen Speicher und seine Größe wird durch die folgenden shm-Größenberechnungen beeinflusst.- /config/config.yml`: Standardspeicherort der Konfigurationsdatei.
mkdir -p /opt/frigate/storage
Sollten Sie hier einen anderen Pfad wählen, müssen Sie diesen entsprechend später auch in der Docker-Compose Datei anpassen.
Berechnen der shm-size
Frigate nutzt den gemeinsamen Speicher, um Frames während der Verarbeitung zu speichern. Die standardmäßig von Docker bereitgestellte shm-Größe beträgt 64m.
Die standardmäßige shm-Größe von 64m ist für Setups mit 2 oder weniger 1080p-Kameras ausreichend. Wenn frigate mit der Meldung "Bus error" beendet wird, liegt das wahrscheinlich daran, dass Sie zu viele hochauflösende Kameras haben und eine höhere shm Größe angeben müssen.
Sie können die erforderliche shm Größe für jede Kamera mit der folgenden Formel berechnen:
(width * height * 1.5 * 9 + 270480)/1048576 = <shm Größe in MB>
Erstellen der Konfigurationsdatei
Konfigurieren Sie den MQTT-Server
nano /opt/frigate/config.yml
Frigate benötigt einen funktionierenden MQTT-Server. Beginnen Sie, indem Sie den Abschnitt mqtt auf der obersten Ebene in Ihrer Konfiguration hinzufügen:
mqtt:
host: <ip of your mqtt server>
user: <username>
password: <password>
Der MQTT Broker kann z.B. aus Ihrer Home Assistant Installation stammen. Im Fall unten nehme ich den MQTT Broker einer meiner INSTAR Kameras:
mqtt:
host: 192.168.2.120
user: admin
password: instar
Konfigurieren Sie Ihre Cameras
cameras:
fullhd31: # <------ Name der Kamera
ffmpeg:
inputs:
- path: rtsp://admin:instar@192.168.2.31:554/11 # <----- RTSP Pfad der Kamera
roles:
- detect
- rtmp
detect:
width: 1920 # <---- Auflösung des gewählten RTSP Streams
height: 1080 # <---- Auflösung des gewählten RTSP Streams
wqhd120: # <------ Name der Kamera
ffmpeg:
inputs:
- path: rtsp://admin:instar@192.168.2.120:554/livestream/12 # <----- RTSP Pfad der Kamera
roles:
- detect
- rtmp
detect:
width: 1920 # <---- Auflösung des gewählten RTSP Streams
height: 1080 # <---- Auflösung des gewählten RTSP Streams
Herunterladen des Docker Image
Das Docker-Image wird auf Github erstellt und kann von dort heruntergeladen werden - Docker Images. Das - zum Zeitpunkt des Schreibens - neueste Image kann mit dem folgenden Befehl heruntergeladen werden:
docker pull ghcr.io/blakeblackshear/frigate:0.12.0-beta5
Docker-Compose
Bearbeiten Sie die folgende Docker-Compose-Datei entsprechend dem Container-Image und dem Konfigurationspfad, den Sie oben gewählt haben:
nano /opt/frigate/docker-compose.yml
version: "3.9"
services:
frigate:
container_name: frigate
privileged: true # dies ist nicht für alle Konfigurationen erforderlich
restart: unless-stopped
image: ghcr.io/blakeblackshear/frigate:0.12.0-beta5
shm_size: "64mb" # Update für Ihre Kameras basierend auf der obigen Berechnung
devices:
- /dev/bus/usb:/dev/bus/usb # besteht den USB Coral, muss für andere Versionen modifiziert werden
- /dev/apex_0:/dev/apex_0 # peine PCIe-Koralle einbauen, folgen Sie den Anweisungen des Treibers hier https://coral.ai/docs/m2/get-started/#2a-on-linux
- /dev/dri/renderD128 # für intel hwaccel, muss für Ihre Hardware aktualisiert werden
volumes:
- /etc/localtime:/etc/localtime:ro
- /opt/frigate/config.yml:/config/config.yml:ro
- /opt/frigate/storage:/media/frigate
- type: tmpfs # Optional: 1 GB Arbeitsspeicher, reduziert den Verschleiß von SSD/SD-Karten
target: /tmp/cache
tmpfs:
size: 1000000000
ports:
- "5000:5000"
- "1935:1935" # RTMP feeds
environment:
FRIGATE_RTSP_PASSWORD: "password"
Docker CLI
Wenn Sie Docker-Compose nicht verwenden können, können Sie den Container mit diesem Befehl starten:
docker run -d \
--name frigate \
--restart=unless-stopped \
--mount type=tmpfs,target=/tmp/cache,tmpfs-size=1000000000 \
--device /dev/bus/usb:/dev/bus/usb \
--device /dev/dri/renderD128 \
--shm-size=64m \
-v /opt/frigate/storage:/media/frigate \
-v /opt/frigate/config.yml:/config/config.yml:ro \
-v /etc/localtime:/etc/localtime:ro \
-e FRIGATE_RTSP_PASSWORD='password' \
-p 5000:5000 \
-p 1935:1935 \
ghcr.io/blakeblackshear/frigate:0.12.0-beta5
Web User Interface
Wenn der Docker-Container gestartet ist, gehen Sie zu Ihrem Webbrowser (ich hatte ein Problem mit Firefox - aber Chrome funktionierte) und öffnen Sie die folgende Adresse:
http://localhost:5000
Sie sollten nun alle Ihre Kameras sehen können:
Und da wir eine unserer Kameras als MQTT-Broker konfiguriert haben meldet Frigate jetzt Softwarezustände und Ereignisse unter frigate/
: