Parker Hu2026-07-17

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.

reComputer-RKrk3576yolotrackingfootballGithub

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.

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é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 :

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

Analyse 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 :

  • page d'accueil 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
    • sous-flux rtsp://<board-ip>:8554/live/camera_sub
    • flux de débogage IA rtsp://<board-ip>:8554/live/camera_ai
  • 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
  • IA :
    • entrée NPU fixe 640x640
    • cible de détection par défaut person
    • --enable-ball active la sortie ball
    • --ball-trail active le dessin de la trajectoire de la balle sur le flux de débogage IA
  • Suivi :
    • sortie stable de track_id
    • 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

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.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 empaquetée.

Dépendances

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

Construction

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

Préparation avant 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èle 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 et la trajectoire de la balle

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 trames d'entrée 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

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

État 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 temps réel Web / HLS et le JSON en direct.
  • POST /api/video/analyze et 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é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 : 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éfaut 0.25
  • --disable-web : désactiver le service Web / HLS intégré
  • --detail-info : activer 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 préfère libavformat ; les environnements plus anciens basculent automatiquement vers tube 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_ai engendrent encore une certaine surcharge CPU
  • e2e n'est pas la latence de bout en bout complète ; elle ne représente que le temps de branche interne
  • localvideo utilise actuellement le chemin de lecture de flux compressé, principalement pour la validation hors ligne et l'inférence en boucle