William Zhang2026-07-23

Sturzdetektion in mehreren Szenarien basierend auf reComputer RK3576

Sturzverhaltenserkennung in mehreren Szenarien und bei mehreren Zielen unter Verwendung des YOLOv8n‑pose-Modells, mit Inferenzbeschleunigung durch den reComputer RK3576 und einfacher Informationsrückmeldung über eine Webseite.

reComputer-RKrk3576yolofall_detectionGithub

Mehrszenario-Sturzerkennung basierend auf reComputer RK3576

Ein Sturzerkennungsprojekt basierend auf RK3576 / RKNN / YOLO / RGA

Sie können den Quellcode dieses Projekts einsehen unter: https://github.com/doublelf/fall_detection

Schnellstart

Projekt-Image über Docker pullen

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

Testen Sie den Modelleffekt mit dem integrierten Beispiel

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 bildet "-v $(pwd)/video:/app/video" den lokalen Videoordner auf den Speicherort /app/video im Image ab.

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 gestartet ist, rufen Sie http://<board_ip>:8000/ auf, um die Echtzeit-Inferenzwirkung zu sehen.

Weiterentwicklung basierend auf dem Projekt

Image mit dem cp-Befehl auf die lokale Maschine kopieren

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

Nachdem Sie den Code von web_detection.py geändert haben, denken Sie daran, den lokalen Code neu in das Image zu integrieren

bash
sudo docker build -t seeed/pose_optimized:local

Führen Sie es dann erneut aus.

Kamera für Echtzeit-Inferenz aufrufen

Wenn Sie die Inferenz ausführen, ändern Sie 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

Hier ist "--camera_id" mit dem Gerät verknüpft, das Sie in "--device /dev/video1:/dev/video1" angegeben haben.

KI-Inferenz-Erweiterungen

Inferenz-Engine: Basierend auf der RKNN-C-API verpackt, mit dem Haupteinstieg in web_detection.py und den tatsächlichen Aufrufen von utils/rknn_wrapper.py, mit Unterstützung der 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 Schlüsselpunktkoordinaten. Nachbearbeitung: Analysiert die drei Feature-Maps aus der Modellausgabe, entfernt doppelte Boxen mittels NMS und verwendet den OKS-Algorithmus, um die Konfidenz der Schlüsselpunkte zu optimieren, und erzeugt schließlich strukturierte Posedaten.

Vorverarbeitung und Bildverarbeitung

Hardware-Beschleunigung: Nutzt die RGA-Einheit des RK3576 für Bildskalierung, Farbräumkonvertierung (YUV→RGB) und Formatkonvertierung, was die CPU-Last erheblich reduziert. Videoerfassung: Unterstützt die direkte Erfassung von V4L2-Kameras oder das Lesen lokaler Videodateien, wobei die Eingabequellen über die Parameter --camera_id und --video gewechselt werden. Bildratensteuerung: Erfassungs- und Inferenz-Thread sind getrennt und verwenden eine Doppelpuffer-Warteschlange, um Frame-Drops zu vermeiden und eine minimale Latenz für Echtzeit-Streams zu gewährleisten.

Empfehlungen für die Bereitstellung

Laufzeitberechtigungen: Es muss der --privileged-Container-Modus verwendet werden und /dev/video*, /dev/dri/renderD* (für RGA) sowie die Gerätebaum-Kompatibilitätsdatei explizit gemappt werden, um einen normalen Zugriff auf NPU und VPU zu gewährleisten. Image-Paketierung: Das Image enthält bereits alle Abhängigkeiten (RKNN Runtime, OpenCV, Flask). Es wird empfohlen, --net=host zu verwenden, um die Komplexität der Portzuordnung zu vermeiden. Wenn Sie Modelle oder Konfigurationen dauerhaft speichern müssen, können Sie externe Verzeichnisse einbinden. Langzeitbetrieb: Es wird empfohlen, einen systemd-Dienst oder Supervisor zur Überwachung des Container-Prozesses zu verwenden und die Richtlinie --restart=always festzulegen.

Bekannte Einschränkungen

Einzelstream-Inferenz: Das aktuelle Design unterstützt nur die Eingabe eines einzelnen Videostreams. Mehrfach-Stream-Parallelität erfordert die zusätzliche Entwicklung von Multithreading-/Multiprocess-Management-Logik. Rendering-Overhead: Obwohl RGA die Vorverarbeitung beschleunigt, verbrauchen die Zeichenoperationen von OpenCV immer noch einige CPU-Ressourcen. Bei hohen Auflösungen kann die Bildrate auf 15–20 FPS sinken. Netzwerkstream-Unterstützung: Unterstützt derzeit nur lokale Kameras oder Dateien; das Abrufen von RTSP/HTTP-Netzwerkstreams ist noch nicht integriert. Keine persistente Speicherung: Erkennungsergebnisse werden nur für die Echtzeitanzeige verwendet und nicht in einer Datenbank oder einem Dateisystem gespeichert. Verlaufsdaten erfordern benutzerdefinierte Erweiterungen. Hardwarekompatibilität: Die RGA-Beschleunigung hängt von RK3576-spezifischen Treibern ab. Andere RK-Serien-Chips (wie RK3568) laufen möglicherweise nicht direkt und erfordern möglicherweise das Neukompilieren von OpenCV und die Anpassung der RGA-Aufrufschnittstelle.