Parker Hu2025-07-17

Análisis de seguimiento de futbolistas con reComputer RK3576

Utilización de la aceleración hardware RGA 2D y aceleración VPU MPP de reComputer RK3576. Ejecución del modelo yolov8n para identificar futbolistas y lograr análisis en tiempo real.

reComputer-RKrk3576yolotrackingfootballGithub

Análisis de seguimiento de jugadores de fútbol con reComputer RK3576

Un proyecto de análisis inteligente de campos de fútbol basado en RK3576 / RKNN / MPP / RGA / ZLMediaKit.

Puedes ver el código fuente del proyecto en este enlace: https://github.com/litxaohu/football_project

Alternativamente, puedes descargar la versión compilada para ejecutar el proyecto localmente en tu reComputer RK3576:

nota: Este proyecto tiene requisitos de memoria bajos, pero un uso de CPU alto. Se considerará la optimización del uso de CPU en el futuro.

bash
wget -O rk3576_football_demo-linux-aarch64.tar.gz https://github.com/litxaohu/football_project/releases/download/v1.0.0/rk3576_football_demo-linux-aarch64.tar.gz
tar -xzvf rk3576_football_demo-linux-aarch64.tar.gz

cd install
export LD_LIBRARY_PATH="$(pwd)/lib:${LD_LIBRARY_PATH}"

Puedes subir videos locales al dispositivo para su análisis y procesamiento, o agregar una fuente de video RTSP para análisis en tiempo real:

Análisis de video local:

bash
sudo ./bin/rk3576_football_demo \
  --source localvideo \
  --localvideo ./video/football.mp4 \ #Cámbialo por la ruta local de tu archivo de video
  --model model/yolov8n_rk3576.rknn \
  --output-width 1280 \
  --output-height 720 \
  --fps 30 \
  --http-port 8000 \
  --streams ai \
  --ai-conf-threshold 0.25

Análisis de video RTSP:

bash
sudo ./bin/rk3576_football_demo \
  --source rtsp \
  --rtsp-input-url "rtsp://192.168.100.101:554/live" \
  --rtsp-username admin \
  --rtsp-password 123456 \
  --model model/yolov8n_rk3576.rknn \
  --output-width 1280 \
  --output-height 720 \
  --fps 30 \
  --http-port 8000 \
  --streams ai \
  --ai-conf-threshold 0.25

Vista previa:

  • punto de entrada de la página http://<board-ip>:8000/

Características del Proyecto

Capacidades Actuales

  • Fuentes de entrada:
    • v4l2
    • rtsp
    • localvideo
  • Flujos de salida:
    • flujo principal rtsp://<board-ip>:8554/live/camera
    • subflujo rtsp://<board-ip>:8554/live/camera_sub
    • flujo de depuración de IA rtsp://<board-ip>:8554/live/camera_ai
  • Web:
    • punto de entrada de la página http://<board-ip>:8000/
    • endpoint de estado HLS /api/hls/status
    • lista de reproducción HLS /api/hls/playlist.m3u8
    • endpoint de detección en vivo /api/live_state
  • IA:
    • entrada fija de la NPU 640x640
    • objetivo de detección predeterminado person
    • --enable-ball habilita la salida de ball
    • --ball-trail habilita el dibujo de la trayectoria del balón en el flujo de depuración de IA
  • Seguimiento:
    • salida estable de track_id
    • el JSON devuelve track_id, appear_frames, first_seen_sec, last_seen_sec

Reproducción Web

Actualmente se utiliza:

  • protocolo: HLS
  • códec: H.264
  • velocidad de fotogramas: 30 FPS
  • resolución: 1280x720

Compilación y Ejecución

CI de GitHub y Empaquetado de Lanzamientos

Este repositorio incluye un flujo de trabajo de GitHub Actions que hará lo siguiente:

  • compilar el proyecto automáticamente en cada push o pull request
  • ejecutar el mismo script de compilación usado localmente: ./scripts/build-linux.sh
  • generar un archivo de lanzamiento para Linux/aarch64 en dist/
  • publicar el archivo como un release de GitHub cuando se envía una etiqueta como v1.0.0

Para usarlo:

  1. Crea un repositorio de GitHub y sube el proyecto a él.
  2. Agrega el repositorio a GitHub Actions.
  3. Envía una etiqueta como git tag v1.0.0 && git push origin v1.0.0 para activar un lanzamiento empaquetado.

Dependencias

  • entorno de ejecución de la placa RK3576
  • RKNN Runtime
  • Rockchip MPP
  • RGA
  • ZLMediaKit
  • FFmpeg

Compilación

bash
cd rk3576_football_demo
chmod +x scripts/build-linux.sh
./scripts/build-linux.sh

Preparación Antes de Ejecutar

bash
cd install
export LD_LIBRARY_PATH="$(pwd)/lib:${LD_LIBRARY_PATH}"

Directorio de Modelos

text
model/
  yolov8n_rk3576.rknn
  yolov8s_rk3576.rknn
  yolov8m_rk3576.rknn

Cuando no se proporciona --model explícitamente, se intentan automáticamente los nombres de modelo predeterminados anteriores.

Ejemplos de Inicio

Análisis de Fútbol en Vivo por RTSP + Web

bash
./bin/rk3576_football_demo \
  --source rtsp \
  --rtsp-input-url "rtsp://192.168.100.101:554/live" \
  --rtsp-username admin \
  --rtsp-password 123456 \
  --model model/yolov8n_rk3576.rknn \
  --output-width 1280 \
  --output-height 720 \
  --fps 30 \
  --http-port 8000 \
  --streams main,sub,ai
bash
sudo ./bin/rk3576_football_demo \
  --source localvideo \
  --localvideo ./video/football.mp4 \
  --model model/yolov8n_rk3576.rknn \
  --output-width 1280 \
  --output-height 720 \
  --fps 30 \
  --http-port 8000 \
  --streams ai \
  --ai-conf-threshold 0.15

Solo Flujo de Depuración de IA + Web

bash
./bin/rk3576_football_demo \
  --source rtsp \
  --rtsp-input-url "rtsp://192.168.100.101:554/live" \
  --rtsp-username admin \
  --rtsp-password 123456 \
  --model model/yolov8n_rk3576.rknn \
  --streams ai \
  --http-port 8000

Habilitar Detección de Balón y Trayectoria

bash
./bin/rk3576_football_demo \
  --source rtsp \
  --rtsp-input-url "rtsp://192.168.100.101:554/live" \
  --model model/yolov8n_rk3576.rknn \
  --enable-ball \
  --ball-trail \
  --ball-trail-length 20

Depurar Objetivos de Baja Confianza

bash
./bin/rk3576_football_demo \
  --source localvideo \
  --localvideo /home/rk76/CPP_yolov8/video/football.mp4 \
  --model model/yolov8n_rk3576.rknn \
  --streams ai \
  --ai-conf-threshold 0.15 \
  --detail-info

Exportar Fotogramas de Entrada de la NPU

bash
./bin/rk3576_football_demo \
  --source localvideo \
  --localvideo /home/rk76/CPP_yolov8/video/football.mp4 \
  --model model/yolov8n_rk3576.rknn \
  --streams ai \
  --dump-ai-input-dir ./debug_ai_input \
  --dump-ai-input-every 30 \
  --detail-info

Mostrar Ayuda

bash
./bin/rk3576_football_demo --help

API Web

Estado en Vivo

  • GET /api/live_state

Ejemplo de respuesta:

json
{
  "success": true,
  "message": "",
  "stream_type": "hls",
  "detect_fps": 28.7,
  "updated_at": 1720851200,
  "source": "live frame",
  "image": {
    "width": 1280,
    "height": 720
  },
  "predictions": [
    {
      "class": "person",
      "confidence": 0.92,
      "track_id": "#12",
      "track_numeric": 12,
      "appear_frames": 35,
      "first_seen_sec": 3,
      "last_seen_sec": 5,
      "box": {
        "x1": 100,
        "y1": 200,
        "x2": 300,
        "y2": 500
      }
    }
  ]
}

Estado HLS

  • GET /api/hls/status

Reproducción HLS

  • GET /api/hls/playlist.m3u8

API de Subida/Archivos

  • POST /api/video/upload
  • GET /api/video/list
  • GET /api/video/download/<filename>

Notas:

  • Esta versión prioriza el Web/HLS en tiempo real y el JSON en vivo.
  • POST /api/video/analyze y la gestión completa de tareas de análisis fuera de línea quedan reservados para una futura extensión.

Parámetros Clave

  • --streams <main,sub,ai>: selecciona qué flujos de salida habilitar
  • --ai-width <value> / --ai-height <value>: tamaño de salida del flujo de depuración de IA
  • --http-host <value>: dirección de escucha Web
  • --http-port <value>: puerto de escucha Web, predeterminado 8000
  • --web-root <path>: directorio raíz de recursos estáticos
  • --hls-dir <path>: directorio de salida HLS
  • --uploads-dir <path>: directorio de subidas
  • --results-dir <path>: directorio de resultados
  • --enable-ball: habilita la salida de detección de balón
  • --ball-trail: habilita el dibujo de la trayectoria del balón
  • --ball-trail-length <value>: número de puntos de trayectoria a conservar
  • --ai-conf-threshold <value>: umbral de confianza de detección de IA, predeterminado 0.25
  • --disable-web: deshabilita el servicio Web/HLS integrado
  • --detail-info: habilita registros detallados

Estructura del Proyecto

text
rk3576_football_demo
├── CMakeLists.txt
├── football_players.html
├── static
│   └── hls.min.js
├── include
│   └── rk3576_yolo_demo
│       ├── ai
│       ├── app
│       ├── branch
│       ├── common
│       ├── tracking
│       └── web
├── src
│   ├── ai
│   ├── app
│   ├── branch
│   ├── common
│   ├── tracking
│   ├── web
│   └── ...
└── third_party

Extensiones de Inferencia de IA

  • el punto de entrada de RKNN está en src/ai/yolov8_engine.cpp
  • el preprocesamiento utiliza principalmente RGA
  • los resultados de detección se almacenan en la caché DetectionFrame, y luego se emparejan y combinan según el PTS por la rama de IA

Registro y Depuración

  • por defecto, solo se imprime el resumen de inicio
  • los registros detallados en tiempo de ejecución se habilitan con --detail-info
  • el logger se encuentra en include/rk3576_yolo_demo/common/logger.hpp

Recomendaciones de Despliegue

  • para despliegues en producción, configura los permisos de /dev/rga, los dispositivos de video y las bibliotecas de tiempo de ejecución relacionadas
  • se recomienda empaquetar los modelos, las bibliotecas de tiempo de ejecución y los archivos de configuración junto con install/
  • la entrada RTSP prefiere libavformat; los entornos más antiguos recurren automáticamente a ffmpeg pipe
  • para un funcionamiento estable a largo plazo, usa systemd o supervisor para la gestión y reinicio de procesos

Limitaciones Conocidas

  • el renderizado del cuadro delimitador de camera_ai y la superposición de marca de agua aún generan cierta sobrecarga de CPU
  • e2e no es la latencia completa de extremo a extremo; solo representa el tiempo interno de la rama
  • localvideo actualmente utiliza una ruta de lectura de flujo comprimido, principalmente para validación fuera de línea e inferencia en bucle