Analyse du suivi des joueurs de football utilisant reComputer RK3576
Tirez parti de l'accélération matérielle RGA 2D et de l'accélération VPU MPP du reComputer RK3576. Exécutez le modèle YOLOv8n pour détecter les joueurs de football et réaliser une analyse en temps réel.
Analyse de suivi des joueurs de football avec reComputer RK3576
Un projet intelligent d'analyse 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 une faible empreinte mémoire, mais une utilisation CPU élevée. L'optimisation de l'utilisation CPU sera envisagée ultérieurement.
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écharger des vidéos locales sur l'appareil pour analyse et traitement, ou ajouter une source vidéo RTSP pour une analyse en temps réel :
Analyse vidéo locale :
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.25Analyse 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 :
- page d'accueil
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 - sous-flux
rtsp://<board-ip>:8554/live/camera_sub - flux de débogage IA
rtsp://<board-ip>:8554/live/camera_ai
- flux principal
- Web :
- page d'accueil
http://<board-ip>:8000/ - point de terminaison d'état HLS
/api/hls/status - playlist HLS
/api/hls/playlist.m3u8 - point de terminaison de détection en direct
/api/live_state
- page d'accueil
- IA :
- entrée NPU fixe
640x640 - cible de détection par défaut
person --enable-ballactive la sortieball--ball-trailactive le dessin de la trajectoire de la balle sur le flux de débogage IA
- entrée NPU fixe
- Suivi :
- sortie stable de
track_id - 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
Construction et exécution
GitHub CI et empaquetage des versions
Ce dépôt inclut un workflow GitHub Actions qui va :
- construire le projet automatiquement lors d'un push ou d'une pull request
- exécuter le même script de build utilisé localement :
./scripts/build-linux.sh - produire une archive de version pour Linux/aarch64 dans
dist/ - publier l'archive en tant que release GitHub lorsqu'un tag comme
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 empaquetée.
Dépendances
- Environnement d'exécution de la carte RK3576
- RKNN Runtime
- Rockchip MPP
- RGA
- ZLMediaKit
- FFmpeg
Construction
cd rk3576_football_demo
chmod +x scripts/build-linux.sh
./scripts/build-linux.shPréparation avant 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èle 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 et la trajectoire de la balle
./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 trames d'entrée 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
État 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
}
}
]
}État 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 temps réel Web / HLS et le JSON en direct.
POST /api/video/analyzeet la gestion complète des tâches d'analyse hors ligne sont réservés pour une extension future.
Paramètres clés
--streams <main,sub,ai>: sélectionner 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: activer la détection de football--ball-trail: activer le dessin de la trajectoire de la balle--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ésactiver le service Web / HLS intégré--detail-info: activer 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 préfère
libavformat; les environnements plus anciens basculent automatiquement verstube ffmpeg - pour un fonctionnement stable à long terme, utilisez systemd ou supervisor pour la gestion des processus et les redémarrages
Limitations connues
- le rendu des boîtes englobantes et la superposition du filigrane dans
camera_aiengendrent encore une certaine surcharge CPU e2en'est pas la latence de bout en bout complète ; elle ne représente que le temps de branche internelocalvideoutilise actuellement le chemin de lecture de flux compressé, principalement pour la validation hors ligne et l'inférence en boucle