Analyse du suivi des footballeurs avec reComputer RK3576
Utilisation de l'accélération matérielle RGA 2D et de l'accélération VPU MPP du reComputer RK3576. Exécution du modèle yolov8n pour identifier les footballeurs et réaliser une analyse en temps réel.
Analyse de suivi des joueurs de football reComputer RK3576
Un projet d'analyse intelligente de terrain de football basé sur RK3576 / RKNN / MPP / RGA / ZLMediaKit.
Vous pouvez consulter le code source du projet à ce lien :
https://github.com/litxaohu/football_project
Vous pouvez également télécharger la version compilée pour exécuter le projet localement sur votre reComputer RK3576 :
note : Ce projet a de faibles besoins en mémoire, mais une utilisation CPU élevée. L'optimisation de l'utilisation du CPU sera envisagée à l'avenir.
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}"Vous pouvez téléverser des vidéos locales sur l'appareil pour les analyser et les traiter, ou ajouter une source vidéo RTSP pour une analyse en temps réel :
Analyse de vidéo locale :
sudo ./bin/rk3576_football_demo \
--source localvideo \
--localvideo ./video/football.mp4 \ #Remplacez par le chemin local de votre fichier vidéo
--model model/yolov8n_rk3576.rknn \
--output-width 1280 \
--output-height 720 \
--fps 30 \
--http-port 8000 \
--streams ai \
--ai-conf-threshold 0.25Analyse de vidéo 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.25Aperçu :
- point d'entrée de la page
http://<board-ip>:8000/
Fonctionnalités du projet
Capacités actuelles
- Sources d'entrée :
v4l2rtsplocalvideo
- Flux de sortie :
- flux principal
rtsp://<board-ip>:8554/live/camera - flux secondaire
rtsp://<board-ip>:8554/live/camera_sub - flux de débogage IA
rtsp://<board-ip>:8554/live/camera_ai
- flux principal
- Web :
- point d'entrée de la page
http://<board-ip>:8000/ - endpoint de statut HLS
/api/hls/status - playlist HLS
/api/hls/playlist.m3u8 - endpoint de détection en direct
/api/live_state
- point d'entrée de la page
- IA :
- entrée NPU fixe
640x640 - cible de détection par défaut
person --enable-ballactive la sortieball--ball-trailactive le tracé de la trajectoire du ballon sur le flux de débogage IA
- entrée NPU fixe
- Suivi :
- sortie stable de
track_id - le JSON renvoie
track_id,appear_frames,first_seen_sec,last_seen_sec
- sortie stable de
Lecture Web
Actuellement utilisé :
- protocole :
HLS - codec :
H.264 - fréquence d'images :
30 FPS - résolution :
1280x720
Compilation et exécution
CI GitHub et packaging des releases
Ce dépôt inclut un workflow GitHub Actions qui va :
- compiler automatiquement le projet à chaque push ou pull request
- exécuter le même script de build utilisé localement :
./scripts/build-linux.sh - produire une archive de release pour Linux/aarch64 sous
dist/ - publier l'archive en tant que release GitHub lorsqu'un tag tel que
v1.0.0est poussé
Pour l'utiliser :
- Créez un dépôt GitHub et poussez-y le projet.
- Ajoutez le dépôt à GitHub Actions.
- Poussez un tag comme
git tag v1.0.0 && git push origin v1.0.0pour déclencher une release packagée.
Dépendances
- environnement d'exécution de la carte RK3576
- RKNN Runtime
- Rockchip MPP
- RGA
- ZLMediaKit
- FFmpeg
Compilation
cd rk3576_football_demo
chmod +x scripts/build-linux.sh
./scripts/build-linux.shPréparation avant l'exécution
cd install
export LD_LIBRARY_PATH="$(pwd)/lib:${LD_LIBRARY_PATH}"Répertoire des modèles
model/
yolov8n_rk3576.rknn
yolov8s_rk3576.rknn
yolov8m_rk3576.rknnLorsque --model n'est pas explicitement fourni, les noms de modèles par défaut ci-dessus sont essayés automatiquement.
Exemples de démarrage
Analyse de football en direct 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.15Flux de débogage IA + Web uniquement
./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 8000Activer la détection du ballon et la trajectoire
./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 20Déboguer les cibles à faible confiance
./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-infoExporter les images d'entrée du 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-infoAfficher l'aide
./bin/rk3576_football_demo --helpAPI Web
Statut en direct
GET /api/live_state
Exemple de réponse :
{
"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
}
}
]
}Statut HLS
GET /api/hls/status
Lecture HLS
GET /api/hls/playlist.m3u8
API de téléversement/fichiers
POST /api/video/uploadGET /api/video/listGET /api/video/download/<filename>
Notes :
- Cette version privilégie le Web/HLS en temps réel et le JSON en direct.
POST /api/video/analyzeet la gestion complète des tâches d'analyse hors ligne sont réservées pour une extension future.
Paramètres clés
--streams <main,sub,ai>: sélectionne les flux de sortie à activer--ai-width <value>/--ai-height <value>: taille de sortie du flux de débogage IA--http-host <value>: adresse d'écoute Web--http-port <value>: port d'écoute Web, par défaut8000--web-root <path>: répertoire racine des ressources statiques--hls-dir <path>: répertoire de sortie HLS--uploads-dir <path>: répertoire des téléversements--results-dir <path>: répertoire des résultats--enable-ball: active la sortie de détection du ballon--ball-trail: active le tracé de la trajectoire du ballon--ball-trail-length <value>: nombre de points de trajectoire à conserver--ai-conf-threshold <value>: seuil de confiance de détection IA, par défaut0.25--disable-web: désactive le service Web/HLS intégré--detail-info: active les journaux détaillés
Structure du projet
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_partyExtensions d'inférence IA
- le point d'entrée RKNN se trouve dans
src/ai/yolov8_engine.cpp - le prétraitement utilise principalement
RGA - les résultats de détection sont stockés dans le cache
DetectionFrame, puis appariés et fusionnés par la branche IA en fonction duPTS
Journalisation et débogage
- par défaut, seul le résumé de démarrage est affiché
- les journaux d'exécution détaillés sont activés avec
--detail-info - le logger se trouve dans
include/rk3576_yolo_demo/common/logger.hpp
Recommandations de déploiement
- pour un déploiement en production, configurez les permissions pour
/dev/rga, les périphériques vidéo et les bibliothèques d'exécution associées - il est recommandé d'empaqueter les modèles, les bibliothèques d'exécution et les fichiers de configuration ensemble avec
install/ - l'entrée RTSP privilégie
libavformat; les environnements plus anciens basculent automatiquement versffmpeg pipe - pour un fonctionnement stable à long terme, utilisez systemd ou supervisor pour la gestion et le redémarrage des processus
Limitations connues
- le rendu des boîtes englobantes et la superposition du filigrane sur
camera_aientraînent encore une certaine surcharge CPU e2ene représente pas la latence de bout en bout complète ; il ne représente que le temps interne de la branchelocalvideoutilise actuellement un chemin de lecture de flux compressé, principalement destiné à la validation hors ligne et à l'inférence en boucle