Parker Hu2025-07-17

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.

reComputer-RKrk3576yolotrackingfootballGithub

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.

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}"

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 :

bash
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.25

Analyse de vidéo 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

Aperçu :

  • point d'entrée de la page http://<board-ip>:8000/

Fonctionnalités du projet

Capacités actuelles

  • Sources d'entrée :
    • v4l2
    • rtsp
    • localvideo
  • 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
  • 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
  • IA :
    • entrée NPU fixe 640x640
    • cible de détection par défaut person
    • --enable-ball active la sortie ball
    • --ball-trail active le tracé de la trajectoire du ballon sur le flux de débogage IA
  • Suivi :
    • sortie stable de track_id
    • le JSON renvoie track_id, appear_frames, first_seen_sec, last_seen_sec

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.0 est poussé

Pour l'utiliser :

  1. Créez un dépôt GitHub et poussez-y le projet.
  2. Ajoutez le dépôt à GitHub Actions.
  3. Poussez un tag comme git tag v1.0.0 && git push origin v1.0.0 pour déclencher une release packagée.

Dépendances

  • environnement d'exécution de la carte RK3576
  • RKNN Runtime
  • Rockchip MPP
  • RGA
  • ZLMediaKit
  • FFmpeg

Compilation

bash
cd rk3576_football_demo
chmod +x scripts/build-linux.sh
./scripts/build-linux.sh

Préparation avant l'exécution

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

Répertoire des modèles

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

Lorsque --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

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

Flux de débogage IA + Web uniquement

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

Activer la détection du ballon et la trajectoire

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

Déboguer les cibles à faible confiance

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

Exporter les images d'entrée du 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

Afficher l'aide

bash
./bin/rk3576_football_demo --help

API Web

Statut en direct

  • GET /api/live_state

Exemple de réponse :

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
      }
    }
  ]
}

Statut HLS

  • GET /api/hls/status

Lecture HLS

  • GET /api/hls/playlist.m3u8

API de téléversement/fichiers

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

Notes :

  • Cette version privilégie le Web/HLS en temps réel et le JSON en direct.
  • POST /api/video/analyze et 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éfaut 8000
  • --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éfaut 0.25
  • --disable-web : désactive le service Web/HLS intégré
  • --detail-info : active les journaux détaillés

Structure du projet

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

Extensions 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 du PTS

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 vers ffmpeg 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_ai entraînent encore une certaine surcharge CPU
  • e2e ne représente pas la latence de bout en bout complète ; il ne représente que le temps interne de la branche
  • localvideo utilise actuellement un chemin de lecture de flux compressé, principalement destiné à la validation hors ligne et à l'inférence en boucle