Parker Hu2026-08-25

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.

ViseronNVRHailo-8Other

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

ElementoResultado en el dispositivo de prueba
DispositivoSeeed Studio reComputer R2245, nombre de host reComputer-R22
Módulo de cálculoRaspberry Pi Compute Module 5 Rev 1.0
CPUQuad-core Arm Cortex-A76, hasta 2.4 GHz
Memoria4.0 GiB
Sistema operativoDebian GNU/Linux 13.2 (trixie), ARM64
Kernel6.12.62+rpt-rpi-2712
Almacenamiento del sistemaeMMC de 29.1 GB; 66 % utilizado durante las pruebas, con aproximadamente 9.3 GB disponibles
Acelerador de IAHailo-8 M.2, nodo de dispositivo /dev/hailo0
HailoRT/controlador/firmware4.23.0 / 4.23.0 / 4.23.0
DockerDocker CE 29.7.2, Compose 5.4.0
RedETH0 en una LAN IPv4 Gigabit; las demás interfaces se desactivaron durante las pruebas
CámaraUna 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.

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

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

  1. Utilice un SSD NVMe de alta resistencia formateado como ext4.
  2. Agregue la unidad a /etc/fstab usando su UUID.
  3. Confirme que se monta correctamente antes de iniciar Viseron.
  4. 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.
  5. 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.

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

Inicie e inspeccione el servicio:

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

Abra la interfaz web en:

text
http://DEVICE_IP:8888

2.3 Configuración de cámara recomendada

Utilice secrets.yaml para almacenar las credenciales de la cámara.

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:

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étricaResultado medido
Uso promedio de CPU del contenedor Viseron50.66 %
Rango de CPU en cinco muestras49.78 %–51.94 %
RSS combinado de los procesos en el contenedorAproximadamente 1140.5 MiB
Número de procesos158–159
Temperatura de la CM540.6–42.8 °C
Indicador de reducción de velocidad/subvoltaje0x0
Tasa de datos de grabación a corto plazoAproximadamente 4.259 Mbps
Volumen de grabación estimado por díaAproximadamente 46.0 GB/día
Respuesta de la página de inicio web en la LAN39.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:

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

Con 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étricaResultado medido
Fotogramas procesados503
Rendimiento equivalenteAproximadamente 100.6 FPS
Latencia de hardware6.66 ms
Temperatura mínima del Hailo29.02 °C
Temperatura media del Hailo29.55 °C
Temperatura máxima del Hailo29.68 °C
Temperatura de la CM5 antes/después de la prueba40.6 °C / 44.4 °C
Indicador de reducción de velocidad de la CM50x0

4.2 Integración del Hailo-8 mediante el método oficial de Viseron

La configuración esperada de Viseron es:

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:

El dispositivo también debe mapearse dentro del contenedor:

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

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

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 frente a Frigate

CategoríaViseronFrigate
Licencia de código abiertoMITMIT
Soporte Docker ARM64Soporta imágenes multi-arquitecturaSoporta ARM64, incluyendo compilaciones destinadas a Raspberry Pi
Modelo de configuraciónCámaras, detección de movimiento, detección de objetos, NVR, almacenamiento y otros componentes pueden combinarse librementeOrganizado en torno a cámaras, detección, seguimiento, Review y grabación
Grabación continua/por eventosSoportada, con almacenamiento por niveles flexibleSoportada, con políticas de retención sencillas
Detección de objetosHailo, Coral, Darknet, Ultralytics, servicios externos y másHailo, Coral, ONNX, OpenVINO, TensorRT y más
Estado de Hailo-8 en este dispositivoEl contenedor 4.22 entra en conflicto con el host 4.23 y actualmente no se puede usarSeeed proporciona un tutorial de referencia para R2000/Hailo; las versiones reales deben verificarse aún
Seguimiento de objetosPuede grabar alrededor de eventos de detección, pero el seguimiento no es su característica más fuerteEl seguimiento y Review son partes centrales del flujo de trabajo
Detección de audioNo es una característica principalDetección de eventos de audio integrada
AlmacenamientoMúltiples niveles con controles independientes de eventos y grabación continuaPolíticas de retención claras para grabaciones continuas, de movimiento, alerta y detección
Home AssistantDisponible a través de MQTT DiscoveryIntegración más madura y recursos comunitarios
Curva de aprendizajeMás alta, con composición flexible de componentesModerada, con un camino de incorporación más unificado
Más adecuado paraUsuarios que desean pipelines de detección personalizados y políticas de almacenamientoUsuarios 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.