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.
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ément | Résultat sur l’appareil de test |
|---|---|
| Appareil | Seeed Studio reComputer R2245, nom d’hôte reComputer-R22 |
| Module de calcul | Raspberry Pi Compute Module 5 Rev 1.0 |
| CPU | Quad-core Arm Cortex-A76, jusqu’à 2,4 GHz |
| Mémoire | 4,0 Gio |
| Système d’exploitation | Debian GNU/Linux 13.2 (trixie), ARM64 |
| Noyau | 6.12.62+rpt-rpi-2712 |
| Stockage système | eMMC 29,1 Go ; utilisé à 66 % pendant le test, avec environ 9,3 Go disponibles |
| Accélérateur IA | Hailo-8 M.2, nœud de périphérique /dev/hailo0 |
| HailoRT/pilote/firmware | 4.23.0 / 4.23.0 / 4.23.0 |
| Docker | Docker CE 29.7.2, Compose 5.4.0 |
| Réseau | ETH0 sur un LAN IPv4 Gigabit ; les autres interfaces étaient désactivées pendant le test |
| Caméra | Un 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.
findmnt -T /mnt/nvme
lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINTS,MODEL
df -hT /mnt/nvmeLe 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 :
- Utilisez un SSD NVMe à haute endurance formaté en
ext4. - Ajoutez le disque dans
/etc/fstaben utilisant son UUID. - Vérifiez qu’il est monté avec succès avant de démarrer Viseron.
- 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.
- 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.
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/hailo0Démarrez et inspectez le service :
cd /srv/viseron
docker compose up -d
docker compose logs --tail=200Ouvrez l’interface web à l’adresse :
http://DEVICE_IP:88882.3 Configuration de caméra recommandée
Utilisez secrets.yaml pour stocker les identifiants de la caméra.
# 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: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étrique | Résultat mesuré |
|---|---|
| Utilisation CPU moyenne du conteneur Viseron | 50,66 % |
| Plage CPU sur les cinq échantillons | 49,78 %–51,94 % |
| RSS cumulée des processus dans le conteneur | Environ 1140,5 Mio |
| Nombre de processus | 158–159 |
| Température du CM5 | 40,6–42,8 °C |
| Indicateur de throttling/sous-tension | 0x0 |
| Débit d’enregistrement à court terme | Environ 4,259 Mbps |
| Volume d’enregistrement estimé par jour | Environ 46,0 Go/jour |
| Réponse de la page d’accueil web sur le LAN | 39,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 :
Daily storage (GB) ≈ Total bit rate (Mbps) × 10.8Avec 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étrique | Résultat mesuré |
|---|---|
| Trames traitées | 503 |
| Débit équivalent | Environ 100,6 FPS |
| Latence matérielle | 6,66 ms |
| Température Hailo minimale | 29,02 °C |
| Température Hailo moyenne | 29,55 °C |
| Température Hailo maximale | 29,68 °C |
| Température CM5 avant/après le test | 40,6 °C / 44,4 °C |
| Indicateur de throttling CM5 | 0x0 |
4.2 Intégration du Hailo-8 via la méthode officielle Viseron
La configuration Viseron attendue est :
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 :
devices:
- /dev/hailo0:/dev/hailo0La 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 :
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
| Catégorie | Viseron | Frigate |
|---|---|---|
| Licence open-source | MIT | MIT |
| Support Docker ARM64 | Prend en charge les images multi-architectures | Prend en charge ARM64, y compris les builds destinés à Raspberry Pi |
| Modèle de configuration | Les caméras, la détection de mouvement, la détection d'objets, le NVR, le stockage et d'autres composants peuvent être combinés librement | Organisé autour des caméras, de la détection, du suivi, de Review et de l'enregistrement |
| Enregistrement continu/sur événement | Pris en charge, avec un stockage hiérarchisé flexible | Pris en charge, avec des politiques de rétention simples |
| Détection d'objets | Hailo, Coral, Darknet, Ultralytics, services externes, et plus | Hailo, Coral, ONNX, OpenVINO, TensorRT, et plus |
| Statut Hailo-8 sur cet appareil | Le conteneur 4.22 est en conflit avec l'hôte 4.23 et est actuellement inutilisable | Seeed fournit un tutoriel de référence R2000/Hailo ; les versions réelles doivent encore être vérifiées |
| Suivi d'objets | Peut enregistrer autour des événements de détection, mais le suivi n'est pas sa fonctionnalité la plus forte | Le suivi et Review sont des éléments centraux du flux de travail |
| Détection audio | N'est pas une fonctionnalité principale | Détection d'événements audio intégrée |
| Stockage | Plusieurs niveaux avec des contrôles indépendants pour les événements et l'enregistrement continu | Politiques de rétention claires pour les enregistrements continus, de mouvement, d'alerte et de détection |
| Home Assistant | Disponible via MQTT Discovery | Intégration plus mature et ressources communautaires |
| Courbe d'apprentissage | Plus élevée, avec une composition flexible des composants | Modérée, avec un parcours d'intégration plus unifié |
| Idéal pour | Les utilisateurs souhaitant des pipelines de détection et des politiques de stockage personnalisés | Les 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é.