Seeed Studio2026-07-22

Détection d'obstacles embarquée basée sur reComputer RK3576

Détection en temps réel de véhicules, piétons, deux-roues et panneaux de signalisation dans des images de conduite avec le modèle YOLOv8n sur le NPU du RK3576. Le NPU 2 TOPS du RK3576 accélère l'inférence sur l'appareil ; via l'interface web, on dessine des polygones de « zones de risque d'obstacle » qui, lorsqu'une cible y pénètre, déclenchent une alerte et émettent un instantané JPEG annoté.

CVObject DetectionEdge AIGithub

Construisez rapidement un projet de détection d'obstacles embarqué avec reComputer-RK / Docker / RKNN / YOLO

Vous pouvez consulter le code source de ce projet sur GitHub : https://github.com/doublelf/area-intrusion-alarm


Présentation du projet

Ce projet est issu d'un système de détection d'intrusion dans une zone basé sur RK3576 / RKNN / YOLO / RGA, dont le scénario d'origine était de déclencher une alerte lorsque des cibles « personne / véhicule » pénètrent dans un polygone défini, à partir du flux d'une caméra fixe. L'ensemble de la chaîne « dessin de zone + machine à états + archivage d'instantanés » se transpose naturellement au scénario embarqué : en redéfinissant le polygone de « zone d'accès interdit » à « zone de risque de collision / angle mort / passage piéton », et en étendant les classes de déclenchement de 2 à 8 classes liées aux véhicules et aux personnes, on obtient la capacité de détection d'obstacles embarquée illustrée par ce projet.

Note sur le matériel de démonstration : à la racine de ce dépôt, video/1-1.mp4 est une vidéo de scénario de conduite ; pendant l'exécution, l'aperçu remplace le GIF ci-dessus par un aperçu MJPEG.


Démarrage rapide

1. Cloner le projet

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

2. Préparer le fichier de classes class_config.txt

Le nom class_config.txt est déjà réservé à la racine du dépôt, mais il s'agit actuellement d'un répertoire vide servant d'espace réservé (certains points de montage l'ont créé par erreur comme répertoire durant la synchronisation). Remplacez-le par un fichier du même nom dont le contenu est le suivant (sous-ensemble véhicules / personnes de COCO, 8 classes) :

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

3. Construire l'image

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

4. Lancer le conteneur et exécuter l'inférence

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

Où :

  • -v $(pwd)/class_config.txt:/app/class_config.txt monte le fichier de classes dans le conteneur et active, en combinaison avec --class_path class_config.txt, le sous-ensemble de 8 classes véhicules / personnes ;
  • -v $(pwd)/video:/app/video:ro mappe le répertoire local video/ en lecture seule sur le /app/video de l'image ;
  • --device /dev/video0:/dev/video0 et --device /dev/dri/renderD128:/dev/dri/renderD128 sont utilisés respectivement pour la caméra V4L2 et l'accélération matérielle RGA ;
  • la commande finale python3 web_detection.py --model_path ... --video video/1-1.mp4 --class_path ... démarre l'inférence.

Note de compatibilité CLI : le nom d'argument actuel dans web_detection.py de ce dépôt est --video_path (voir web_detection.py:1206). Si l'exécution renvoie unknown arg: --video, réécrivez --video video/1-1.mp4 en --video_path video/1-1.mp4 ; les autres paramètres restent inchangés.

5. Accéder à la plateforme Web

Une fois le projet en marche, ouvrez dans le navigateur http://<board_ip>:8000/ et passez en haut sur l'onglet Zone d'obstacles (Intrusion Zones) :

  1. Sélectionnez le mode Draw, cliquez successivement sur au moins 3 points de l'image, double-cliquez ou recliquez sur le point de départ pour fermer le polygone, saisissez un nom de zone (par exemple Angle mort frontal, Angle mort rétroviseur droit, Passage piéton) puis validez ;
  2. Cochez dans la case Target les classes cibles à inclure dans l'alerte (par défaut person / car sont cochées ; ajoutez selon vos besoins truck / bus / bicycle / motorbike / traffic light / stop sign) ;
  3. Dès que le centroïde d'une cible entre dans une zone activée, une nouvelle ligne apparaît dans la liste Recent Warnings à droite, avec l'heure du déclenchement, la classe de la cible, le nom de la zone et une vignette JPEG annotée (cliquez pour télécharger l'image originale).


Développement secondaire basé sur le projet

Récupérez le code source complet de l'image en local :

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

Après modifications, reconstruisez l'image :

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

Puis relancez avec la commande docker run ci-dessus.

Points d'entrée courants pour le développement secondaire :

  • Remplacer les classes de détection : éditez class_config.txt pour ajouter ou retirer des classes ; effectif sans modifier le code ;
  • Ajuster la sensibilité de déclenchement : dans l'onglet Web Real-time Detection, déplacez les curseurs Confidence Threshold et IOU Threshold ;
  • Intégrer des zones personnalisées : appelez POST /api/regions pour écrire directement les sommets du polygone (coordonnées dans le système de coordonnées de l'image source), adapté à l'intégration avec un système HMI embarqué.

Appeler la caméra pour l'inférence en temps réel

Remplacez --video par --camera_id pour appeler une caméra USB / CSI. L'argument en ligne de commande correspond un à un au périphérique caméra mappé via --device :

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