Parker Hu2025-07-17

Fußballspieler-Tracking-Analyse mit reComputer RK3576

Nutzung der RGA 2D-Hardwarebeschleunigung und VPU-MPP-Beschleunigung des reComputer RK3576. Ausführen des yolov8n-Modells zur Erkennung von Fußballspielern für Echtzeitanalyse.

reComputer-RKrk3576yolotrackingfootballGithub

reComputer RK3576 Fußballspieler-Tracking-Analyse

Ein intelligentes Fußballfeld-Analyseprojekt auf Basis von RK3576 / RKNN / MPP / RGA / ZLMediaKit.

Den Quellcode des Projekts finden Sie unter diesem Link: https://github.com/litxaohu/football_project

Alternativ können Sie die kompilierte Version herunterladen, um das Projekt lokal auf Ihrem reComputer RK3576 auszuführen:

Hinweis: Dieses Projekt hat einen geringen Speicherbedarf, aber eine hohe CPU-Auslastung. Eine Optimierung der CPU-Auslastung wird zukünftig in Betracht gezogen.

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

Sie können lokale Videos zur Analyse und Verarbeitung auf das Gerät hochladen oder eine RTSP-Videoquelle für die Echtzeitanalyse hinzufügen:

Lokale Videoanalyse:

bash
sudo ./bin/rk3576_football_demo \
  --source localvideo \
  --localvideo ./video/football.mp4 \ #Ändern Sie dies in den lokalen Pfad Ihrer Videodatei
  --model model/yolov8n_rk3576.rknn \
  --output-width 1280 \
  --output-height 720 \
  --fps 30 \
  --http-port 8000 \
  --streams ai \
  --ai-conf-threshold 0.25

RTSP-Videoanalyse:

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

Vorschau:

  • Seiteneinstieg http://<board-ip>:8000/

Projektfunktionen

Aktuelle Fähigkeiten

  • Eingangsquellen:
    • v4l2
    • rtsp
    • localvideo
  • Ausgangsstreams:
    • Hauptstream rtsp://<board-ip>:8554/live/camera
    • Substream rtsp://<board-ip>:8554/live/camera_sub
    • KI-Debug-Stream rtsp://<board-ip>:8554/live/camera_ai
  • Web:
    • Seiteneinstieg http://<board-ip>:8000/
    • HLS-Status-Endpunkt /api/hls/status
    • HLS-Playlist /api/hls/playlist.m3u8
    • Live-Erkennungs-Endpunkt /api/live_state
  • KI:
    • feste NPU-Eingabe 640x640
    • Standard-Erkennungsziel person
    • --enable-ball aktiviert die ball-Ausgabe
    • --ball-trail aktiviert das Zeichnen der Ballflugbahn im KI-Debug-Stream
  • Tracking:
    • stabile track_id-Ausgabe
    • JSON gibt track_id, appear_frames, first_seen_sec, last_seen_sec zurück

Web-Wiedergabe

Aktuell verwendet:

  • Protokoll: HLS
  • Codec: H.264
  • Bildrate: 30 FPS
  • Auflösung: 1280x720

Erstellen und Ausführen

GitHub CI und Release-Paketierung

Dieses Repository enthält einen GitHub-Actions-Workflow, der:

  • das Projekt automatisch bei Push oder Pull Request baut
  • dasselbe Build-Skript verwendet, das auch lokal genutzt wird: ./scripts/build-linux.sh
  • ein Release-Archiv für Linux/aarch64 unter dist/ erzeugt
  • das Archiv als GitHub-Release veröffentlicht, sobald ein Tag wie v1.0.0 gepusht wird

So verwenden Sie es:

  1. Erstellen Sie ein GitHub-Repository und pushen Sie das Projekt dorthin.
  2. Fügen Sie das Repository zu GitHub Actions hinzu.
  3. Pushen Sie einen Tag wie git tag v1.0.0 && git push origin v1.0.0, um einen paketierten Release auszulösen.

Abhängigkeiten

  • RK3576-Board-Laufzeitumgebung
  • RKNN Runtime
  • Rockchip MPP
  • RGA
  • ZLMediaKit
  • FFmpeg

Build

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

Vorbereitung vor dem Start

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

Modellverzeichnis

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

Wenn --model nicht explizit angegeben wird, werden automatisch die oben genannten Standardmodellnamen ausprobiert.

Start-Beispiele

RTSP-Live-Fußballanalyse + 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

Nur KI-Debug-Stream + 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 \
  --streams ai \
  --http-port 8000

Ballerkennung und Flugbahn aktivieren

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

Ziele mit niedriger Konfidenz debuggen

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

NPU-Eingabeframes exportieren

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

Hilfe anzeigen

bash
./bin/rk3576_football_demo --help

Web-API

Live-Status

  • GET /api/live_state

Beispielantwort:

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

HLS-Status

  • GET /api/hls/status

HLS-Wiedergabe

  • GET /api/hls/playlist.m3u8

Upload/Datei-API

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

Hinweise:

  • Diese Version priorisiert Echtzeit-Web/HLS und Live-JSON.
  • POST /api/video/analyze sowie die vollständige Verwaltung von Offline-Analyseaufgaben sind für zukünftige Erweiterungen reserviert.

Wichtige Parameter

  • --streams <main,sub,ai>: wählt aus, welche Ausgangsstreams aktiviert werden
  • --ai-width <value> / --ai-height <value>: Ausgabegröße des KI-Debug-Streams
  • --http-host <value>: Web-Listening-Adresse
  • --http-port <value>: Web-Listening-Port, Standard 8000
  • --web-root <path>: statisches Ressourcen-Stammverzeichnis
  • --hls-dir <path>: HLS-Ausgabeverzeichnis
  • --uploads-dir <path>: Upload-Verzeichnis
  • --results-dir <path>: Ergebnisverzeichnis
  • --enable-ball: aktiviert die Fußballerkennungsausgabe
  • --ball-trail: aktiviert das Zeichnen der Ballflugbahn
  • --ball-trail-length <value>: Anzahl der beizubehaltenden Flugbahnpunkte
  • --ai-conf-threshold <value>: KI-Erkennungskonfidenzschwelle, Standard 0.25
  • --disable-web: deaktiviert den integrierten Web/HLS-Dienst
  • --detail-info: aktiviert ausführliche Protokolle

Projektstruktur

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

KI-Inferenz-Erweiterungen

  • der RKNN-Einstiegspunkt befindet sich in src/ai/yolov8_engine.cpp
  • die Vorverarbeitung nutzt hauptsächlich RGA
  • Erkennungsergebnisse werden im DetectionFrame-Cache gespeichert und anschließend vom KI-Branch anhand des PTS abgeglichen und zusammengeführt

Protokollierung und Debugging

  • standardmäßig wird nur eine Startzusammenfassung ausgegeben
  • ausführliche Laufzeitprotokolle werden mit --detail-info aktiviert
  • der Logger befindet sich in include/rk3576_yolo_demo/common/logger.hpp

Empfehlungen für die Bereitstellung

  • konfigurieren Sie für den Produktionseinsatz die Berechtigungen für /dev/rga, Videogeräte und zugehörige Laufzeitbibliotheken
  • es wird empfohlen, Modelle, Laufzeitbibliotheken und Konfigurationsdateien zusammen mit install/ zu paketieren
  • der RTSP-Eingang bevorzugt libavformat; ältere Umgebungen fallen automatisch auf ffmpeg pipe zurück
  • für einen langfristig stabilen Betrieb sollte systemd oder supervisor zur Prozessverwaltung und für Neustarts verwendet werden

Bekannte Einschränkungen

  • das Rendern der camera_ai-Bounding-Box und das Wasserzeichen-Overlay verursachen weiterhin etwas CPU-Overhead
  • e2e stellt keine vollständige End-to-End-Latenz dar; es repräsentiert nur die interne Branch-Zeit
  • localvideo verwendet derzeit einen komprimierten Stream-Lesepfad, hauptsächlich zur Offline-Validierung und für Inferenz in Schleifen