Desplegando Viseron en el reComputer R2245
Evalúa la grabación continua de Viseron en el reComputer R2245 y valida la integración de Hailo-8.
Resumen
Este proyecto se realizó en un reComputer R2245 equipado con una Raspberry Pi CM5 de 4 GB, Debian 13 de 64 bits y un acelerador de IA Hailo-8. Un contenedor Viseron 3.5.3 ya llevaba aproximadamente nueve días ejecutándose de forma continua. Una sola cámara H.264 de 1280×720 pudo grabar de forma continua y la interfaz web de Viseron permaneció accesible. Con Darknet realizando detección continua a 1 FPS, el contenedor utilizó aproximadamente el 50.7 % de la CPU, el RSS combinado de sus procesos fue de aproximadamente 1.11 GiB y la temperatura de la CM5 osciló entre aproximadamente 40.6 °C y 42.8 °C.
El hardware Hailo-8 funcionó con normalidad. En una prueba de cinco segundos con entrada aleatoria utilizando un modelo YOLOv8s HEF, procesó 503 fotogramas, equivalentes a aproximadamente 100.6 FPS, con una latencia de hardware de 6.66 ms. La temperatura media del chip Hailo fue de 29.55 °C y la CM5 no mostró reducción de velocidad.
1. Entorno de pruebas
1.1 Hardware y sistema
| Elemento | Resultado en el dispositivo de prueba |
|---|---|
| Dispositivo | Seeed Studio reComputer R2245, nombre de host reComputer-R22 |
| Módulo de cálculo | Raspberry Pi Compute Module 5 Rev 1.0 |
| CPU | Quad-core Arm Cortex-A76, hasta 2.4 GHz |
| Memoria | 4.0 GiB |
| Sistema operativo | Debian GNU/Linux 13.2 (trixie), ARM64 |
| Kernel | 6.12.62+rpt-rpi-2712 |
| Almacenamiento del sistema | eMMC de 29.1 GB; 66 % utilizado durante las pruebas, con aproximadamente 9.3 GB disponibles |
| Acelerador de IA | Hailo-8 M.2, nodo de dispositivo /dev/hailo0 |
| HailoRT/controlador/firmware | 4.23.0 / 4.23.0 / 4.23.0 |
| Docker | Docker CE 29.7.2, Compose 5.4.0 |
| Red | ETH0 en una LAN IPv4 Gigabit; las demás interfaces se desactivaron durante las pruebas |
| Cámara | Una transmisión H.264; el archivo de inicialización de grabación indicó 1280×720 |
2. Despliegue
2.1 Confirmar que la unidad de grabación está realmente montada
No identifique una unidad únicamente por el nombre de su directorio.
findmnt -T /mnt/nvme
lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINTS,MODEL
df -hT /mnt/nvmeEl directorio debe tratarse como unidad de grabación solo cuando SOURCE reportado por findmnt apunte a una partición NVMe como /dev/nvme0n1p1. Si la unidad NVMe no se ha instalado o montado, detenga primero la grabación continua en lugar de permitir que Docker cree un directorio con el mismo nombre en la unidad del sistema.
Recomendaciones para un despliegue en producción:
- Utilice un SSD NVMe de alta resistencia formateado como
ext4. - Agregue la unidad a
/etc/fstabusando su UUID. - Confirme que se monta correctamente antes de iniciar Viseron.
- Agregue una dependencia de montaje al servicio para que la falta de una unidad NVMe no provoque que las grabaciones se guarden en la eMMC.
- Realice una copia de seguridad de
/srv/viseron/config, que contiene tanto los datos de PostgreSQL como la configuración de Viseron.
2.2 Archivo Compose recomendado
La siguiente configuración de Compose es adecuada para el R2245. Reemplace la etiqueta de la imagen por una versión fija que haya superado las pruebas de regresión. El mapeo del dispositivo Hailo solo es útil cuando las versiones de HailoRT coinciden.
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/hailo0Inicie e inspeccione el servicio:
cd /srv/viseron
docker compose up -d
docker compose logs --tail=200Abra la interfaz web en:
http://DEVICE_IP:88882.3 Configuración de cámara recomendada
Utilice secrets.yaml para almacenar las credenciales de la cámara.
# 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:Usar la transmisión principal para grabación con copia directa y una subtransmisión de menor resolución para decodificación y detección es una de las optimizaciones más efectivas para la CM5. Hailo solo acelera la inferencia de redes neuronales; no reemplaza la decodificación de video H.264/H.265.
3. Grabación con una sola cámara y pruebas de recursos
3.1 Condiciones de la prueba
- Una transmisión de cámara H.264
- El archivo de inicialización de grabación indicó 1280×720
- FFmpeg escribió segmentos fMP4 usando
-c:v copy, sin recodificación - Detección de objetos Darknet a 1 FPS
scan_on_motion_only: false, es decir, la inferencia continuaba incluso sin movimiento- Cinco muestras consecutivas tomadas con aproximadamente dos segundos de diferencia
- Sin vista previa de múltiples cámaras en el navegador ni reproducción simultánea
3.2 Resultados
| Métrica | Resultado medido |
|---|---|
| Uso promedio de CPU del contenedor Viseron | 50.66 % |
| Rango de CPU en cinco muestras | 49.78 %–51.94 % |
| RSS combinado de los procesos en el contenedor | Aproximadamente 1140.5 MiB |
| Número de procesos | 158–159 |
| Temperatura de la CM5 | 40.6–42.8 °C |
| Indicador de reducción de velocidad/subvoltaje | 0x0 |
| Tasa de datos de grabación a corto plazo | Aproximadamente 4.259 Mbps |
| Volumen de grabación estimado por día | Aproximadamente 46.0 GB/día |
| Respuesta de la página de inicio web en la LAN | 39.29 ms en promedio en 10 solicitudes |
Un valor de CPU de Docker del 50 % corresponde aproximadamente a la mitad de un núcleo de CPU.
El directorio de grabación creció 7,986,412 bytes en 15 segundos, equivalentes a aproximadamente 4.259 Mbps. Este resultado aplica solo a la transmisión de cámara actual. Los requisitos reales de almacenamiento deben calcularse a partir de la tasa de bits combinada de todas las cámaras:
Daily storage (GB) ≈ Total bit rate (Mbps) × 10.8Con 10 GB de almacenamiento disponible, la tasa de bits actual de una sola cámara proporcionaría espacio para solo unas cinco horas de grabaciones adicionales si no se aplicara una política de limpieza. Por lo tanto, se debe instalar y verificar una unidad NVMe antes de agregar más cámaras.
3.3 Experiencia de usuario
Durante las pruebas, la página de inicio web devolvió HTTP 200, los segmentos de grabación de la cámara continuaron creciendo y se generaron instantáneas válidas de detección de objetos. La configuración basada en componentes de Viseron permite combinar cámaras, detectores, grabación y políticas de almacenamiento de forma independiente, lo que la hace adecuada para usuarios familiarizados con YAML.
4. Pruebas del Hailo-8 e integración con Viseron
4.1 Prueba de hardware independiente
El host detectó correctamente el Hailo-8. Se realizó una prueba de inferencia de cinco segundos con el modelo yolov8s_h8.hef proporcionado por el sistema:
| Métrica | Resultado medido |
|---|---|
| Fotogramas procesados | 503 |
| Rendimiento equivalente | Aproximadamente 100.6 FPS |
| Latencia de hardware | 6.66 ms |
| Temperatura mínima del Hailo | 29.02 °C |
| Temperatura media del Hailo | 29.55 °C |
| Temperatura máxima del Hailo | 29.68 °C |
| Temperatura de la CM5 antes/después de la prueba | 40.6 °C / 44.4 °C |
| Indicador de reducción de velocidad de la CM5 | 0x0 |
4.2 Integración del Hailo-8 mediante el método oficial de Viseron
La configuración esperada de Viseron es:
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:El dispositivo también debe mapearse dentro del contenedor:
devices:
- /dev/hailo0:/dev/hailo0La documentación oficial de Viseron advierte explícitamente que su contenedor actualmente usa HailoRT 4.22.0 y que otras versiones del controlador del host pueden ser incompatibles. Un ejemplo del error resultante es:
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 frente a Frigate
| Categoría | Viseron | Frigate |
|---|---|---|
| Licencia de código abierto | MIT | MIT |
| Soporte Docker ARM64 | Soporta imágenes multi-arquitectura | Soporta ARM64, incluyendo compilaciones destinadas a Raspberry Pi |
| Modelo de configuración | Cámaras, detección de movimiento, detección de objetos, NVR, almacenamiento y otros componentes pueden combinarse libremente | Organizado en torno a cámaras, detección, seguimiento, Review y grabación |
| Grabación continua/por eventos | Soportada, con almacenamiento por niveles flexible | Soportada, con políticas de retención sencillas |
| Detección de objetos | Hailo, Coral, Darknet, Ultralytics, servicios externos y más | Hailo, Coral, ONNX, OpenVINO, TensorRT y más |
| Estado de Hailo-8 en este dispositivo | El contenedor 4.22 entra en conflicto con el host 4.23 y actualmente no se puede usar | Seeed proporciona un tutorial de referencia para R2000/Hailo; las versiones reales deben verificarse aún |
| Seguimiento de objetos | Puede grabar alrededor de eventos de detección, pero el seguimiento no es su característica más fuerte | El seguimiento y Review son partes centrales del flujo de trabajo |
| Detección de audio | No es una característica principal | Detección de eventos de audio integrada |
| Almacenamiento | Múltiples niveles con controles independientes de eventos y grabación continua | Políticas de retención claras para grabaciones continuas, de movimiento, alerta y detección |
| Home Assistant | Disponible a través de MQTT Discovery | Integración más madura y recursos comunitarios |
| Curva de aprendizaje | Más alta, con composición flexible de componentes | Moderada, con un camino de incorporación más unificado |
| Más adecuado para | Usuarios que desean pipelines de detección personalizados y políticas de almacenamiento | Usuarios que priorizan el seguimiento, Review, Home Assistant y ejemplos de despliegue establecidos |
La principal ventaja de Viseron es su apertura y capacidad de composición. Por ejemplo, MOG2 puede filtrar el movimiento primero, luego Hailo puede realizar la detección de objetos, y el post-procesamiento o MQTT pueden manejar el resultado. Sus niveles de almacenamiento también admiten arquitecturas como mantener grabaciones continuas recientes en NVMe mientras se archivan eventos a largo plazo en un NAS.
La ventaja de Frigate es que la detección, el seguimiento, Review y Home Assistant forman un flujo de trabajo de producto más completo. Si el objetivo es implementar Hailo-8 en un R2245 lo más rápido posible en lugar de experimentar con los componentes de Viseron, Frigate es actualmente la opción predeterminada más segura.
6. Recomendaciones
Cuándo elegir Viseron
- Planea implementar un sistema pequeño con una a cuatro cámaras y grabación principalmente local.
- Se siente cómodo con Docker, YAML, RTSP y administración básica de Linux.
- Valora el almacenamiento por niveles y la composición flexible de componentes.
- Puede comenzar con detección de movimiento o detección basada en CPU mientras espera que las versiones de Hailo estén alineadas.
- Está dispuesto a solucionar problemas de rutas de cámara, dependencias y controladores a través de registros.
Cuándo Frigate es actualmente la mejor opción
- Hailo-8 debe usarse para la detección de objetos de inmediato.
- Depende en gran medida de Home Assistant.
- El seguimiento de objetos, Review y los eventos de audio son prioridades más altas.
- Desea seguir el tutorial de implementación existente de Seeed para R2000.
- No desea mantener un contenedor HailoRT personalizado.