William Zhang2025-07-23

Mehrszenen-Sturzdetektion basierend auf reComputer RK3576

Erkennung von Sturzverhalten in mehreren Szenarien und bei mehreren Zielen mithilfe des YOLOv8n-pose-Modells, mit Beschleunigung der Inferenz durch reComputer RK3576 und einfacher Informationsrückmeldung über eine Webseite.

reComputer-RKrk3576yolofall_detectionGithub

Multiszenario-Sturzerkennung auf reComputer RK3576

Ein Sturzerkennungsprojekt basierend auf RK3576 / RKNN / YOLO / RGA

Den Quellcode dieses Projekts finden Sie unter: https://github.com/doublelf/fall_detection

Schnellstart

Projekt-Image über Docker beziehen

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

Modelleffekt mit dem integrierten Beispiel testen

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

Dabei mappt "-v $(pwd)/video:/app/video" den lokalen video-Ordner auf den Speicherort /app/video im Image.

Wenn Sie ein lokales Video für die Inferenz verwenden möchten, speichern Sie die lokale Datei in dem durch $(pwd)/video angegebenen Ordner.

Nachdem das Projekt erfolgreich läuft, rufen Sie http://<board_ip>:8000/ auf, um den Echtzeit-Inferenzeffekt zu sehen.

Weiterentwicklung auf Basis des Projekts

Das Image mit dem cp-Befehl auf die lokale Maschine kopieren

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

Denken Sie nach dem Ändern des Codes in web_detection.py daran, den lokalen Code wieder in das Image zu bauen

bash
sudo docker build -t seeed/pose_optimized:local

Führen Sie es anschließend erneut aus.

Kamera für Echtzeit-Inferenz aufrufen

Ändern Sie bei der Inferenz den Parameter "--video" in "--camera_id", um die Kamera für die Inferenz aufzurufen.

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

Dabei bezieht sich "--camera_id" auf das Gerät, das Sie unter "--device /dev/video1:/dev/video1" angegeben haben.

KI-Inferenzerweiterungen

Inferenzengine: Basierend auf der RKNN C API, mit dem Haupteinstiegspunkt in web_detection.py und tatsächlichen Aufrufen von utils/rknn_wrapper.py, unterstützt RK3576-NPU-Hardwarebeschleunigung. Modelleingabe: Akzeptiert das quantisierte Modell yolov8n_pose.rknn mit einer festen Eingabegröße von 640×640. Die Ausgabe umfasst Objekterkennungsboxen und 17 Keypoint-Koordinaten. Nachbearbeitung: Analysiert die drei Feature-Maps aus der Modellausgabe, entfernt doppelte Boxen per NMS und nutzt den OKS-Algorithmus zur Optimierung der Keypoint-Konfidenz, um schließlich strukturierte Posendaten zu erzeugen.

Vorverarbeitung und Bildverarbeitung

Hardwarebeschleunigung: Nutzt die RGA-Einheit des RK3576 für Bildskalierung, Farbraumkonvertierung (YUV→RGB) und Formatkonvertierung, wodurch die CPU-Last deutlich reduziert wird. Videoerfassung: Unterstützt die direkte Erfassung von V4L2-Kameras oder das Lesen aus lokalen Videodateien, wobei die Eingabequelle über die Parameter --camera_id und --video umgeschaltet wird. Bildratensteuerung: Erfassungs-Thread und Inferenz-Thread sind getrennt und nutzen eine Doppelpuffer-Warteschlange, um Bildverluste zu vermeiden und eine minimale Latenz für Echtzeit-Streams sicherzustellen.

Bereitstellungsempfehlungen

Laufzeitberechtigungen: Der --privileged-Containermodus muss verwendet werden, wobei /dev/video*, /dev/dri/renderD* (für RGA) und die Device-Tree-Kompatibilitätsdatei explizit gemappt werden müssen, um den normalen Zugriff auf NPU und VPU sicherzustellen. Image-Packaging: Das Image enthält bereits alle Abhängigkeiten (RKNN Runtime, OpenCV, Flask). Es wird empfohlen, --net=host zu verwenden, um die Komplexität des Port-Mappings zu vermeiden. Wenn Sie Modelle oder Konfigurationen dauerhaft speichern müssen, können Sie externe Verzeichnisse mounten. Dauerbetrieb: Es wird empfohlen, einen systemd-Dienst oder supervisor zur Überwachung des Containerprozesses einzusetzen und die Richtlinie --restart=always festzulegen.

Bekannte Einschränkungen

Single-Stream-Inferenz: Das aktuelle Design unterstützt nur die Eingabe eines einzelnen Videostreams. Für Multi-Stream-Parallelität ist zusätzliche Entwicklung einer Multithreading-/Multiprocessing-Verwaltungslogik erforderlich. Rendering-Overhead: Obwohl RGA die Vorverarbeitung beschleunigt, verbrauchen die Zeichenoperationen von OpenCV weiterhin CPU-Ressourcen. Bei hohen Auflösungen kann die Bildrate auf 15-20 FPS sinken. Netzwerkstream-Unterstützung: Derzeit werden nur lokale Kameras oder Dateien unterstützt; das Abrufen von RTSP/HTTP-Netzwerkstreams ist noch nicht integriert. Kein persistenter Cache: Erkennungsergebnisse werden nur für die Echtzeitanzeige verwendet und nicht in einer Datenbank oder einem Dateisystem gespeichert. Historische Aufzeichnungen erfordern eigene Erweiterungen. Hardwarekompatibilität: Die RGA-Beschleunigung ist von RK3576-spezifischen Treibern abhängig. Andere Chips der RK-Serie (wie RK3568) laufen möglicherweise nicht direkt und erfordern eventuell eine Neukompilierung von OpenCV sowie eine Anpassung der RGA-Aufrufschnittstelle.