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.mp4ein Fahr-Szenen-Video; während der Laufzeit ersetzt eine MJPEG-Vorschau die obige GIF.
Schnellstart
1. Projekt klonen
git clone https://github.com/doublelf/area-intrusion-alarm
cd area-intrusion-alarm2. 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):
"person", "bicycle", "car", "motorbike", "bus", "truck", "traffic light", "stop sign"3. Image erstellen
sudo docker build -t area-intrusion:local .4. Container starten und Inferenz ausführen
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.txtHierbei:
-v $(pwd)/class_config.txt:/app/class_config.txtmountet die Klassendatei in den Container und aktiviert in Kombination mit--class_path class_config.txtdie 8-Klassen-Fahrzeug- / Personen-Teilmenge;-v $(pwd)/video:/app/video:romappt das lokalevideo/-Verzeichnis als read-only in den/app/video-Pfad des Images;--device /dev/video0:/dev/video0und--device /dev/dri/renderD128:/dev/dri/renderD128werden 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.pydieses Repositorys ist--video_path(sieheweb_detection.py:1206). Wenn beim Startunknown arg: --videogemeldet wird, ersetzen Sie--video video/1-1.mp4durch--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):
- 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; - 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);
- 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:
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:
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.txtund 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/regionsauf, 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:
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