Bouw snel een voertuigobstakeldetectieproject met reComputer-RK / Docker / RKNN / YOLO

U kunt de broncode van dit project bekijken op GitHub: https://github.com/doublelf/area-intrusion-alarm
Projectoverzicht
Dit project is afkomstig van een zone-intrusiedetectie-project op basis van RK3576 / RKNN / YOLO / RGA, waarvan het oorspronkelijke scenario een vaste camera was die een alarm triggerde wanneer doelen van het type "persoon / voertuig" een gedefinieerde polygoon binnengingen. De volledige keten "zone tekenen + toestandsmachine + snapshot-archivering" kan op natuurlijke wijze naar het voertuigscenario worden overgebracht: door de polygoon te herdefiniëren van "verboden toegangszones" naar "botsingsrisicozones / dode hoek / zebrapad" en door de trigger-klassen uit te breiden van 2 naar 8 voertuig- en persoonsgerelateerde klassen, ontstaat de obstakeldetectiecapaciteit voor in voertuigen die in dit project wordt getoond.
Opmerking over demomateriaal: in de hoofdmap van deze repository is
video/1-1.mp4een video van een rijscène; tijdens het draaien vervangt een MJPEG-voorvertoning de bovenstaande GIF.
Snel starten
1. Project klonen
git clone https://github.com/doublelf/area-intrusion-alarm
cd area-intrusion-alarm2. Klassebestand class_config.txt voorbereiden
In de hoofdmap van de repository is de naam class_config.txt al gereserveerd, maar het is momenteel een lege map-placeholder (tijdens synchronisatie is het door een aantal mountpoints per ongeluk als map aangemaakt). Vervang het door een gelijknamig bestand met de volgende inhoud (COCO-deelverzameling voertuigen / personen, 8 klassen):
"person", "bicycle", "car", "motorbike", "bus", "truck", "traffic light", "stop sign"3. Image bouwen
sudo docker build -t area-intrusion:local .4. Container starten en inferentie uitvoeren
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.txtWaarbij:
-v $(pwd)/class_config.txt:/app/class_config.txtmount het klassebestand in de container en activeert, samen met--class_path class_config.txt, de 8-klasse-deelverzameling voertuigen / personen;-v $(pwd)/video:/app/video:rokoppelt de lokalevideo/-directory als alleen-lezen aan de/app/videoin de image;--device /dev/video0:/dev/video0en--device /dev/dri/renderD128:/dev/dri/renderD128worden respectievelijk gebruikt voor de V4L2-camera en de RGA-hardwareversnelling;- het afsluitende commando
python3 web_detection.py --model_path ... --video video/1-1.mp4 --class_path ...start de inferentie.
Opmerking over CLI-compatibiliteit: de huidige parameternaam in
web_detection.pyvan deze repository is--video_path(zieweb_detection.py:1206). Als tijdens het draaienunknown arg: --videowordt gemeld, herschrijf dan--video video/1-1.mp4als--video_path video/1-1.mp4; de overige parameters blijven ongewijzigd.
5. Naar het webplatform
Als het project succesvol draait, open dan in de browser http://<board_ip>:8000/ en schakel bovenaan het tabblad naar Obstakelzone (Intrusion Zones):
- Selecteer de modus Draw, klik in volgorde op minimaal 3 punten op het beeld, dubbelklik of klik nogmaals op het startpunt om de polygoon te sluiten, voer een zonenaam in (bijvoorbeeld
Dode hoek voor,Dode hoek rechterbuitenspiegel,Zebrapad) en bevestig; - Vink in het Target-selectievakje de doelklassen aan die je in de waarschuwing wilt opnemen (standaard zijn person / car aangevinkt; voeg naar wens truck / bus / bicycle / motorbike / traffic light / stop sign toe);
- Wanneer het massapunt van een doel een geactiveerde zone binnengaat, verschijnt er rechts in de lijst Recent Warnings een nieuwe rij met triggertijd, doelklasse, zonenaam en een geannoteerde JPEG-miniatuur (klik om de oorspronkelijke afbeelding te downloaden).

Secundaire ontwikkeling op basis van het project
Haal de volledige broncode uit de image naar lokaal:
sudo docker cp area-intrusion:local:/app/web_detection.py ./
sudo docker cp area-intrusion:local:/app/py_utils ./Herbouw de image na wijzigingen:
sudo docker build -t area-intrusion:local .Start daarna opnieuw met het hierboven genoemde docker run-commando.
Veelvoorkomende ingangen voor secundaire ontwikkeling:
- Detectieklassen vervangen: bewerk
class_config.txtom klassen toe te voegen of te verwijderen; werkt direct zonder codewijzigingen; - Triggergevoeligheid aanpassen: in het webtabblad Real-time Detection verschuif je de schuifregelaars Confidence Threshold en IOU Threshold;
- Aangepaste zones koppelen: roep
POST /api/regionsaan om polygoon-vertices direct te schrijven (coördinaten in het bronafbeelding-coördinatenstelsel), geschikt voor koppeling met een HMI-host in het voertuig.
Camera oproepen voor realtime-inferentie
Vervang --video door --camera_id om een USB- / CSI-camera aan te spreken. Het opdrachtregelargument komt één op één overeen met het camera-apparaat dat via --device is gemapt:
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