Firefly AI相关:多路视频检测

第三课:多路视频检测(multistream_detect)

课程目标

  • 掌握 download.sh 模型下载流程

  • 部署并运行multistream_detect的demo

  • 知道 NPU 卡资源互斥等部署注意事项

一、准备环境

1.1 硬件与网络

设备 要求
开发板 RK3588 类主板 + RK1828 NPU 加速卡,已装 rknn3-rk182x-m2 运行时
PC Ubuntu,已装 adb,与板子同网段
磁盘 PC 下载缓存约 2GB;板端 /userdata 需约 2GB

1.2 SDK 对应目录

applications/multistream_detect/
├── download.sh      # 从发布网盘按 Runtime 版本拉取资源(DEB/模型/测试视频)
├── deploy.sh        # PC 端一键部署(推荐 --prebuilt 预编译模式)
├── install.sh       # 板端安装/资源检查脚本(deploy.sh 会自动调用)
└── README_CN.md     # 完整文档

二、任务介绍

4 路测试视频 ──> GStreamer 解码 ──> YOLOv5n 检测(行人/车辆) ──> IoU 跟踪(目标ID)
                                     │
                                     ├─> 车牌识别
                                     ├─> VLM(Qwen3-VL-2B)画面研判 → "疑似事故"等事件
                                     ▼
                       C++ 数据后端 :18081 (/api/objects 等)
                                     │
                       FastAPI 门户 :18080 ──> PC 浏览器看实时画面+告警列表

两个 systemd 服务:

服务 职责
multistream-detect.service C++ 解码、推理、跟踪、OSD 叠框,监听 18081
multistream-detect-traffic-web.service FastAPI 交通监管门户,监听 18080(网页入口)

三、操作步骤

步骤 1:连接板子

adb connect <板子IP>:5555
adb devices                     # 确认 device 状态

步骤 2:一键部署(预编译模式,推荐)

cd applications/multistream_detect
./deploy.sh --prebuilt "<adb序列号>"     # 只连了一台设备可省略参数

--prebuilt 会自动:读取板端 rknn-smi -v 的 RKNN3 API 版本 → 从发布网盘下载匹配的
ARM64 DEB、CNN 模型、四核 VLM 和测试视频(约 2GB)→ 推送到板端 → 安装并启动服务。

网盘账号密码已内置在 download.sh 里,无需手工输入。

版本探测失败的兜底(本次实测遇到):板端 rknn-smi -v 输出 rknn3 API version: NA,
自动探测失败。确认 Runtime 实际是 1.1.0 后手动指定:

MSD_RUNTIME_VERSION=1.1.0 ./deploy.sh --prebuilt "<adb序列号>"

只下载不部署(网络差的环境可分两步):

./download.sh 1.1.0          # 资源缓存在 downloads/1.1.0/
./deploy.sh --prebuilt "<adb序列号>"

步骤 3:(可选)源码构建模式

预编译包不可用时,去掉 --prebuilt 即为源码模式——把源码推到板端现场编译安装:

./deploy.sh "<adb序列号>"

步骤 4:确认服务状态

adb shell
systemctl status multistream-detect.service multistream-detect-traffic-web.service

两个服务都应 active (running)。板端资源落位:

/userdata/multistream_detect/{models/{cv,Qwen3-VL-2B-Instruct}, test_videos, prebuilt}
/usr/bin/multistream_detect  /usr/bin/run_traffic_demo.sh
/usr/share/multistream-detect/app/traffic/configs/     # 配置

四、结果验证

4.1 健康检查

adb shell curl -s http://127.0.0.1:18081/api/health    # → {"status":"ok"}
adb shell curl -s http://127.0.0.1:18080/api/health    # 门户(依赖 18081,刚起时可能是 degraded,稍等变 ok)

4.2 看到真实检测结果

adb shell curl -s http://127.0.0.1:18081/api/objects | head -c 500

返回形如(file0-car-131:第 0 路视频、car 类、跟踪 ID 131、置信度 0.31、归一化框坐标):

{"file0-car-131":{"class":"car","score":0.31,"bbox":[0.41,0.55,0.72,0.87],"seen_count":12,...}}

4.3 浏览器看画面(最终效果)

PC 打开 http://<板子IP>:18080/ —— 4 路视频实时画面 + 检测框 + 目标列表/告警事件。

4.4 确认 VLM 在干活

adb shell "journalctl -u multistream-detect -n 100 | grep -i image"
# 可见 VLM 多模态推理日志: '<image>描述车型和颜色' 384x384, n_image_tokens=144

五、常见问题(FAQ)

Q1:deploy.sh 提示无法读取 RKNN3 Runtime 版本?
板端跑 rknn-smi -v 看有无 rknn3 API version;若是 NA(本次实测),用
MSD_RUNTIME_VERSION=1.1.0 覆盖。另注意 rknn-smi 需要 root(adb shell 即 root);
/tmp/rknnsmi.lock 属主异常时先 rm -f /tmp/rknnsmi.lock。

Q2:deploy.sh 打印"完成",但服务起不来/日志报缺少测试视频?
deploy.sh 不检查板端 install.sh 的退出码——不要用软链接把下载目录链进
downloads/1.1.0/ 缓存(adb 只会推 333 字节的链接文件,板端校验失败)。必须用真实文件
(cp -rL)。补救:把资源手工 push 到 /userdata/multistream_detect/ 后,在板端重跑
sudo bash install.sh。

Q3:服务反复重启,日志 MODEL_SETUP ACK_FAIL?
NPU 卡被别的 AI 应用占用了(比如 rkllm3-server)。一张卡同一时刻只能跑一个 AI 应用:
pkill -f rkllm3-server 后 systemctl restart multistream-detect multistream-detect-traffic-web。

Q4:网页 18080 打得开但一直 degraded?
18081 后端还没就绪(模型加载要一会儿),curl 18081/api/health 变 ok 后刷新即可。

Q5:想开机自启?
sudo systemctl enable multistream-detect.service multistream-detect-traffic-web.service

本课小结

  • 预编译一键流:download.sh(可选)→ deploy.sh --prebuilt → 浏览器 18080

  • 验证要下到接口层:/api/health 看状态,/api/objects 看到 class/score/bbox 才算真推理

  • NPU 卡是独占资源,多 AI 应用切换时先停旧再起新

1 Like