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

Frigate NVR - OpenCV, Tensorflow und MQTT

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:

Frigate NVR - OpenCV, Tensorflow und MQTT

Und da wir eine unserer Kameras als MQTT-Broker konfiguriert haben meldet Frigate jetzt Softwarezustände und Ereignisse unter frigate/:

Frigate NVR - OpenCV, Tensorflow und MQTT