Schneller Aufbau eines On-Device-NVR-Projekts auf Basis von RK3576 / Docker / RKNN / Frigate.

Frigate ist eine Open-Source-NVR mit Schwerpunkt auf lokaler, echtzeitbasierter KI-Objekterkennung. Die gesamte Inferenz läuft auf Ihrer eigenen Hardware – Kamerastreams werden niemals auf einen Cloud-Server hochgeladen – was sowohl die Privatsphäre schützt als auch teure monatliche Cloud-AI-Abonnementgebühren vermeidet. Frigate unterstützt benutzerdefinierte Erkennungszonen und Maskierungszonen und integriert sich nahtlos in Home Assistant, um NVR-Feeds in Smart-Home-Automatisierungen einzubinden.
Diese Anleitung zeigt, wie Sie Frigate auf dem reComputer RK3576 mit Docker Compose bereitstellen und den im RK3576 integrierten Rockchip-MPP-Stack (Hardware-Decodierung) + RGA (2D-Beschleunigung) + RKNN (NPU-Inferenz) für Echtzeit-Videoanalysen mit geringer CPU-Auslastung nutzen.
Erste Schritte
In dieser Anleitung folgen wir dem offiziellen Bereitstellungsablauf und zeigen, wie Sie eine Frigate-Docker-Umgebung konfigurieren, die lokale KI-Erkennung an RTSP-Kamerastreams auf dem reComputer RK3576 durchführt.
Voraussetzungen gemäß offizieller Dokumentation
Frigate empfiehlt offiziell:
- Ein Debian-basiertes Betriebssystem als bevorzugter Host;
- VMs werden nicht empfohlen (Proxmox, ESXi, Virtualbox) — einige Proxmox-Konfigurationen können funktionieren, erhöhen jedoch die Komplexität für Coral/GPU-Passthrough;
- Windows wird offiziell nicht unterstützt (WSL / Virtualbox können möglicherweise funktionieren, aber GPU/Coral-Passthrough ist schwierig).
Für Rockchip-Plattformen überprüfen Sie die Version Ihres Systemabbilds:
$ uname -r
5.10.xxx-rockchip
$ ls /dev/dri
by-path card0 card1 renderD128 renderD129
$ sudo cat /sys/kernel/debug/rknpu/version
RKNPU driver: v0.9.2Berechnung des benötigten Shared Memory
Frigate verwendet Shared Memory, um Videoframes zu verarbeiten. Die von Docker bereitgestellte Standard-shm-size beträgt 64 MB. Für ein Erkennungsszenario mit zwei 720p-Kameras ist die Standardgröße von 128 MB Shared Memory ausreichend. Wählen Sie die Shared-Memory-Allokation basierend auf Ihrer tatsächlichen Situation, um die Ressourcen optimal zu nutzen.
Wir empfehlen die Verwendung des offiziellen Online-Rechners: https://docs.frigate.video/frigate/installation#calculating-required-shm-size
Download-Link abrufen
Besuchen Sie die offizielle Website https://docs.frigate.video/frigate/installation#docker und wählen Sie die folgenden Optionen, um die Installationsanweisungen zu erhalten.

Füllen Sie den Abschnitt Storage Paths entsprechend Ihren tatsächlichen Anforderungen aus (Sie können einige leer lassen, falls nicht erforderlich). Unter Other Options tragen Sie die oben berechnete Speichergröße ein; Sie können auch manuell ein Passwort festlegen (optional).
Kopieren Sie anschließend die Installationsanweisungen:
services:
frigate:
container_name: frigate
privileged: true # This may not be necessary for all setups
restart: unless-stopped
stop_grace_period: 30s # Allow enough time to shut down the various services
image: ghcr.io/blakeblackshear/frigate:stable-rk
shm_size: "512mb" # Update for your cameras based on SHM calculation
security_opt:
- apparmor=unconfined
- systempaths=unconfined
devices:
- /dev/dma_heap # Rockchip DMA heap
- /dev/rga # Rockchip RGA
- /dev/mpp_service # Rockchip MPP service
- /dev/dri # Intel/AMD GPU hardware acceleration
volumes:
- /etc/localtime:/etc/localtime:ro # Sync host time
- /path/to/your/config:/config # Config file directory
- /path/to/your/storage:/media/frigate # Recording storage directory
- type: tmpfs # 1GB in-memory filesystem for recording segment storage
target: /tmp/cache
tmpfs:
size: 1000000000
- /sys/:/sys/:ro # Rockchip system info
ports:
- "8554:8554" # Access RTSP feeds from go2rtc
- "8971:8971" # Authenticated UI and API access (default HTTPS)
- "8555:8555" # WebRTC over TCP
- "8555:8555/udp" # WebRTC over UDP
environment:
TZ: "Asia/Shanghai" # TimezoneOder Sie können die getestete und verifizierte Konfiguration direkt von GitHub beziehen: https://github.com/doublelf/RK_friigate_dockeryml
services:
frigate:
container_name: frigate
privileged: true # Privilegierten Modus verwenden
restart: unless-stopped
stop_grace_period: 30s # Ausreichend Zeit zum Herunterfahren der Dienste einräumen
image: docker.cnb.cool/frigate-cn/frigate:stable-rk # Hier handelt es sich um eine inländische Mirror-URL; die Original-URL ist ghcr.io/blakeblackshear/frigate:stable-rk
shm_size: "512mb" # Aktualisieren Sie diesen Wert für Ihre Kameras gemäß der obigen Berechnung
devices:
- /dev/dri:/dev/dri # Für GPU-Hardwarebeschleunigung
- /dev/dma_heap # RockChip DMA-Heap
- /dev/rga # RockChip RGA
- /dev/mpp_service # RockChip MPP-Dienst
security_opt:
- apparmor=unconfined
- systempaths=unconfined
volumes:
- /etc/localtime:/etc/localtime:ro # Host-Zeit synchronisieren
- /home/seeed/frigate/config:/config # "/home/seeed/frigate/config" ist der Pfad auf Ihrem Host, an dem Sie Konfigurationsdateien speichern möchten
- /home/seeed/frigate/video:/media/frigate # "/home/seeed/frigate/video" ist der Pfad auf Ihrem Host, an dem Sie Überwachungsaufnahmen speichern möchten
- type: tmpfs # 1 GB RAM als temporären Speicher für Aufnahmesegmente verwenden
target: /tmp/cache
tmpfs:
size: 1000000000
- /sys/:/sys/:ro # RockChip-Systeminformationen
ports:
- "8971:8971" # Standardport des Frigate-Dienstes, standardmäßig HTTPS
- "8554:8554" # RTSP-Videostream
- "8555:8555/tcp" # WebRTC über TCP
- "8555:8555/udp" # WebRTC über UDP
environment:
FRIGATE_RTSP_PASSWORD: "password" # RTSP-Passwort; bitte auf das gewünschte Passwort ändern
TZ: "Asia/Shanghai" # Auf die Zeitzone China +8 einstellen
HF_ENDPOINT: "https://huggingface.mirror.frigate-cn.video" # Von uns bereitgestellter Huggingface-Inlandsmirror für beschleunigte Downloads einiger von Frigate benötigter Modelle
GITHUB_ENDPOINT: "https://github.mirror.frigate-cn.video" # Von uns bereitgestellter GitHub-Inlandsmirror für beschleunigte Downloads einiger von Frigate benötigter Modelle
TF_KERAS_MOBILENET_V2_WEIGHTS_URL: https://cnb.cool/frigate-cn/mirrors/storage.googleapis/-/git/raw/main/tensorflow/keras-applications/mobilenet_v2/mobilenet_v2_weights_tf_dim_ordering_tf_kernels_0.35_224_no_top.h5 # Vom Klassifikationsmodell benötigte GewichtungsdateiErstellen Sie die Datei docker-compose.yml, fügen Sie den obigen Inhalt ein und führen Sie im Terminal Folgendes aus:
docker compose up -dNach Abschluss des Builds ist Frigate lokal eingerichtet. Anschließend können Sie die Konfigurationsdatei ändern und nach dem Start den Betrieb im Backend überprüfen.
Offizielle minimale config.yml
Die folgende config.yml ist eine minimale lauffähige Konfiguration: 1 RTSP-Kamera + MQTT deaktiviert + Standard-Detector (CPU), die standardmäßig nach der Installation von Frigate bereitgestellt wird. Wenn Sie diese Datei nicht haben, müssen Sie sie manuell erstellen.
mkdir -p ~/frigate/config
tee ~/frigate/config/config.yml > /dev/null << 'EOF'
mqtt:
enabled: False
cameras:
my_cam:
ffmpeg:
inputs:
- path: rtsp://viewer:{FRIGATE_RTSP_PASSWORD}@<camera-ip>:554/stream
roles:
- detect
detect:
width: 1280
height: 720
detect:
fps: 5
EOFErsetzen Sie <camera-ip> durch die tatsächliche IP Ihrer Kamera. Speichern Sie diese Datei unter /path/to/your/config/config.yml (also das in docker-compose gemappte /config).
Diese Konfiguration kann auch so geändert werden, dass mehrere Kameras gleichzeitig laufen. Sie müssen nur weitere Strukturen unter der obigen Konfiguration hinzufügen. Die folgende Konfiguration zeigt den Start zweier Kameras mit unterschiedlichen Detailkonfigurationen:
mqtt:
enabled: false
face_recognition:
enabled: true
go2rtc:
streams:
usb_camera:
- ffmpeg:device?video=0&video_size=640x480#video=h264
cameras:
usb_camera:
ffmpeg:
inputs:
- path: rtsp://127.0.0.1:8554/usb_camera
input_args: preset-rtsp-restream
roles:
- detect
- record
detect:
width: 640
height: 480
enabled: false # Erkennung zunächst deaktivieren, um zuerst den Videostream zu testen
record:
enabled: true
continuous:
days: 0 # Bei 0 werden standardmäßig keine Überwachungsvideos ohne angegebenen Typ aufgenommen
alerts: # Hier wird angegeben, dass nur Alarmvideos aufgenommen werden; die obige Einstellung wird ignoriert
retain:
days: 30
mode: motion
zones:
zone_b32f13ac:
coordinates: 0.867,0.093,0.417,0.115,0.437,0.859,0.974,0.85
loitering_time: 0
friendly_name: Zone 1
video_test: # Geben Sie dieser Testkamera einen Namen
ffmpeg:
inputs:
- path: /home/seeed/frigate/test.mp4 # Pfad zu Ihrer Videodatei
input_args: -re -stream_loop -1 -fflags +genpts
roles:
- detect
- record
detect:
enabled: true
record:
enabled: false # Aufnahme während des Tests wird empfohlen zu deaktivieren
snapshots:
enabled: false # Snapshots während des Tests wird empfohlen zu deaktivieren
version: 0.17-0cameras, video_test jeweils eingerückt starten, jeder stellt eine Kamerakonfiguration dar. ffmpeg gibt die Gesamtkonfiguration der Kamera an, einschließlich Videodateipfad und Anwendungsrollen. detect steht für die Objekterkennungsfunktion, record für die Aufnahmefunktion und snapshots für die Snapshot-Funktion.
Start und Überprüfung
Folgen Sie dem Ablauf:
cd /path/to/your/frigate
sudo docker compose up -d
# Start-Logs anzeigen
sudo docker compose logs -f frigateWenn die Logs INFO : Frigate started successfully. enthalten oder die Web-UI auf 0.0.0.0:8971 lauscht, ist der Start erfolgreich.
Suchen Sie in den Logs nach den Schlüsselwörtern, um Konto und Passwort zu erhalten:
docker logs frigate 2>&1 | grep -Ei 'rtsp://|rtsps://|password|passwd|user|username|@'Möglicherweise sehen Sie etwas wie rtsp://admin:password@192.168.1.100:554/stream.
# Container-Status überprüfen
sudo docker compose ps
# Erwartet wird, dass der Frigate-Dienst den Status running / healthy hat# Browser-Zugriff
https://<your-host-ip>:8971Melden Sie sich mit Konto und Passwort an.

Nach erfolgreicher Anmeldung sehen Sie die gesamte Ansicht sowie die in der vorherigen Konfigurationsdatei konfigurierten Kamerainformationen:

Wählen Sie eine davon aus und klicken Sie sie an. Klicken Sie dann oben rechts auf die Debug-Oberfläche, um alle Funktionen im Bild zu sehen. Oben rechts befinden sich die Funktionen, die in der Konfigurationsdatei eingestellt werden können, um zu bestimmen, ob sie enthalten sind oder im Voraus gestartet werden sollen. Links befinden sich die integrierten Funktionen, mit denen später Grenzen usw. entworfen werden können:
