Seeed Studio2026-07-22

Fahrzeuggebundene Hinderniserkennung mit reComputer RK3576

Echtzeit-Erkennung von Fahrzeugen, Fußgängern, Zweirädern und Verkehrszeichen in Fahrbildern mit dem YOLOv8n-Modell auf der RK3576-NPU. Die 2-TOPS-NPU des RK3576 beschleunigt die Inferenz auf dem Gerät; über die Weboberfläche werden Polygone für "Hindernis-Risikobereiche" gezeichnet, beim Eintreten eines Ziels in einen solchen Bereich wird eine Warnung ausgelöst und eine JPEG-Schnappschuss mit Annotation ausgegeben.

CVObject DetectionEdge AIGithub

Schneller Aufbau eines Projekts zur fahrzeuggebundenen Hinderniserkennung auf Basis von reComputer-RK / Docker / RKNN / YOLO

Den Quellcode dieses Projekts finden Sie auf GitHub: https://github.com/doublelf/area-intrusion-alarm


Projektübersicht

Dieses Projekt stammt aus einem Bereichseinbrucherkennung-Projekt auf Basis von RK3576 / RKNN / YOLO / RGA. Der ursprüngliche Anwendungsfall war eine stationäre Kamera, die beim Eintreten von „Person / Fahrzeug"-Zielen in ein definiertes Polygon einen Alarm auslöst. Die komplette Kette „Bereich zeichnen + Zustandsmaschine + Schnappschuss-Archivierung" lässt sich natürlich auf Fahrzeug-Szenarien übertragen: Das Polygon wird von „Sperrbereich" zu „Kollisionsrisikobereich / toter Winkel / Zebrastreifen" umdefiniert, die Auslöse-Kategorien werden von 2 auf 8 fahrzeug- und personenbezogene Klassen erweitert — das ergibt die in diesem Projekt gezeigte fahrzeuggebundene Hinderniserkennung.

Hinweis zu Demo-Material: Im Stammverzeichnis dieses Repositorys ist video/1-1.mp4 ein Fahr-Szenen-Video; während der Laufzeit ersetzt eine MJPEG-Vorschau die obige GIF.


Schnellstart

1. Projekt klonen

bash
git clone https://github.com/doublelf/area-intrusion-alarm
cd area-intrusion-alarm

2. Klassendatei class_config.txt vorbereiten

Im Stammverzeichnis des Repositorys ist bereits der Name class_config.txt reserviert, aber aktuell handelt es sich um einen leeren Verzeichnisplatzhalter (während der Synchronisierung wurde er von einigen Mountpoints versehentlich als Verzeichnis angelegt). Bitte ersetzen Sie ihn durch eine gleichnamige Datei mit folgendem Inhalt (COCO-Fahrzeug- / Personen-Teilmenge, 8 Klassen):

text
"person", "bicycle", "car", "motorbike", "bus", "truck", "traffic light", "stop sign"

3. Image erstellen

bash
sudo docker build -t area-intrusion:local .

4. Container starten und Inferenz ausführen

bash
sudo docker run --rm --privileged --net=host \
  -e PYTHONUNBUFFERED=1 \
  -e RKNN_LOG_LEVEL=0 \
  -v $(pwd)/class_config.txt:/app/class_config.txt \
  -v $(pwd)/video:/app/video:ro \
  --device /dev/video0:/dev/video0 \
  --device /dev/dri/renderD128:/dev/dri/renderD128 \
  -v /proc/device-tree/compatible:/proc/device-tree/compatible \
  area-intrusion:local \
  python3 web_detection.py --model_path model/yolov8n.rknn --video video/1-1.mp4 --class_path class_config.txt

Hierbei:

  • -v $(pwd)/class_config.txt:/app/class_config.txt mountet die Klassendatei in den Container und aktiviert in Kombination mit --class_path class_config.txt die 8-Klassen-Fahrzeug- / Personen-Teilmenge;
  • -v $(pwd)/video:/app/video:ro mappt das lokale video/-Verzeichnis als read-only in den /app/video-Pfad des Images;
  • --device /dev/video0:/dev/video0 und --device /dev/dri/renderD128:/dev/dri/renderD128 werden jeweils für die V4L2-Kamera bzw. die RGA-Hardwarebeschleunigung verwendet;
  • der abschließende Befehl python3 web_detection.py --model_path ... --video video/1-1.mp4 --class_path ... startet die Inferenz.

CLI-Kompatibilitätshinweis: Der aktuelle Parametername in web_detection.py dieses Repositorys ist --video_path (siehe web_detection.py:1206). Wenn beim Start unknown arg: --video gemeldet wird, ersetzen Sie --video video/1-1.mp4 durch --video_path video/1-1.mp4; alle übrigen Parameter bleiben unverändert.

5. Auf die Web-Plattform zugreifen

Nach erfolgreichem Projektstart rufen Sie im Browser http://<board_ip>:8000/ auf und wechseln oben im Tab zu Hindernisbereich (Intrusion Zones):

  1. Wählen Sie den Modus Draw, klicken Sie nacheinander auf mindestens 3 Punkte im Bild, doppelklicken Sie oder klicken Sie erneut auf den Anfangspunkt, um das Polygon zu schließen, geben Sie einen Bereichsnamen ein (z. B. Vorderer toter Winkel, Toter Winkel rechter Außenspiegel, Zebrastreifen) und bestätigen Sie zum Speichern;
  2. Wählen Sie im Target-Kontrollkästchen die Zielklassen aus, die in die Warnung einbezogen werden sollen (standardmäßig sind person / car aktiviert; bei Bedarf können truck / bus / bicycle / motorbike / traffic light / stop sign hinzugefügt werden);
  3. Sobald der Massenpunkt eines Ziels einen aktivierten Bereich betritt, wird rechts in der Recent Warnings-Liste eine neue Zeile mit Auslösezeit, Zielklasse, Bereichsname und einer JPEG-Schnappschuss-Miniaturansicht mit Annotation angezeigt (zum Herunterladen des Originalbilds anklicken).


Sekundärentwicklung auf Basis des Projekts

Den vollständigen Quellcode aus dem Image auf das lokale System holen:

bash
sudo docker cp area-intrusion:local:/app/web_detection.py ./
sudo docker cp area-intrusion:local:/app/py_utils ./

Nach Änderungen das Image neu erstellen:

bash
sudo docker build -t area-intrusion:local .

Anschließend mit dem oben genannten docker run-Befehl erneut starten.

Häufige Einstiegspunkte für die Sekundärentwicklung:

  • Erkennungsklassen ersetzen: Bearbeiten Sie class_config.txt und fügen Sie Klassen hinzu oder entfernen Sie sie — wirksam ohne Codeänderungen;
  • Auslöseempfindlichkeit umschalten: Passen Sie im Web-Tab Real-time Detection die Schieberegler Confidence Threshold und IOU Threshold an;
  • Eigene Bereiche einbinden: Rufen Sie POST /api/regions auf, um Polygon-Eckpunkte direkt zu schreiben (Koordinaten im Quellbild-Koordinatensystem), geeignet für die Anbindung an ein HMI-Host-System im Fahrzeug.

Kamera für Echtzeit-Inferenz aufrufen

Ersetzen Sie --video durch --camera_id, um eine USB- / CSI-Kamera aufzurufen. Das Kommandozeilenargument entspricht der Kamera, die über --device gemappt wurde:

bash
sudo docker run --rm --privileged --net=host \
  -e PYTHONUNBUFFERED=1 \
  -e RKNN_LOG_LEVEL=0 \
  -v $(pwd)/class_config.txt:/app/class_config.txt \
  --device /dev/video0:/dev/video0 \
  --device /dev/dri/renderD128:/dev/dri/renderD128 \
  -v /proc/device-tree/compatible:/proc/device-tree/compatible \
  area-intrusion:local \
  python3 web_detection.py --model_path model/yolov8n.rknn --camera_id 0 --class_path class_config.txt