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.
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.
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:
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.25Análisis de video RTSP:
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.25Vista previa:
- punto de entrada de la página
http://<board-ip>:8000/
Características del Proyecto
Capacidades Actuales
- Fuentes de entrada:
v4l2rtsplocalvideo
- 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
- flujo principal
- 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
- punto de entrada de la página
- IA:
- entrada fija de la NPU
640x640 - objetivo de detección predeterminado
person --enable-ballhabilita la salida deball--ball-trailhabilita el dibujo de la trayectoria del balón en el flujo de depuración de IA
- entrada fija de la NPU
- Seguimiento:
- salida estable de
track_id - el JSON devuelve
track_id,appear_frames,first_seen_sec,last_seen_sec
- salida estable de
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:
- Crea un repositorio de GitHub y sube el proyecto a él.
- Agrega el repositorio a GitHub Actions.
- Envía una etiqueta como
git tag v1.0.0 && git push origin v1.0.0para activar un lanzamiento empaquetado.
Dependencias
- entorno de ejecución de la placa RK3576
- RKNN Runtime
- Rockchip MPP
- RGA
- ZLMediaKit
- FFmpeg
Compilación
cd rk3576_football_demo
chmod +x scripts/build-linux.sh
./scripts/build-linux.shPreparación Antes de Ejecutar
cd install
export LD_LIBRARY_PATH="$(pwd)/lib:${LD_LIBRARY_PATH}"Directorio de Modelos
model/
yolov8n_rk3576.rknn
yolov8s_rk3576.rknn
yolov8m_rk3576.rknnCuando 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
./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,aisudo ./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.15Solo Flujo de Depuración de IA + Web
./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 8000Habilitar Detección de Balón y Trayectoria
./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 20Depurar Objetivos de Baja Confianza
./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-infoExportar Fotogramas de Entrada de la NPU
./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-infoMostrar Ayuda
./bin/rk3576_football_demo --helpAPI Web
Estado en Vivo
GET /api/live_state
Ejemplo de respuesta:
{
"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/uploadGET /api/video/listGET /api/video/download/<filename>
Notas:
- Esta versión prioriza el Web/HLS en tiempo real y el JSON en vivo.
POST /api/video/analyzey 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, predeterminado8000--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, predeterminado0.25--disable-web: deshabilita el servicio Web/HLS integrado--detail-info: habilita registros detallados
Estructura del Proyecto
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_partyExtensiones 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 elPTSpor 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 affmpeg 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_aiy la superposición de marca de agua aún generan cierta sobrecarga de CPU e2eno es la latencia completa de extremo a extremo; solo representa el tiempo interno de la ramalocalvideoactualmente utiliza una ruta de lectura de flujo comprimido, principalmente para validación fuera de línea e inferencia en bucle