William Zhang2025-07-23

Valdetectie in meerdere scenario's gebaseerd op reComputer RK3576

Detectie van valgedrag in meerdere scenario's en meerdere doelen met behulp van het YOLOv8n-pose-model, met inferentieversnelling via reComputer RK3576, en eenvoudige feedback via een webpagina.

reComputer-RKrk3576yolofall_detectionGithub

Multi-scenario valdetectie op reComputer RK3576

Een valdetectieproject gebaseerd op RK3576 / RKNN / YOLO / RGA

De broncode van dit project vindt u op: https://github.com/doublelf/fall_detection

Snel starten

Project-image ophalen via Docker

bash
docker pull ghcr.io/doublelf/pose_optimized:v1

Model testen met het ingebouwde voorbeeld

bash
sudo docker run --rm --privileged --net=host \
  -e PYTHONUNBUFFERED=1 \
  -e RKNN_LOG_LEVEL=0 \
  --device /dev/video1:/dev/video1 \
  --device /dev/dri/renderD129:/dev/dri/renderD129 \
  -v /proc/device-tree/compatible:/proc/device-tree/compatible \
  -v $(pwd)/video:/app/video \
  seeed/pose_optimized:local \
  python3 web_detection.py --model_path model/yolov8n_pose.rknn --video video/example1.mp4

Hierbij mapt "-v $(pwd)/video:/app/video" de lokale video-map naar de locatie /app/video in de image.

Als u een lokale video wilt gebruiken voor inferentie, slaat u het lokale bestand op in de map die is opgegeven door $(pwd)/video.

Nadat het project succesvol draait, gaat u naar http://<board_ip>:8000/ om het realtime inferentie-effect te bekijken.

Verdere ontwikkeling op basis van het project

De image met het cp-commando naar de lokale machine halen

bash
sudo docker cp pose_optimized:/app/web_detection.py ./

Denk er na het aanpassen van de code in web_detection.py aan om de lokale code opnieuw in de image te bouwen

bash
sudo docker build -t seeed/pose_optimized:local

Voer het daarna opnieuw uit.

Camera aanroepen voor realtime inferentie

Wijzig bij het uitvoeren van inferentie de parameter "--video" in "--camera_id" om de camera voor inferentie aan te roepen.

bash
sudo docker run --rm --privileged --net=host \
  -e PYTHONUNBUFFERED=1 \
  -e RKNN_LOG_LEVEL=0 \
  --device /dev/video1:/dev/video1 \
  --device /dev/dri/renderD129:/dev/dri/renderD129 \
  -v /proc/device-tree/compatible:/proc/device-tree/compatible \
  -v $(pwd)/video:/app/video \
  seeed/pose_optimized:local \
  python3 web_detection.py --model_path model/yolov8n_pose.rknn --camera_id 1

Hierbij hangt "--camera_id" samen met het apparaat dat u hebt opgegeven bij "--device /dev/video1:/dev/video1".

AI-inferentie-uitbreidingen

Inferentie-engine: Gebaseerd op de RKNN C API, met het hoofdtoegangspunt in web_detection.py en daadwerkelijke aanroepen naar utils/rknn_wrapper.py, met ondersteuning voor RK3576 NPU-hardwareversnelling. Modelinvoer: Accepteert het gekwantiseerde model yolov8n_pose.rknn met een vaste invoergrootte van 640×640. De uitvoer omvat objectdetectiekaders en 17 keypoint-coördinaten. Nabewerking: Analyseert de drie feature maps uit de modeluitvoer, verwijdert dubbele kaders via NMS en gebruikt het OKS-algoritme om de keypoint-betrouwbaarheid te optimaliseren, wat uiteindelijk gestructureerde posedata oplevert.

Voorbewerking en beeldverwerking

Hardwareversnelling: Maakt gebruik van de RGA-eenheid van de RK3576 voor beeldschaling, kleurruimteconversie (YUV→RGB) en formaatconversie, waardoor de CPU-belasting aanzienlijk wordt verlaagd. Video-opname: Ondersteunt directe opname via V4L2-camera's of het lezen van lokale videobestanden, waarbij de invoerbron wordt gewisseld via de parameters --camera_id en --video. Framesnelheidsbeheer: De opnamethread en de inferentiethread zijn gescheiden en gebruiken een dubbele bufferwachtrij om framedrops te voorkomen en minimale latentie voor realtime streams te garanderen.

Implementatie-aanbevelingen

Runtime-rechten: De --privileged containermodus moet worden gebruikt, waarbij /dev/video*, /dev/dri/renderD* (voor RGA) en het compatibiliteitsbestand van de device tree expliciet worden gemapt om normale toegang tot de NPU en VPU te garanderen. Image-verpakking: De image bevat al alle afhankelijkheden (RKNN Runtime, OpenCV, Flask). Het wordt aanbevolen om --net=host te gebruiken om de complexiteit van poortmapping te vermijden. Als u modellen of configuraties persistent wilt maken, kunt u externe mappen koppelen. Langdurige werking: Het wordt aanbevolen een systemd-service of supervisor te gebruiken om het containerproces te bewaken en het beleid --restart=always in te stellen.

Bekende beperkingen

Single-stream inferentie: Het huidige ontwerp ondersteunt alleen invoer van één videostream. Voor gelijktijdige verwerking van meerdere streams is aanvullende ontwikkeling van multithreading-/multiprocessbeheerlogica vereist. Renderoverhead: Hoewel RGA de voorbewerking versnelt, verbruiken de tekenbewerkingen van OpenCV nog steeds enige CPU-capaciteit. Bij hoge resoluties kan de framesnelheid dalen tot 15-20 FPS. Ondersteuning voor netwerkstreams: Ondersteunt momenteel alleen lokale camera's of bestanden; het ophalen van RTSP/HTTP-netwerkstreams is nog niet geïntegreerd. Geen persistente caching: Detectieresultaten worden alleen gebruikt voor realtime weergave en worden niet opgeslagen in een database of bestandssysteem. Voor historische gegevens is een eigen uitbreiding nodig. Hardwarecompatibiliteit: RGA-versnelling is afhankelijk van RK3576-specifieke drivers. Andere chips uit de RK-serie (zoals de RK3568) werken mogelijk niet rechtstreeks en vereisen mogelijk het opnieuw compileren van OpenCV en het aanpassen van de RGA-aanroepinterface.