Parker Hu2026-07-17

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

Aproveche la aceleración de hardware RGA 2D y la aceleración VPU MPP del reComputer RK3576. Ejecute el modelo YOLOv8n para detectar jugadores de fútbol y lograr análisis en tiempo real.

reComputer-RKrk3576yolotrackingfootballGithub

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

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

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

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

nota: Este proyecto tiene bajos requisitos de memoria, pero un alto uso de CPU. 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}"

Puede cargar 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 \ #Change it to the local path of your video file
  --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:

  • página de entrada 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
    • sub flujo rtsp://<board-ip>:8554/live/camera_sub
    • flujo de depuración AI rtsp://<board-ip>:8554/live/camera_ai
  • Web:
    • página de entrada 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
  • AI:
    • entrada NPU fija 640x640
    • objetivo de detección predeterminado person
    • --enable-ball habilita la salida ball
    • --ball-trail habilita el dibujo de la trayectoria del balón en el flujo de depuración AI
  • Seguimiento:
    • salida estable de track_id
    • JSON devuelve track_id, appear_frames, first_seen_sec, last_seen_sec

Reproducción web

Actualmente usando:

  • 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 lanzamiento

Este repositorio incluye un flujo de trabajo de GitHub Actions que:

  • construye el proyecto automáticamente en push o pull request
  • ejecuta el mismo script de compilación utilizado localmente: ./scripts/build-linux.sh
  • produce un archivo de lanzamiento para Linux/aarch64 en dist/
  • publica el archivo como un lanzamiento de GitHub cuando se empuja una etiqueta como v1.0.0

Para usarlo:

  1. Cree un repositorio de GitHub y empuje el proyecto allí.
  2. Agregue el repositorio a GitHub Actions.
  3. Empuje 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 la ejecución

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

Directorio del modelo

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

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

Ejemplos de inicio

Análisis de fútbol en vivo 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

Flujo de depuración AI + Solo 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 y trayectoria del balón

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 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 carga/archivos

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

Notas:

  • Esta versión prioriza Web/HLS en tiempo real y JSON en vivo.
  • POST /api/video/analyze y la gestión completa de tareas de análisis fuera de línea están reservadas 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 AI
  • --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 cargas
  • --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 mantener
  • --ai-conf-threshold <value>: umbral de confianza de detección AI, 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 AI

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

Registro y depuración

  • por defecto, solo se imprime el resumen de inicio
  • los registros detallados de 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, configure los permisos de /dev/rga, dispositivos de video y bibliotecas de tiempo de ejecución relacionadas
  • se recomienda empaquetar los modelos, bibliotecas de tiempo de ejecución y archivos de configuración junto con install/
  • la entrada RTSP prefiere libavformat; los entornos más antiguos recurren automáticamente a ffmpeg pipe
  • para operación estable a largo plazo, utilice systemd o supervisor para la gestión y reinicio de procesos

Limitaciones conocidas

  • la renderización de cuadros delimitadores y la superposición de marcas de agua en camera_ai aún incurren en cierta sobrecarga de CPU
  • e2e no es la latencia completa de extremo a extremo; solo representa el tiempo de la rama interna
  • localvideo actualmente utiliza una ruta de lectura de flujo comprimido, principalmente para validación offline e inferencia en bucle