Seeed Studio2026-07-22

Detección de obstáculos en vehículo basada en reComputer RK3576

Detección en tiempo real de vehículos, peatones, vehículos de dos ruedas y señales de tráfico en imágenes de conducción con el modelo YOLOv8n en la NPU del RK3576. La NPU de 2 TOPS del RK3576 acelera la inferencia en el dispositivo; mediante la interfaz web se dibujan polígonos de "zonas de riesgo de obstáculos" que, al ser atravesados por un objetivo, disparan una alerta y emiten una instantánea JPEG con anotaciones.

CVObject DetectionEdge AIGithub

Construye rápidamente un proyecto de detección de obstáculos en vehículo con reComputer-RK / Docker / RKNN / YOLO

Puedes consultar el código fuente de este proyecto en GitHub: https://github.com/doublelf/area-intrusion-alarm


Descripción del proyecto

Este proyecto parte de un sistema de detección de intrusión en zona basado en RK3576 / RKNN / YOLO / RGA, cuyo escenario original era disparar una alarma cuando objetivos del tipo "persona / vehículo" entraban en un polígono definido, a partir del flujo de una cámara fija. Toda la cadena de "dibujo de zona + máquina de estados + archivado de instantáneas" se puede migrar de forma natural al escenario vehicular: redefiniendo el polígono de "zona de acceso prohibido" a "zona de riesgo de colisión / ángulo muerto / paso de peatones", y extendiendo las clases de disparo de 2 a 8 clases relacionadas con vehículos y personas, se obtiene la capacidad de detección de obstáculos en vehículo que muestra este proyecto.

Nota sobre el material de demostración: en la raíz de este repositorio, video/1-1.mp4 es un vídeo de un escenario de conducción; durante la ejecución se reemplaza la vista previa GIF superior por una vista previa MJPEG.


Inicio rápido

1. Clonar el proyecto

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

2. Preparar el archivo de clases class_config.txt

En la raíz del repositorio ya está reservado el nombre class_config.txt, pero actualmente es un marcador de posición de directorio vacío (algunos puntos de montaje lo crearon erróneamente como directorio durante la sincronización). Sustitúyelo por un archivo con el mismo nombre y el siguiente contenido (subconjunto de vehículos / personas de COCO, 8 clases):

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

3. Construir la imagen

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

4. Iniciar el contenedor y ejecutar la inferencia

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

Donde:

  • -v $(pwd)/class_config.txt:/app/class_config.txt monta el archivo de clases en el contenedor y, junto con --class_path class_config.txt, habilita el subconjunto de 8 clases de vehículos / personas;
  • -v $(pwd)/video:/app/video:ro mapea el directorio local video/ como solo lectura al /app/video de la imagen;
  • --device /dev/video0:/dev/video0 y --device /dev/dri/renderD128:/dev/dri/renderD128 se usan, respectivamente, para la cámara V4L2 y la aceleración por hardware RGA;
  • el comando final python3 web_detection.py --model_path ... --video video/1-1.mp4 --class_path ... inicia la inferencia.

Nota de compatibilidad de CLI: el nombre actual del argumento en web_detection.py de este repositorio es --video_path (ver web_detection.py:1206). Si al ejecutar aparece unknown arg: --video, reescribe --video video/1-1.mp4 como --video_path video/1-1.mp4; el resto de parámetros no cambia.

5. Acceder a la plataforma web

Cuando el proyecto esté en marcha, abre en el navegador http://<board_ip>:8000/ y cambia en la pestaña superior a Zona de obstáculos (Intrusion Zones):

  1. Selecciona el modo Draw, haz clic en al menos 3 puntos del vídeo en orden, doble clic o haz clic otra vez sobre el punto inicial para cerrar el polígono, introduce un nombre de zona (por ejemplo, Ángulo muerto frontal, Ángulo muerto del retrovisor derecho, Paso de peatones) y confirma;
  2. Marca en la casilla Target las clases que quieras incluir en la alerta (por defecto, person / car están marcadas; puedes añadir truck / bus / bicycle / motorbike / traffic light / stop sign según necesites);
  3. Cuando el centro de masa de cualquier objetivo entre en una zona activa, se añadirá una nueva fila en la lista Recent Warnings con la hora del disparo, la clase del objetivo, el nombre de la zona y una miniatura JPEG anotada (haz clic para descargar la imagen original).


Desarrollo secundario basado en el proyecto

Saca el código fuente completo de la imagen a local:

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

Después de modificar, vuelve a construir la imagen:

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

A continuación, vuelve a iniciar con el comando docker run indicado arriba.

Puntos de partida habituales para el desarrollo secundario:

  • Sustituir las clases de detección: edita class_config.txt para añadir o quitar clases; surte efecto sin tocar código;
  • Ajustar la sensibilidad de disparo: en la pestaña web Real-time Detection, mueve los deslizadores Confidence Threshold e IOU Threshold;
  • Integrar zonas personalizadas: llama a POST /api/regions para escribir directamente los vértices del polígono (coordenadas en el sistema de coordenadas de la imagen de origen), adecuado para integrarse con un sistema HMI del coche.

Llamar a la cámara para inferencia en tiempo real

Sustituye --video por --camera_id para usar una cámara USB / CSI. El argumento de línea de comandos se corresponde uno a uno con el dispositivo de cámara mapeado con --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