Voetbalspeler trackinganalyse met reComputer RK3576
Gebruik maken van RGA 2D hardwareversnelling en VPU MPP-versnelling van reComputer RK3576. Het yolov8n-model uitvoeren om voetbalspelers te herkennen en realtime analyse te realiseren.
reComputer RK3576 Voetballer Tracking Analyse
Een intelligent voetbalveldanalyseproject gebaseerd op RK3576 / RKNN / MPP / RGA / ZLMediaKit.
U kunt de broncode van het project bekijken via deze link:
https://github.com/litxaohu/football_project
U kunt ook de gecompileerde versie downloaden om het project lokaal op uw reComputer RK3576 uit te voeren:
note: Dit project heeft lage geheugenvereisten, maar een hoog CPU-gebruik. Optimalisatie van het CPU-gebruik wordt in de toekomst overwogen.
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}"U kunt lokale video's naar het apparaat uploaden voor analyse en verwerking, of een RTSP-videobron toevoegen voor real-time analyse:
Analyse van lokale video:
sudo ./bin/rk3576_football_demo \
--source localvideo \
--localvideo ./video/football.mp4 \ #Wijzig dit naar het lokale pad van uw videobestand
--model model/yolov8n_rk3576.rknn \
--output-width 1280 \
--output-height 720 \
--fps 30 \
--http-port 8000 \
--streams ai \
--ai-conf-threshold 0.25RTSP-video-analyse:
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.25Voorbeeld:
- pagina-ingang
http://<board-ip>:8000/
Projectfuncties
Huidige mogelijkheden
- Invoerbronnen:
v4l2rtsplocalvideo
- Uitvoerstreams:
- hoofdstream
rtsp://<board-ip>:8554/live/camera - substream
rtsp://<board-ip>:8554/live/camera_sub - AI-debugstream
rtsp://<board-ip>:8554/live/camera_ai
- hoofdstream
- Web:
- pagina-ingang
http://<board-ip>:8000/ - HLS-statusendpoint
/api/hls/status - HLS-afspeellijst
/api/hls/playlist.m3u8 - live-detectie-endpoint
/api/live_state
- pagina-ingang
- AI:
- vaste NPU-invoer
640x640 - standaard detectiedoel
person --enable-ballschakeltball-uitvoer in--ball-trailschakelt het tekenen van de baltrajectorie op de AI-debugstream in
- vaste NPU-invoer
- Tracking:
- stabiele
track_id-uitvoer - JSON retourneert
track_id,appear_frames,first_seen_sec,last_seen_sec
- stabiele
Webweergave
Momenteel wordt het volgende gebruikt:
- protocol:
HLS - codec:
H.264 - framerate:
30 FPS - resolutie:
1280x720
Build en uitvoeren
GitHub CI en release-packaging
Deze repository bevat een GitHub Actions-workflow die:
- het project automatisch bouwt bij een push of pull request
- hetzelfde buildscript gebruikt als lokaal:
./scripts/build-linux.sh - een release-archief voor Linux/aarch64 produceert onder
dist/ - het archief als GitHub-release publiceert wanneer een tag zoals
v1.0.0wordt gepusht
Om dit te gebruiken:
- Maak een GitHub-repository aan en push het project daarheen.
- Voeg de repository toe aan GitHub Actions.
- Push een tag zoals
git tag v1.0.0 && git push origin v1.0.0om een gepakketteerde release te activeren.
Afhankelijkheden
- RK3576-boardruntime-omgeving
- RKNN Runtime
- Rockchip MPP
- RGA
- ZLMediaKit
- FFmpeg
Build
cd rk3576_football_demo
chmod +x scripts/build-linux.sh
./scripts/build-linux.shVoorbereiding voor het uitvoeren
cd install
export LD_LIBRARY_PATH="$(pwd)/lib:${LD_LIBRARY_PATH}"Modelmap
model/
yolov8n_rk3576.rknn
yolov8s_rk3576.rknn
yolov8m_rk3576.rknnWanneer --model niet expliciet wordt opgegeven, worden de bovenstaande standaard modelnamen automatisch geprobeerd.
Opstartvoorbeelden
RTSP live voetbalanalyse + 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.15Alleen AI-debugstream + 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 8000Baldetectie en trajectorie inschakelen
./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 20Doelen met lage betrouwbaarheid 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-invoerframes exporteren
./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-infoHelp weergeven
./bin/rk3576_football_demo --helpWeb-API
Livestatus
GET /api/live_state
Voorbeeldrespons:
{
"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-afspelen
GET /api/hls/playlist.m3u8
Upload/bestand-API
POST /api/video/uploadGET /api/video/listGET /api/video/download/<filename>
Opmerkingen:
- Deze versie geeft prioriteit aan realtime Web/HLS en live JSON.
POST /api/video/analyzeen volledig offline analysetaakbeheer zijn gereserveerd voor toekomstige uitbreiding.
Belangrijke parameters
--streams <main,sub,ai>: selecteer welke uitvoerstreams worden ingeschakeld--ai-width <value>/--ai-height <value>: uitvoergrootte van de AI-debugstream--http-host <value>: Web-luisteradres--http-port <value>: Web-luisterpoort, standaard8000--web-root <path>: hoofdmap voor statische resources--hls-dir <path>: HLS-uitvoermap--uploads-dir <path>: uploadmap--results-dir <path>: resultatenmap--enable-ball: schakel voetbaldetectie-uitvoer in--ball-trail: schakel het tekenen van de baltrajectorie in--ball-trail-length <value>: aantal te bewaren trajectoriepunten--ai-conf-threshold <value>: betrouwbaarheidsdrempel voor AI-detectie, standaard0.25--disable-web: schakel de ingebouwde Web/HLS-service uit--detail-info: schakel gedetailleerde logs in
Projectstructuur
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_partyAI-inferentie-uitbreidingen
- het RKNN-instappunt bevindt zich in
src/ai/yolov8_engine.cpp - voorbewerking maakt voornamelijk gebruik van
RGA - detectieresultaten worden opgeslagen in de
DetectionFrame-cache, en vervolgens gematcht en samengevoegd door de AI-branch op basis vanPTS
Logging en debugging
- standaard wordt alleen een opstartsamenvatting weergegeven
- gedetailleerde runtime-logs worden ingeschakeld met
--detail-info - de logger bevindt zich in
include/rk3576_yolo_demo/common/logger.hpp
Aanbevelingen voor implementatie
- configureer voor productie-implementatie de rechten voor
/dev/rga, videoapparaten en gerelateerde runtimebibliotheken - het wordt aanbevolen om modellen, runtimebibliotheken en configuratiebestanden samen met
install/te verpakken - RTSP-invoer geeft de voorkeur aan
libavformat; oudere omgevingen vallen automatisch terug opffmpeg pipe - gebruik voor langdurige stabiele werking systemd of supervisor voor procesbeheer en herstarts
Bekende beperkingen
- het renderen van bounding boxes en de watermerk-overlay in
camera_aiveroorzaken nog steeds enige CPU-belasting e2eis niet de volledige end-to-end latentie; het vertegenwoordigt alleen de interne branchtijdlocalvideogebruikt momenteel een gecomprimeerd streamleespad, voornamelijk voor offline validatie en inferentie in lus