Bereitstellung von Viseron auf dem reComputer R2245
Benchmarks für kontinuierliche Viseron-Aufzeichnung auf dem reComputer R2245 und Validierung der Hailo-8-Integration.
Zusammenfassung
Dieses Projekt wurde auf einem reComputer R2245 mit einem 4 GB Raspberry Pi CM5, 64-Bit Debian 13 und einem Hailo-8 AI-Beschleuniger durchgeführt. Ein Viseron 3.5.3 Container lief bereits seit etwa neun Tagen ununterbrochen. Eine einzelne 1280×720 H.264 Kamera konnte kontinuierlich aufzeichnen, und die Viseron-Weboberfläche blieb erreichbar. Mit Darknet, das kontinuierlich mit 1 FPS Objekterkennung durchführte, verbrauchte der Container etwa 50,7 % CPU, der kombinierte RSS seiner Prozesse betrug etwa 1,11 GiB und die CM5-Temperatur lag zwischen ca. 40,6 °C und 42,8 °C.
Die Hailo-8 Hardware selbst funktionierte normal. In einem fünfsekündigen Zufallseingabetest mit einem YOLOv8s HEF-Modell verarbeitete sie 503 Frames, was etwa 100,6 FPS entspricht, bei einer Hardware-Latenz von 6,66 ms. Die durchschnittliche Hailo-Chip-Temperatur betrug 29,55 °C und das CM5 zeigte keine Drosselung.
1. Testumgebung
1.1 Hardware und System
| Element | Ergebnis auf dem Testgerät |
|---|---|
| Gerät | Seeed Studio reComputer R2245, Hostname reComputer-R22 |
| Compute-Modul | Raspberry Pi Compute Module 5 Rev 1.0 |
| CPU | Quad-Core Arm Cortex-A76, bis zu 2,4 GHz |
| Arbeitsspeicher | 4,0 GiB |
| Betriebssystem | Debian GNU/Linux 13.2 (trixie), ARM64 |
| Kernel | 6.12.62+rpt-rpi-2712 |
| Systemspeicher | 29,1 GB eMMC; während des Tests zu 66 % belegt, mit etwa 9,3 GB verfügbar |
| KI-Beschleuniger | Hailo-8 M.2, Geräteknoten /dev/hailo0 |
| HailoRT/Treiber/Firmware | 4.23.0 / 4.23.0 / 4.23.0 |
| Docker | Docker CE 29.7.2, Compose 5.4.0 |
| Netzwerk | ETH0 in einem Gigabit-IPv4-LAN; die anderen Schnittstellen waren während des Tests deaktiviert |
| Kamera | Ein H.264-Stream; die Aufzeichnungsinitialisierungsdatei meldete 1280×720 |
2. Bereitstellung
2.1 Sicherstellen, dass das Aufzeichnungslaufwerk tatsächlich eingehängt ist
Identifizieren Sie ein Laufwerk nicht nur anhand seines Verzeichnisnamens.
findmnt -T /mnt/nvme
lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINTS,MODEL
df -hT /mnt/nvmeDas Verzeichnis sollte nur dann als Aufzeichnungslaufwerk behandelt werden, wenn die von findmnt gemeldete SOURCE auf eine NVMe-Partition wie /dev/nvme0n1p1 zeigt. Wenn das NVMe-Laufwerk nicht installiert oder eingehängt wurde, beenden Sie zuerst die kontinuierliche Aufzeichnung, anstatt zuzulassen, dass Docker ein gleichnamiges Verzeichnis auf dem Systemlaufwerk erstellt.
Empfehlungen für eine Produktionsbereitstellung:
- Verwenden Sie eine langlebige NVMe SSD, formatiert als
ext4. - Fügen Sie das Laufwerk mit seiner UUID in
/etc/fstabhinzu. - Stellen Sie sicher, dass es erfolgreich eingehängt ist, bevor Sie Viseron starten.
- Fügen Sie eine Mount-Abhängigkeit zum Dienst hinzu, damit ein fehlendes NVMe-Laufwerk nicht dazu führt, dass Aufzeichnungen auf eMMC zurückfallen.
- Sichern Sie
/srv/viseron/config, das sowohl die PostgreSQL-Daten als auch die Viseron-Konfiguration enthält.
2.2 Empfohlene Compose-Datei
Die folgende Compose-Konfiguration ist für den R2245 geeignet. Ersetzen Sie das Image-Tag durch eine feste Version, die Regressionstests bestanden hat. Das Zuordnen des Hailo-Geräts ist nur dann sinnvoll, wenn die HailoRT-Versionen übereinstimmen.
services:
viseron:
image: roflcoopter/viseron:3.5.3
container_name: viseron
restart: unless-stopped
shm_size: "1024mb"
ports:
- "8888:8888"
volumes:
- /srv/viseron/config:/config
- /mnt/nvme/viseron/segments:/segments
- /mnt/nvme/viseron/snapshots:/snapshots
- /mnt/nvme/viseron/thumbnails:/thumbnails
- /mnt/nvme/viseron/event_clips:/event_clips
- /mnt/nvme/viseron/timelapse:/timelapse
- /etc/localtime:/etc/localtime:ro
# Enable this only after aligning the HailoRT version.
# Viseron requires version 4.22.0.
# devices:
# - /dev/hailo0:/dev/hailo0Starten und überprüfen Sie den Dienst:
cd /srv/viseron
docker compose up -d
docker compose logs --tail=200Öffnen Sie die Weboberfläche unter:
http://DEVICE_IP:88882.3 Empfohlene Kamera-Konfiguration
Verwenden Sie secrets.yaml, um Kamera-Anmeldeinformationen zu speichern.
# secrets.yaml
camera_host: 192.168.10.101
camera_username: admin
camera_password: "REPLACE_WITH_THE_ACTUAL_PASSWORD"# config.yaml
ffmpeg:
camera:
camera_1:
name: Front Gate
host: !secret camera_host
port: 554
path: /Streaming/Channels/101/
username: !secret camera_username
password: !secret camera_password
substream:
port: 554
path: /Streaming/Channels/102/
stream_format: rtsp
mog2:
motion_detector:
cameras:
camera_1:
fps: 2
darknet:
object_detector:
cameras:
camera_1:
fps: 1
scan_on_motion_only: true
labels:
- label: person
confidence: 0.75
trigger_event_recording: true
nvr:
camera_1:Die Verwendung des Hauptstreams für die direkte Kopieaufzeichnung und eines Substreams mit niedrigerer Auflösung für Dekodierung und Erkennung ist eine der effektivsten Optimierungen für das CM5. Hailo beschleunigt nur die Inferenz neuronaler Netze; es ersetzt nicht die H.264/H.265-Videodekodierung.
3. Tests mit einer Kamera: Aufzeichnung und Ressourcen
3.1 Testbedingungen
- Ein H.264-Kamerastream
- Aufzeichnungsinitialisierungsdatei meldete 1280×720
- FFmpeg schrieb fMP4-Segmente mit
-c:v copy, ohne Neutranskodierung - Darknet-Objekterkennung mit 1 FPS
scan_on_motion_only: false, d. h. die Inferenz lief auch ohne Bewegung weiter- Fünf aufeinanderfolgende Probenahmen im Abstand von etwa zwei Sekunden
- Keine Multi-Kamera-Browservorschau oder gleichzeitige Wiedergabe
3.2 Ergebnisse
| Metrik | Messergebnis |
|---|---|
| Durchschnittliche CPU-Auslastung des Viseron-Containers | 50,66 % |
| CPU-Bereich über fünf Proben | 49,78 %–51,94 % |
| Kombinierter RSS der Prozesse im Container | Etwa 1140,5 MiB |
| Anzahl der Prozesse | 158–159 |
| CM5-Temperatur | 40,6–42,8 °C |
| Drosselungs-/Unterspannungsflag | 0x0 |
| Kurzzeit-Aufzeichnungsdatenrate | Etwa 4,259 Mbps |
| Geschätztes Aufzeichnungsvolumen pro Tag | Etwa 46,0 GB/Tag |
| Antwort der Web-Startseite im LAN | 39,29 ms Durchschnitt über 10 Anfragen |
Ein Docker-CPU-Wert von 50 % entspricht etwa der Hälfte eines CPU-Kerns.
Das Aufzeichnungsverzeichnis wuchs in 15 Sekunden um 7.986.412 Bytes, was etwa 4,259 Mbps entspricht. Dieses Ergebnis gilt nur für den aktuellen Kamerastream. Der tatsächliche Speicherbedarf sollte aus der kombinierten Bitrate aller Kameras berechnet werden:
Daily storage (GB) ≈ Total bit rate (Mbps) × 10.8Bei 10 GB verfügbarem Speicher würde die aktuelle Einzelkamera-Bitrate Platz für nur etwa fünf Stunden zusätzlicher Aufzeichnungen bieten, wenn keine Bereinigungsrichtlinie angewendet wird. Daher muss ein NVMe-Laufwerk installiert und überprüft werden, bevor weitere Kameras hinzugefügt werden.
3.3 Benutzererfahrung
Während des Tests lieferte die Web-Startseite HTTP 200, die Segmente der Kameraaufzeichnung wuchsen weiter und es wurden gültige Objekterkennungs-Schnappschüsse generiert. Viserons komponentenbasierte Konfiguration ermöglicht es, Kameras, Detektoren, Aufzeichnung und Speicherrichtlinien unabhängig voneinander zu kombinieren, was es besonders für Benutzer geeignet macht, die mit YAML vertraut sind.
4. Hailo-8-Tests und Viseron-Integration
4.1 Eigenständiger Hardware-Test
Der Host erkannte das Hailo-8 erfolgreich. Ein fünfsekündiger Inferenztest wurde mit dem vom System bereitgestellten yolov8s_h8.hef-Modell durchgeführt:
| Metrik | Messergebnis |
|---|---|
| Verarbeitete Frames | 503 |
| Entsprechender Durchsatz | Etwa 100,6 FPS |
| Hardware-Latenz | 6,66 ms |
| Minimale Hailo-Temperatur | 29,02 °C |
| Durchschnittliche Hailo-Temperatur | 29,55 °C |
| Maximale Hailo-Temperatur | 29,68 °C |
| CM5-Temperatur vor/nach dem Test | 40,6 °C / 44,4 °C |
| CM5-Drosselungsflag | 0x0 |
4.2 Integration des Hailo-8 mit der offiziellen Viseron-Methode
Die erwartete Viseron-Konfiguration ist:
hailo:
object_detector:
cameras:
camera_1:
fps: 1
scan_on_motion_only: true
labels:
- label: person
confidence: 0.75
trigger_event_recording: true
nvr:
camera_1:Das Gerät muss ebenfalls in den Container eingebunden werden:
devices:
- /dev/hailo0:/dev/hailo0Die offizielle Viseron-Dokumentation warnt ausdrücklich, dass der Container derzeit HailoRT 4.22.0 verwendet und andere Host-Treiberversionen möglicherweise inkompatibel sind. Ein Beispiel für den daraus resultierenden Fehler ist:
Driver version (4.23.0) is different from library version (4.22.0)
HAILO_INVALID_DRIVER_VERSION(76)
Failed to detect Hailo architecture
Failed to start Hailo 8 detector5. Viseron vs. Frigate
| Kategorie | Viseron | Frigate |
|---|---|---|
| Open-Source-Lizenz | MIT | MIT |
| ARM64 Docker-Unterstützung | Unterstützt Multi-Architektur-Images | Unterstützt ARM64, einschließlich für Raspberry Pi vorgesehener Builds |
| Konfigurationsmodell | Kameras, Bewegungserkennung, Objekterkennung, NVR, Speicher und andere Komponenten können frei kombiniert werden | Organisiert um Kameras, Erkennung, Tracking, Review und Aufzeichnung |
| Kontinuierliche/Ereignisaufzeichnung | Unterstützt, mit flexibler abgestufter Speicherung | Unterstützt, mit einfachen Aufbewahrungsrichtlinien |
| Objekterkennung | Hailo, Coral, Darknet, Ultralytics, externe Dienste und mehr | Hailo, Coral, ONNX, OpenVINO, TensorRT und mehr |
| Hailo-8-Status auf diesem Gerät | Container 4.22 steht im Konflikt mit Host 4.23 und ist derzeit nicht nutzbar | Seeed bietet ein R2000/Hailo-Referenz-Tutorial; die tatsächlichen Versionen müssen noch überprüft werden |
| Objekt-Tracking | Kann um Erkennungsereignisse herum aufzeichnen, aber Tracking ist nicht seine stärkste Funktion | Tracking und Review sind Kernbestandteile des Arbeitsablaufs |
| Audioerkennung | Kein primäres Feature | Integrierte Audioereigniserkennung |
| Speicherung | Mehrere Stufen mit unabhängiger Steuerung von Ereignis- und kontinuierlicher Aufzeichnung | Klare Aufbewahrungsrichtlinien für kontinuierliche, Bewegungs-, Alarm- und Erkennungsaufzeichnungen |
| Home Assistant | Verfügbar über MQTT Discovery | Ausgereiftere Integration und Community-Ressourcen |
| Lernkurve | Höher, durch flexible Komponentenzusammenstellung | Mittel, mit einem einheitlicheren Einstiegspfad |
| Am besten geeignet für | Benutzer, die individuelle Erkennungspipelines und Speicherrichtlinien wünschen | Benutzer, die Tracking, Review, Home Assistant und etablierte Bereitstellungsbeispiele priorisieren |
Der Hauptvorteil von Viseron ist seine Offenheit und Kombinierbarkeit. Beispielsweise kann MOG2 zunächst Bewegungen filtern, Hailo kann dann die Objekterkennung durchführen und die Nachbearbeitung oder MQTT kann das Ergebnis verarbeiten. Seine Speicherstufen unterstützen auch Architekturen wie die Speicherung aktueller kontinuierlicher Aufzeichnungen auf einer NVMe und die Archivierung langfristiger Ereignisse auf einem NAS.
Der Vorteil von Frigate liegt darin, dass Erkennung, Tracking, Review und Home Assistant einen vollständigeren Produktarbeitsablauf bilden. Wenn das Ziel darin besteht, Hailo-8 auf einem R2245 so schnell wie möglich einzusetzen, anstatt mit Viserons Komponenten zu experimentieren, ist Frigate derzeit die sicherere Standardwahl.
6. Empfehlungen
Wann Sie Viseron wählen sollten
- Sie planen, ein kleines System mit ein bis vier Kameras und hauptsächlich lokaler Aufzeichnung einzusetzen.
- Sie sind vertraut mit Docker, YAML, RTSP und grundlegender Linux-Administration.
- Sie legen Wert auf abgestufte Speicherung und flexible Komponentenzusammenstellung.
- Sie können mit Bewegungserkennung oder CPU-basierter Erkennung beginnen, während Sie auf die Angleichung der Hailo-Versionen warten.
- Sie sind bereit, Kamerapfade, Abhängigkeiten und Treiber anhand von Protokollen zu beheben.
Wann Frigate derzeit die bessere Wahl ist
- Hailo-8 muss sofort für die Objekterkennung verwendet werden.
- Sie verlassen sich stark auf Home Assistant.
- Objekt-Tracking, Review und Audioereignisse haben höhere Priorität.
- Sie möchten dem bestehenden R2000-Bereitstellungstutorial von Seeed folgen.
- Sie möchten keinen eigenen HailoRT-Container warten.