Parker Hu2026-08-25

Bereitstellung von Viseron auf dem reComputer R2245

Benchmarks für kontinuierliche Viseron-Aufzeichnung auf dem reComputer R2245 und Validierung der Hailo-8-Integration.

ViseronNVRHailo-8Other

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

ElementErgebnis auf dem Testgerät
GerätSeeed Studio reComputer R2245, Hostname reComputer-R22
Compute-ModulRaspberry Pi Compute Module 5 Rev 1.0
CPUQuad-Core Arm Cortex-A76, bis zu 2,4 GHz
Arbeitsspeicher4,0 GiB
BetriebssystemDebian GNU/Linux 13.2 (trixie), ARM64
Kernel6.12.62+rpt-rpi-2712
Systemspeicher29,1 GB eMMC; während des Tests zu 66 % belegt, mit etwa 9,3 GB verfügbar
KI-BeschleunigerHailo-8 M.2, Geräteknoten /dev/hailo0
HailoRT/Treiber/Firmware4.23.0 / 4.23.0 / 4.23.0
DockerDocker CE 29.7.2, Compose 5.4.0
NetzwerkETH0 in einem Gigabit-IPv4-LAN; die anderen Schnittstellen waren während des Tests deaktiviert
KameraEin 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.

bash
findmnt -T /mnt/nvme
lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINTS,MODEL
df -hT /mnt/nvme

Das 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:

  1. Verwenden Sie eine langlebige NVMe SSD, formatiert als ext4.
  2. Fügen Sie das Laufwerk mit seiner UUID in /etc/fstab hinzu.
  3. Stellen Sie sicher, dass es erfolgreich eingehängt ist, bevor Sie Viseron starten.
  4. 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.
  5. 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.

yaml
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/hailo0

Starten und überprüfen Sie den Dienst:

bash
cd /srv/viseron
docker compose up -d
docker compose logs --tail=200

Öffnen Sie die Weboberfläche unter:

text
http://DEVICE_IP:8888

2.3 Empfohlene Kamera-Konfiguration

Verwenden Sie secrets.yaml, um Kamera-Anmeldeinformationen zu speichern.

yaml
# secrets.yaml
camera_host: 192.168.10.101
camera_username: admin
camera_password: "REPLACE_WITH_THE_ACTUAL_PASSWORD"
yaml
# 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

MetrikMessergebnis
Durchschnittliche CPU-Auslastung des Viseron-Containers50,66 %
CPU-Bereich über fünf Proben49,78 %–51,94 %
Kombinierter RSS der Prozesse im ContainerEtwa 1140,5 MiB
Anzahl der Prozesse158–159
CM5-Temperatur40,6–42,8 °C
Drosselungs-/Unterspannungsflag0x0
Kurzzeit-AufzeichnungsdatenrateEtwa 4,259 Mbps
Geschätztes Aufzeichnungsvolumen pro TagEtwa 46,0 GB/Tag
Antwort der Web-Startseite im LAN39,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:

text
Daily storage (GB) ≈ Total bit rate (Mbps) × 10.8

Bei 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:

MetrikMessergebnis
Verarbeitete Frames503
Entsprechender DurchsatzEtwa 100,6 FPS
Hardware-Latenz6,66 ms
Minimale Hailo-Temperatur29,02 °C
Durchschnittliche Hailo-Temperatur29,55 °C
Maximale Hailo-Temperatur29,68 °C
CM5-Temperatur vor/nach dem Test40,6 °C / 44,4 °C
CM5-Drosselungsflag0x0

4.2 Integration des Hailo-8 mit der offiziellen Viseron-Methode

Die erwartete Viseron-Konfiguration ist:

yaml
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:

yaml
devices:
  - /dev/hailo0:/dev/hailo0

Die 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:

text
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 detector

5. Viseron vs. Frigate

KategorieViseronFrigate
Open-Source-LizenzMITMIT
ARM64 Docker-UnterstützungUnterstützt Multi-Architektur-ImagesUnterstützt ARM64, einschließlich für Raspberry Pi vorgesehener Builds
KonfigurationsmodellKameras, Bewegungserkennung, Objekterkennung, NVR, Speicher und andere Komponenten können frei kombiniert werdenOrganisiert um Kameras, Erkennung, Tracking, Review und Aufzeichnung
Kontinuierliche/EreignisaufzeichnungUnterstützt, mit flexibler abgestufter SpeicherungUnterstützt, mit einfachen Aufbewahrungsrichtlinien
ObjekterkennungHailo, Coral, Darknet, Ultralytics, externe Dienste und mehrHailo, Coral, ONNX, OpenVINO, TensorRT und mehr
Hailo-8-Status auf diesem GerätContainer 4.22 steht im Konflikt mit Host 4.23 und ist derzeit nicht nutzbarSeeed bietet ein R2000/Hailo-Referenz-Tutorial; die tatsächlichen Versionen müssen noch überprüft werden
Objekt-TrackingKann um Erkennungsereignisse herum aufzeichnen, aber Tracking ist nicht seine stärkste FunktionTracking und Review sind Kernbestandteile des Arbeitsablaufs
AudioerkennungKein primäres FeatureIntegrierte Audioereigniserkennung
SpeicherungMehrere Stufen mit unabhängiger Steuerung von Ereignis- und kontinuierlicher AufzeichnungKlare Aufbewahrungsrichtlinien für kontinuierliche, Bewegungs-, Alarm- und Erkennungsaufzeichnungen
Home AssistantVerfügbar über MQTT DiscoveryAusgereiftere Integration und Community-Ressourcen
LernkurveHöher, durch flexible KomponentenzusammenstellungMittel, mit einem einheitlicheren Einstiegspfad
Am besten geeignet fürBenutzer, die individuelle Erkennungspipelines und Speicherrichtlinien wünschenBenutzer, 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.