William Zhang2026-09-22

Sistema NVR basado en Frigate en el reComputer RK3576

Despliega Frigate NVR en el reComputer RK3576 con un solo comando Docker, habilitando la decodificación acelerada por hardware y la inferencia RKNN.

NVRCVEdge AIGithub

Construye rápidamente un proyecto NVR en el borde con RK3576 / Docker / RKNN / Frigate.


Frigate es un NVR de código abierto centrado en la detección de objetos con IA en local y en tiempo real. Toda la inferencia se ejecuta en tu propio hardware: los streams de cámara nunca se suben a ningún servidor en la nube, lo que protege la privacidad y evita los costosos gastos mensuales de IA en la nube. Frigate admite zonas de detección personalizadas y zonas de enmascaramiento, y se integra sin problemas con Home Assistant para llevar las fuentes NVR a las automatizaciones del hogar inteligente.

Esta guía muestra cómo desplegar Frigate en el reComputer RK3576 con Docker Compose y aprovechar el conjunto integrado en el RK3576 de Rockchip MPP (decodificación por hardware) + RGA (aceleración 2D) + RKNN (inferencia NPU) para análisis de vídeo en tiempo real con bajo uso de CPU.

Primeros pasos

En esta guía seguimos el flujo de despliegue oficial y mostramos cómo configurar un entorno Docker de Frigate que realiza detección de IA local en streams de cámara RTSP en el reComputer RK3576.

Requisitos previos según la documentación oficial

Frigate recomienda oficialmente:

  • Un sistema operativo basado en Debian como el mejor host;
  • No se recomiendan las máquinas virtuales (Proxmox, ESXi, Virtualbox): algunas configuraciones de Proxmox pueden funcionar, pero añaden complejidad al passthrough de Coral/GPU;
  • Windows no es compatible oficialmente (WSL/Virtualbox pueden funcionar, pero el passthrough de GPU/Coral es complicado).

Para plataformas Rockchip, comprueba la versión de la imagen del sistema:

bash
$ uname -r
5.10.xxx-rockchip

$ ls /dev/dri
by-path  card0  card1  renderD128  renderD129

$ sudo cat /sys/kernel/debug/rknpu/version
RKNPU driver: v0.9.2

Cálculo de la memoria compartida necesaria

Frigate usa memoria compartida para procesar los fotogramas de vídeo. El shm-size por defecto de Docker es de 64 MB. Para un escenario de detección con dos cámaras 720p, el tamaño de memoria compartida por defecto de 128 MB es suficiente. Elige la asignación de memoria compartida según tu situación real para aprovechar al máximo los recursos.

Recomendamos usar la calculadora oficial en línea: https://docs.frigate.video/frigate/installation#calculating-required-shm-size

Obtener el enlace de descarga

Visita el sitio oficial https://docs.frigate.video/frigate/installation#docker y selecciona las siguientes opciones para obtener las instrucciones de instalación.

Rellena la sección Storage Paths según tus necesidades reales (puedes dejar algunos vacíos si no son necesarios). En Other Options, introduce el tamaño de memoria calculado arriba; también puedes establecer una contraseña manualmente (opcional).

Luego copia las instrucciones de instalación:

yaml
services:
  frigate:
    container_name: frigate
    privileged: true # This may not be necessary for all setups
    restart: unless-stopped
    stop_grace_period: 30s # Allow enough time to shut down the various services
    image: ghcr.io/blakeblackshear/frigate:stable-rk
    shm_size: "512mb" # Update for your cameras based on SHM calculation
    security_opt:
      - apparmor=unconfined
      - systempaths=unconfined
    devices:
      - /dev/dma_heap # Rockchip DMA heap
      - /dev/rga # Rockchip RGA
      - /dev/mpp_service # Rockchip MPP service
      - /dev/dri # Intel/AMD GPU hardware acceleration
    volumes:
      - /etc/localtime:/etc/localtime:ro # Sync host time
      - /path/to/your/config:/config # Config file directory
      - /path/to/your/storage:/media/frigate # Recording storage directory
      - type: tmpfs # 1GB in-memory filesystem for recording segment storage
        target: /tmp/cache
        tmpfs:
          size: 1000000000
      - /sys/:/sys/:ro # Rockchip system info
    ports:
      - "8554:8554" # Access RTSP feeds from go2rtc
      - "8971:8971" # Authenticated UI and API access (default HTTPS)
      - "8555:8555" # WebRTC over TCP
      - "8555:8555/udp" # WebRTC over UDP
    environment:
      TZ: "Asia/Shanghai" # Timezone

O puedes tomar directamente desde GitHub la configuración probada y verificada: https://github.com/doublelf/RK_friigate_dockeryml

yaml
services:
  frigate:
    container_name: frigate
    privileged: true # Usar modo privilegiado
    restart: unless-stopped
    stop_grace_period: 30s # Deja tiempo suficiente para que los servicios se cierren
    image: docker.cnb.cool/frigate-cn/frigate:stable-rk # Aquí está la URL del mirror nacional; la URL original es ghcr.io/blakeblackshear/frigate:stable-rk
    shm_size: "512mb" # Actualiza este valor para tus cámaras según el cálculo anterior
    devices:
      - /dev/dri:/dev/dri # Para aceleración por hardware de GPU
      - /dev/dma_heap # RockChip DMA heap
      - /dev/rga # RockChip RGA
      - /dev/mpp_service # RockChip MPP service
    security_opt:
      - apparmor=unconfined
      - systempaths=unconfined
    volumes:
      - /etc/localtime:/etc/localtime:ro # Sincronizar la hora del host
      - /home/seeed/frigate/config:/config # "/home/seeed/frigate/config" es la ruta en tu host donde quieres guardar los archivos de configuración
      - /home/seeed/frigate/video:/media/frigate # "/home/seeed/frigate/video" es la ruta en tu host donde quieres guardar los vídeos de vigilancia
      - type: tmpfs # Usa 1 GB de RAM como almacenamiento temporal para los segmentos de grabación
        target: /tmp/cache
        tmpfs:
          size: 1000000000
      - /sys/:/sys/:ro # Información del sistema RockChip
    ports:
      - "8971:8971" # Puerto por defecto del servicio Frigate, HTTPS por defecto
      - "8554:8554" # Stream de vídeo RTSP
      - "8555:8555/tcp" # WebRTC sobre TCP
      - "8555:8555/udp" # WebRTC sobre UDP
    environment:
      FRIGATE_RTSP_PASSWORD: "password" # Contraseña RTSP; cámbiala a la contraseña que prefieras
      TZ: "Asia/Shanghai" # Establecer en la zona horaria de China +8
      HF_ENDPOINT: "https://huggingface.mirror.frigate-cn.video" # Mirror nacional de Huggingface que proporcionamos, para acelerar la descarga de algunos modelos necesarios para Frigate
      GITHUB_ENDPOINT: "https://github.mirror.frigate-cn.video" # Mirror nacional de GitHub que proporcionamos, para acelerar la descarga de algunos modelos necesarios para Frigate
      TF_KERAS_MOBILENET_V2_WEIGHTS_URL: https://cnb.cool/frigate-cn/mirrors/storage.googleapis/-/git/raw/main/tensorflow/keras-applications/mobilenet_v2/mobilenet_v2_weights_tf_dim_ordering_tf_kernels_0.35_224_no_top.h5 # Archivo de pesos que requiere el modelo de clasificación

Crea el archivo docker-compose.yml con el contenido anterior y ejecútalo en el terminal:

bash
docker compose up -d

Cuando la compilación finalice, Frigate ya estará configurado localmente. A continuación, puedes modificar el archivo de configuración y, tras el inicio, comprobar el funcionamiento en el backend.

config.yml mínima oficial

La siguiente config.yml es una configuración mínima funcional: 1 cámara RTSP + MQTT desactivado + detector por defecto (CPU), que se proporciona por defecto tras instalar Frigate. Si no tienes este archivo, tendrás que crearlo manualmente.

bash
mkdir -p ~/frigate/config
tee ~/frigate/config/config.yml > /dev/null << 'EOF'

mqtt:
  enabled: False

cameras:
  my_cam:
    ffmpeg:
      inputs:
        - path: rtsp://viewer:{FRIGATE_RTSP_PASSWORD}@<camera-ip>:554/stream
          roles:
            - detect
    detect:
      width: 1280
      height: 720

detect:
  fps: 5
EOF

Sustituye <camera-ip> por la IP real de tu cámara. Guarda este archivo en /path/to/your/config/config.yml (es decir, el /config mapeado en docker-compose).

Esta configuración también se puede modificar para ejecutar varias cámaras simultáneamente. Solo tienes que añadir más estructuras bajo la configuración anterior. La siguiente configuración inicia dos cámaras con configuraciones detalladas diferentes:

yaml
mqtt:
  enabled: false

face_recognition:
  enabled: true

go2rtc:
  streams:
    usb_camera:
      - ffmpeg:device?video=0&video_size=640x480#video=h264

cameras:
  usb_camera:
    ffmpeg:
      inputs:
        - path: rtsp://127.0.0.1:8554/usb_camera
          input_args: preset-rtsp-restream
          roles:
            - detect
            - record
    detect:
      width: 640
      height: 480
      enabled: false  # Detección inicialmente desactivada; prueba primero el stream de vídeo

    record:
      enabled: true
      continuous:
        days: 0 # Si se establece en 0, por defecto no se grabarán los vídeos de vigilancia sin un tipo especificado
      alerts: # Aquí se especifica que solo se grabarán los vídeos de alarma; se ignora la configuración anterior
        retain:
          days: 30
          mode: motion

    zones:
      zone_b32f13ac:
        coordinates: 0.867,0.093,0.417,0.115,0.437,0.859,0.974,0.85
        loitering_time: 0
        friendly_name: Zona 1

  video_test:  # Dale un nombre a esta cámara de prueba
    ffmpeg:
      inputs:
        - path: /home/seeed/frigate/test.mp4  # Ruta de tu archivo de vídeo
          input_args: -re -stream_loop -1 -fflags +genpts
          roles:
            - detect
            - record
    detect:
      enabled: true
    record:
      enabled: false  # Se recomienda desactivar la grabación durante las pruebas
    snapshots:
      enabled: false  # Se recomienda desactivar las instantáneas durante las pruebas

version: 0.17-0

Inicia cameras, video_test sangrados, cada uno representa la configuración de una cámara. ffmpeg indica la configuración global de la cámara, incluyendo la ruta del archivo de vídeo y los roles de aplicación; detect representa la función de detección de objetos, record la función de grabación y snapshots la función de instantáneas.

Inicio y verificación

Sigue el flujo:

bash
cd /path/to/your/frigate
sudo docker compose up -d

# Ver los logs de registro del inicio
sudo docker compose logs -f frigate

Si los logs contienen INFO : Frigate started successfully. o la UI web escucha en 0.0.0.0:8971, el inicio se ha realizado correctamente.

Busca palabras clave en los logs para obtener la cuenta y la contraseña:

bash
docker logs frigate 2>&1 | grep -Ei 'rtsp://|rtsps://|password|passwd|user|username|@'

Puede que veas algo como rtsp://admin:password@192.168.1.100:554/stream.

bash
# Verificar el estado del contenedor
sudo docker compose ps
# Se espera que el estado del servicio Frigate sea running / healthy
bash
# Acceder desde el navegador
https://<your-host-ip>:8971

Inicia sesión con la cuenta y la contraseña.

Tras iniciar sesión correctamente, verás la vista completa y la información de las cámaras configuradas en el archivo de configuración anterior:

Selecciona una y haz clic para entrar; luego haz clic en la esquina superior derecha para acceder a la interfaz de depuración, donde verás todas las funciones de la imagen. En la esquina superior derecha se encuentran las funciones que se pueden configurar en el archivo de configuración para determinar si están incluidas y si se inician por adelantado; a la izquierda se encuentran las funciones integradas que permiten diseñar límites, etc. más adelante: