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 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.
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:
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.25RTSP-Videoanalyse:
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.25Vorschau:
- Seiteneinstieg
http://<board-ip>:8000/
Projektfunktionen
Aktuelle Fähigkeiten
- Eingangsquellen:
v4l2rtsplocalvideo
- 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
- Hauptstream
- Web:
- Seiteneinstieg
http://<board-ip>:8000/ - HLS-Status-Endpunkt
/api/hls/status - HLS-Playlist
/api/hls/playlist.m3u8 - Live-Erkennungs-Endpunkt
/api/live_state
- Seiteneinstieg
- KI:
- feste NPU-Eingabe
640x640 - Standard-Erkennungsziel
person --enable-ballaktiviert dieball-Ausgabe--ball-trailaktiviert das Zeichnen der Ballflugbahn im KI-Debug-Stream
- feste NPU-Eingabe
- Tracking:
- stabile
track_id-Ausgabe - JSON gibt
track_id,appear_frames,first_seen_sec,last_seen_seczurück
- stabile
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.0gepusht wird
So verwenden Sie es:
- Erstellen Sie ein GitHub-Repository und pushen Sie das Projekt dorthin.
- Fügen Sie das Repository zu GitHub Actions hinzu.
- 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
cd rk3576_football_demo
chmod +x scripts/build-linux.sh
./scripts/build-linux.shVorbereitung vor dem Start
cd install
export LD_LIBRARY_PATH="$(pwd)/lib:${LD_LIBRARY_PATH}"Modellverzeichnis
model/
yolov8n_rk3576.rknn
yolov8s_rk3576.rknn
yolov8m_rk3576.rknnWenn --model nicht explizit angegeben wird, werden automatisch die oben genannten Standardmodellnamen ausprobiert.
Start-Beispiele
RTSP-Live-Fußballanalyse + 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.15Nur KI-Debug-Stream + 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 \
--streams ai \
--http-port 8000Ballerkennung und Flugbahn aktivieren
./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 20Ziele mit niedriger Konfidenz debuggen
./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-infoNPU-Eingabeframes exportieren
./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-infoHilfe anzeigen
./bin/rk3576_football_demo --helpWeb-API
Live-Status
GET /api/live_state
Beispielantwort:
{
"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/uploadGET /api/video/listGET /api/video/download/<filename>
Hinweise:
- Diese Version priorisiert Echtzeit-Web/HLS und Live-JSON.
POST /api/video/analyzesowie 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, Standard8000--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, Standard0.25--disable-web: deaktiviert den integrierten Web/HLS-Dienst--detail-info: aktiviert ausführliche Protokolle
Projektstruktur
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_partyKI-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 desPTSabgeglichen und zusammengeführt
Protokollierung und Debugging
- standardmäßig wird nur eine Startzusammenfassung ausgegeben
- ausführliche Laufzeitprotokolle werden mit
--detail-infoaktiviert - 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 aufffmpeg pipezurü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 e2estellt keine vollständige End-to-End-Latenz dar; es repräsentiert nur die interne Branch-Zeitlocalvideoverwendet derzeit einen komprimierten Stream-Lesepfad, hauptsächlich zur Offline-Validierung und für Inferenz in Schleifen