Parker Hu2025-07-17

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

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.

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

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:

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

RTSP-video-analyse:

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

Voorbeeld:

  • pagina-ingang http://<board-ip>:8000/

Projectfuncties

Huidige mogelijkheden

  • Invoerbronnen:
    • v4l2
    • rtsp
    • localvideo
  • 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
  • Web:
    • pagina-ingang http://<board-ip>:8000/
    • HLS-statusendpoint /api/hls/status
    • HLS-afspeellijst /api/hls/playlist.m3u8
    • live-detectie-endpoint /api/live_state
  • AI:
    • vaste NPU-invoer 640x640
    • standaard detectiedoel person
    • --enable-ball schakelt ball-uitvoer in
    • --ball-trail schakelt het tekenen van de baltrajectorie op de AI-debugstream in
  • Tracking:
    • stabiele track_id-uitvoer
    • JSON retourneert track_id, appear_frames, first_seen_sec, last_seen_sec

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.0 wordt gepusht

Om dit te gebruiken:

  1. Maak een GitHub-repository aan en push het project daarheen.
  2. Voeg de repository toe aan GitHub Actions.
  3. Push een tag zoals git tag v1.0.0 && git push origin v1.0.0 om een gepakketteerde release te activeren.

Afhankelijkheden

  • RK3576-boardruntime-omgeving
  • RKNN Runtime
  • Rockchip MPP
  • RGA
  • ZLMediaKit
  • FFmpeg

Build

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

Voorbereiding voor het uitvoeren

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

Modelmap

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

Wanneer --model niet expliciet wordt opgegeven, worden de bovenstaande standaard modelnamen automatisch geprobeerd.

Opstartvoorbeelden

RTSP live voetbalanalyse + 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

Alleen AI-debugstream + 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

Baldetectie en trajectorie inschakelen

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

Doelen met lage betrouwbaarheid 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-invoerframes exporteren

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

Help weergeven

bash
./bin/rk3576_football_demo --help

Web-API

Livestatus

  • GET /api/live_state

Voorbeeldrespons:

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

  • GET /api/hls/playlist.m3u8

Upload/bestand-API

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

Opmerkingen:

  • Deze versie geeft prioriteit aan realtime Web/HLS en live JSON.
  • POST /api/video/analyze en 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, standaard 8000
  • --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, standaard 0.25
  • --disable-web: schakel de ingebouwde Web/HLS-service uit
  • --detail-info: schakel gedetailleerde logs in

Projectstructuur

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

AI-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 van PTS

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 op ffmpeg 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_ai veroorzaken nog steeds enige CPU-belasting
  • e2e is niet de volledige end-to-end latentie; het vertegenwoordigt alleen de interne branchtijd
  • localvideo gebruikt momenteel een gecomprimeerd streamleespad, voornamelijk voor offline validatie en inferentie in lus