Parker Hu2026-08-25

Déploiement de Viseron sur le reComputer R2245

Benchmarks de l'enregistrement continu de Viseron sur le reComputer R2245 et validation de l'intégration Hailo-8.

ViseronNVRHailo-8Other

Résumé

Ce projet a été mené sur un reComputer R2245 équipé d’un Raspberry Pi CM5 de 4 Go, Debian 13 64 bits et d’un accélérateur IA Hailo-8. Un conteneur Viseron 3.5.3 fonctionnait déjà en continu depuis environ neuf jours. Une seule caméra H.264 1280×720 enregistrait sans interruption et l’interface web de Viseron restait accessible. Avec Darknet effectuant une détection continue à 1 FPS, le conteneur utilisait environ 50,7 % de CPU, la RSS cumulée de ses processus atteignait environ 1,11 Gio, et la température du CM5 oscillait entre environ 40,6 °C et 42,8 °C.

Le matériel Hailo-8 a fonctionné normalement. Lors d’un test de cinq secondes avec entrées aléatoires utilisant un modèle HEF YOLOv8s, il a traité 503 trames, soit environ 100,6 FPS, avec une latence matérielle de 6,66 ms. La température moyenne de la puce Hailo était de 29,55 °C, et le CM5 n’a montré aucun throttling.

1. Environnement de test

1.1 Matériel et système

ÉlémentRésultat sur l’appareil de test
AppareilSeeed Studio reComputer R2245, nom d’hôte reComputer-R22
Module de calculRaspberry Pi Compute Module 5 Rev 1.0
CPUQuad-core Arm Cortex-A76, jusqu’à 2,4 GHz
Mémoire4,0 Gio
Système d’exploitationDebian GNU/Linux 13.2 (trixie), ARM64
Noyau6.12.62+rpt-rpi-2712
Stockage systèmeeMMC 29,1 Go ; utilisé à 66 % pendant le test, avec environ 9,3 Go disponibles
Accélérateur IAHailo-8 M.2, nœud de périphérique /dev/hailo0
HailoRT/pilote/firmware4.23.0 / 4.23.0 / 4.23.0
DockerDocker CE 29.7.2, Compose 5.4.0
RéseauETH0 sur un LAN IPv4 Gigabit ; les autres interfaces étaient désactivées pendant le test
CaméraUn flux H.264 ; le fichier d’initialisation d’enregistrement indiquait 1280×720

2. Déploiement

2.1 Vérifier que le disque d’enregistrement est bien monté

Ne vous fiez pas uniquement au nom du répertoire pour identifier un disque.

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

Le répertoire ne doit être considéré comme un disque d’enregistrement que si la SOURCE signalée par findmnt pointe vers une partition NVMe telle que /dev/nvme0n1p1. Si le disque NVMe n’est pas installé ou monté, arrêtez d’abord l’enregistrement continu au lieu de laisser Docker créer un répertoire du même nom sur le disque système.

Recommandations pour un déploiement en production :

  1. Utilisez un SSD NVMe à haute endurance formaté en ext4.
  2. Ajoutez le disque dans /etc/fstab en utilisant son UUID.
  3. Vérifiez qu’il est monté avec succès avant de démarrer Viseron.
  4. Ajoutez une dépendance de montage au service afin qu’un disque NVMe manquant n’entraîne pas un basculement des enregistrements vers l’eMMC.
  5. Sauvegardez /srv/viseron/config, qui contient à la fois les données PostgreSQL et la configuration de Viseron.

2.2 Fichier Compose recommandé

La configuration Compose suivante est adaptée au R2245. Remplacez l’étiquette d’image par une version fixe ayant passé les tests de régression. Le mappage du périphérique Hailo n’est utile que si les versions de HailoRT correspondent.

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

Démarrez et inspectez le service :

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

Ouvrez l’interface web à l’adresse :

text
http://DEVICE_IP:8888

2.3 Configuration de caméra recommandée

Utilisez secrets.yaml pour stocker les identifiants de la caméra.

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:

L’utilisation du flux principal pour l’enregistrement par copie directe et d’un sous-flux de résolution inférieure pour le décodage et la détection est l’une des optimisations les plus efficaces pour le CM5. Hailo n’accélère que l’inférence du réseau neuronal ; il ne remplace pas le décodage vidéo H.264/H.265.

3. Enregistrement monocaméra et tests de ressources

3.1 Conditions de test

  • Un flux caméra H.264
  • Le fichier d’initialisation d’enregistrement indiquait 1280×720
  • FFmpeg écrivait des segments fMP4 avec -c:v copy, sans ré-encodage
  • Détection d’objets Darknet à 1 FPS
  • scan_on_motion_only: false, ce qui signifie que l’inférence continuait même en l’absence de mouvement
  • Cinq échantillons consécutifs pris à environ deux secondes d’intervalle
  • Aucun aperçu navigateur multicaméra ni lecture simultanée

3.2 Résultats

MétriqueRésultat mesuré
Utilisation CPU moyenne du conteneur Viseron50,66 %
Plage CPU sur les cinq échantillons49,78 %–51,94 %
RSS cumulée des processus dans le conteneurEnviron 1140,5 Mio
Nombre de processus158–159
Température du CM540,6–42,8 °C
Indicateur de throttling/sous-tension0x0
Débit d’enregistrement à court termeEnviron 4,259 Mbps
Volume d’enregistrement estimé par jourEnviron 46,0 Go/jour
Réponse de la page d’accueil web sur le LAN39,29 ms en moyenne sur 10 requêtes

Une valeur CPU Docker de 50 % correspond à environ la moitié d’un cœur de CPU.

Le répertoire d’enregistrement a augmenté de 7 986 412 octets en 15 secondes, soit environ 4,259 Mbps. Ce résultat s’applique uniquement au flux de la caméra actuelle. Les besoins réels en stockage doivent être calculés à partir du débit binaire combiné de toutes les caméras :

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

Avec 10 Go de stockage disponible, le débit binaire actuel d’une seule caméra ne permettrait de conserver qu’environ cinq heures d’enregistrements supplémentaires si aucune règle de nettoyage n’était appliquée. Par conséquent, un disque NVMe doit être installé et vérifié avant d’ajouter d’autres caméras.

3.3 Expérience utilisateur

Pendant le test, la page d’accueil web renvoyait HTTP 200, les segments d’enregistrement de la caméra continuaient de croître et des captures de détection d’objets valides étaient générées. La configuration basée sur des composants de Viseron permet de combiner caméras, détecteurs, enregistrement et règles de stockage de manière indépendante, ce qui la rend bien adaptée aux utilisateurs à l’aise avec YAML.

4. Test du Hailo-8 et intégration avec Viseron

4.1 Test matériel autonome

L’hôte a détecté avec succès le Hailo-8. Un test d’inférence de cinq secondes a été réalisé avec le modèle yolov8s_h8.hef fourni par le système :

MétriqueRésultat mesuré
Trames traitées503
Débit équivalentEnviron 100,6 FPS
Latence matérielle6,66 ms
Température Hailo minimale29,02 °C
Température Hailo moyenne29,55 °C
Température Hailo maximale29,68 °C
Température CM5 avant/après le test40,6 °C / 44,4 °C
Indicateur de throttling CM50x0

4.2 Intégration du Hailo-8 via la méthode officielle Viseron

La configuration Viseron attendue est :

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:

Le périphérique doit également être mappé dans le conteneur :

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

La documentation officielle de Viseron avertit explicitement que son conteneur utilise actuellement HailoRT 4.22.0 et que d'autres versions du pilote hôte peuvent être incompatibles. Un exemple de l'erreur résultante est :

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

CatégorieViseronFrigate
Licence open-sourceMITMIT
Support Docker ARM64Prend en charge les images multi-architecturesPrend en charge ARM64, y compris les builds destinés à Raspberry Pi
Modèle de configurationLes caméras, la détection de mouvement, la détection d'objets, le NVR, le stockage et d'autres composants peuvent être combinés librementOrganisé autour des caméras, de la détection, du suivi, de Review et de l'enregistrement
Enregistrement continu/sur événementPris en charge, avec un stockage hiérarchisé flexiblePris en charge, avec des politiques de rétention simples
Détection d'objetsHailo, Coral, Darknet, Ultralytics, services externes, et plusHailo, Coral, ONNX, OpenVINO, TensorRT, et plus
Statut Hailo-8 sur cet appareilLe conteneur 4.22 est en conflit avec l'hôte 4.23 et est actuellement inutilisableSeeed fournit un tutoriel de référence R2000/Hailo ; les versions réelles doivent encore être vérifiées
Suivi d'objetsPeut enregistrer autour des événements de détection, mais le suivi n'est pas sa fonctionnalité la plus forteLe suivi et Review sont des éléments centraux du flux de travail
Détection audioN'est pas une fonctionnalité principaleDétection d'événements audio intégrée
StockagePlusieurs niveaux avec des contrôles indépendants pour les événements et l'enregistrement continuPolitiques de rétention claires pour les enregistrements continus, de mouvement, d'alerte et de détection
Home AssistantDisponible via MQTT DiscoveryIntégration plus mature et ressources communautaires
Courbe d'apprentissagePlus élevée, avec une composition flexible des composantsModérée, avec un parcours d'intégration plus unifié
Idéal pourLes utilisateurs souhaitant des pipelines de détection et des politiques de stockage personnalisésLes utilisateurs qui privilégient le suivi, Review, Home Assistant et des exemples de déploiement établis

Le principal avantage de Viseron est son ouverture et sa composabilité. Par exemple, MOG2 peut filtrer le mouvement en premier, Hailo peut ensuite effectuer la détection d'objets, et le post-traitement ou MQTT peut gérer le résultat. Ses niveaux de stockage prennent également en charge des architectures comme conserver les enregistrements continus récents sur NVMe tout en archivant les événements à long terme sur un NAS.

L'avantage de Frigate est que la détection, le suivi, Review et Home Assistant forment un flux de travail produit plus complet. Si l'objectif est de déployer Hailo-8 sur un R2245 aussi rapidement que possible plutôt que d'expérimenter avec les composants de Viseron, Frigate est actuellement le choix par défaut le plus sûr.

6. Recommandations

Quand choisir Viseron

  • Vous prévoyez de déployer un petit système avec une à quatre caméras et principalement un enregistrement local.
  • Vous êtes à l'aise avec Docker, YAML, RTSP et l'administration de base sous Linux.
  • Vous accordez de l'importance au stockage hiérarchisé et à la composition flexible des composants.
  • Vous pouvez commencer par la détection de mouvement ou la détection basée sur le CPU en attendant l'alignement des versions Hailo.
  • Vous êtes prêt à résoudre les problèmes liés aux chemins des caméras, aux dépendances et aux pilotes via les logs.

Quand Frigate est actuellement le meilleur choix

  • Hailo-8 doit être utilisé immédiatement pour la détection d'objets.
  • Vous dépendez fortement de Home Assistant.
  • Le suivi d'objets, Review et les événements audio sont des priorités plus élevées.
  • Vous souhaitez suivre le tutoriel de déploiement R2000 existant de Seeed.
  • Vous ne voulez pas maintenir un conteneur HailoRT personnalisé.