Seeed Studio2026-07-22

基于 reComputer RK3576 的车载障碍物识别

使用 YOLOv8n 模型在 RK3576 NPU 上对驾驶画面中的车辆、行人、两轮车与交通标志进行实时检测,借助 RK3576 的 2 TOPS NPU 完成端侧推理加速;通过网页端绘制"障碍物风险区"多边形,对进入区域的目标触发预警并输出带标注的 JPEG 快照。

CVObject DetectionEdge AIGithub

基于 reComputer-RK / Docker / RKNN / YOLO 快速搭建一款载障碍物识别项目

你可以在 GitHub 上查看本项目源代码:https://github.com/doublelf/area-intrusion-alarm


项目简介

本项目源自一个基于 RK3576 / RKNN / YOLO / RGA 的区域入侵检测工程,原始场景是固定摄像头监控画面下,对进入指定多边形的"人 / 车"目标触发告警。整套"区域绘制 + 状态机 + 抓图存档"的链路天然可以迁移到车载场景:把多边形从"禁入区域"重新定义为"碰撞风险区 / 盲区 / 斑马线",把触发类别从 2 类扩展到 8 类车辆与人称相关类别,即构成本项目所展示的车载障碍物识别能力。

演示素材说明:本仓库根目录 video/1-1.mp4 是一段驾驶场景视频,运行时由 MJPEG 预览替代上方 GIF。


快速开始

1. 克隆项目

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

2. 准备类别文件 class_config.txt

仓库根目录已经预留了 class_config.txt 这个名字,但当前是空目录占位符(同步时被部分挂载点误创建为目录)。请把它替换为同名文件,内容如下(COCO 车辆 / 行人子集,8 类):

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

3. 构建镜像

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

4. 启动容器并推理

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

其中:

  • -v $(pwd)/class_config.txt:/app/class_config.txt 将类别文件挂载进容器,配合 --class_path class_config.txt 启用 8 类车辆 / 行人子集;
  • -v $(pwd)/video:/app/video:ro 将本地 video/ 目录以只读方式映射到镜像内的 /app/video;
  • --device /dev/video0:/dev/video0 与 --device /dev/dri/renderD128:/dev/dri/renderD128 分别用于 V4L2 摄像头与 RGA 硬件加速;
  • 末尾的 python3 web_detection.py --model_path ... --video video/1-1.mp4 --class_path ... 是推理启动命令。

CLI 兼容说明:本仓库 web_detection.py 当前的参数名为 --video_path(见 web_detection.py:1206)。如果运行时报 unknown arg: --video,请将 --video video/1-1.mp4 改写为 --video_path video/1-1.mp4,其余参数不变。

5. 访问 Web 平台

项目运行成功后,浏览器访问 http://<board_ip>:8000/,在顶部 Tab 切换到 障碍物区域(Intrusion Zones):

  1. 选中 Draw 模式,在画面上按顺序点击 3 个以上点,双击或再点一次起点闭合多边形,输入区域名称(如 前方盲区、右后视镜盲区、斑马线),确定后即保存;
  2. 在 Target 复选框中勾选要纳入预警的目标类别(默认勾选 person / car,可按需追加 truck / bus / bicycle / motorbike / traffic light / stop sign);
  3. 当任意目标的质点进入已启用的区域时,右侧 Recent Warnings 列表新增一行,包含触发时间、目标类别、所属区域名以及带标注的 JPEG 缩略图(点击可下载原图)。


基于项目的二次开发

把镜像里完整的源码拉到本地:

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

修改后重新构建镜像:

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

然后再次按上文的 docker run 命令启动即可。

常见的二次开发切入点:

  • 替换检测类别:编辑 class_config.txt,增删类别即可生效,无需改代码;
  • 切换触发灵敏度:在 Web 端 Real-time Detection Tab 中拖动 Confidence Threshold 与 IOU Threshold 滑杆;
  • 接入自定义区域:调用 POST /api/regions 直接写入多边形顶点(坐标用源图像坐标系),适合对接车机 HMI 上位机。

调用摄像头进行实时推理

把 --video 替换为 --camera_id 即可调用 USB / CSI 摄像头。命令行与 --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