基于 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. 克隆项目
git clone https://github.com/doublelf/area-intrusion-alarm
cd area-intrusion-alarm2. 准备类别文件 class_config.txt
仓库根目录已经预留了 class_config.txt 这个名字,但当前是空目录占位符(同步时被部分挂载点误创建为目录)。请把它替换为同名文件,内容如下(COCO 车辆 / 行人子集,8 类):
"person", "bicycle", "car", "motorbike", "bus", "truck", "traffic light", "stop sign"3. 构建镜像
sudo docker build -t area-intrusion:local .4. 启动容器并推理
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):
- 选中 Draw 模式,在画面上按顺序点击 3 个以上点,双击或再点一次起点闭合多边形,输入区域名称(如
前方盲区、右后视镜盲区、斑马线),确定后即保存; - 在 Target 复选框中勾选要纳入预警的目标类别(默认勾选 person / car,可按需追加 truck / bus / bicycle / motorbike / traffic light / stop sign);
- 当任意目标的质点进入已启用的区域时,右侧 Recent Warnings 列表新增一行,包含触发时间、目标类别、所属区域名以及带标注的 JPEG 缩略图(点击可下载原图)。

基于项目的二次开发
把镜像里完整的源码拉到本地:
sudo docker cp area-intrusion:local:/app/web_detection.py ./
sudo docker cp area-intrusion:local:/app/py_utils ./修改后重新构建镜像:
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 映射的摄像头设备一一对应:
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