Seeed Studio2026-07-22

Obstakeldetectie in voertuig op basis van reComputer RK3576

Realtime-detectie van voertuigen, voetgangers, tweewielers en verkeersborden in rijbeelden met het YOLOv8n-model op de NPU van de RK3576. De 2-TOPS-NPU van de RK3576 versnelt de inferentie op het apparaat; via de webinterface teken je polygonen voor "obstakelrisicozones" die, zodra een doel er binnengaat, een waarschuwing triggeren en een geannoteerde JPEG-snapshot produceren.

CVObject DetectionEdge AIGithub

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.mp4 een video van een rijscène; tijdens het draaien vervangt een MJPEG-voorvertoning de bovenstaande GIF.


Snel starten

1. Project klonen

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

2. 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):

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

3. Image bouwen

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

4. Container starten en inferentie uitvoeren

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

Waarbij:

  • -v $(pwd)/class_config.txt:/app/class_config.txt mount 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:ro koppelt de lokale video/-directory als alleen-lezen aan de /app/video in de image;
  • --device /dev/video0:/dev/video0 en --device /dev/dri/renderD128:/dev/dri/renderD128 worden 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.py van deze repository is --video_path (zie web_detection.py:1206). Als tijdens het draaien unknown arg: --video wordt gemeld, herschrijf dan --video video/1-1.mp4 als --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):

  1. 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;
  2. 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);
  3. 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:

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

Herbouw de image na wijzigingen:

bash
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.txt om 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/regions aan 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:

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