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