RK3576 Frigate:RKNN 目标检测
最近更新:
介绍
上一篇教程介绍了如何在 reComputer RK3576 上安装 Frigate NVR 并访问网页界面。本篇继续接入视频源、启用 RKNN NPU 目标检测,识别人、自行车和汽车。
你可以选择外部 RTSP 网络摄像头,也可以使用已有的本地视频文件,无需下载指定的示例视频。目标检测正常运行后,使用兼容 RTSP 摄像头的用户还可以测试 RKMPP 硬件视频解码。
RKNN 与 RKMPP 的区别: RKNN 使用 RK3576 的 NPU 加速 AI 模型推理;RKMPP 使用 Rockchip 多媒体硬件加速视频解码。这是两条不同的加速路径。
以下示例依据 Frigate 官方配置编写。请在设备上验证检测结果。
准备工作
先完成在 reComputer RK3576 上安装 Frigate NVR,确认可以通过 https://<RK3576_IP>:8971 登录 Frigate。
系统需具备兼容的 Rockchip BSP 内核和 RKNPU 驱动,才能使用 RKNN 推理;RKMPP 解码还需要相应的 Rockchip 视频解码驱动,包括 rkvdec2。
本文沿用第一篇的项目目录 ~/frigate-rk,Docker Compose 中将 ./config 挂载到 /config,将 ./storage 挂载到 /media/frigate。这里不再重复硬件准备、Docker 安装和管理员初始化。
步骤 1:备份现有 Frigate 配置
通过 SSH 连接 RK3576,修改现有配置前先备份:
cd ~/frigate-rk
sudo docker compose ps
FRIGATE_CONFIG_DIR="$HOME/frigate-rk/config"
sudo ls -lah "$FRIGATE_CONFIG_DIR"Frigate 支持 config.yml 和 config.yaml。两者同时存在时,优先使用 config.yml。查看目录后,执行下面的代码,自动选择并备份已有文件;后续步骤沿用同一个文件路径。
FRIGATE_CONFIG_FILE=
if sudo test -f "$FRIGATE_CONFIG_DIR/config.yml"; then
FRIGATE_CONFIG_FILE="$FRIGATE_CONFIG_DIR/config.yml"
elif sudo test -f "$FRIGATE_CONFIG_DIR/config.yaml"; then
FRIGATE_CONFIG_FILE="$FRIGATE_CONFIG_DIR/config.yaml"
fi
if [ -n "$FRIGATE_CONFIG_FILE" ]; then
sudo cp -- "$FRIGATE_CONFIG_FILE" "${FRIGATE_CONFIG_FILE}.before-rknn.bak"
printf 'Using configuration: %s\n' "$FRIGATE_CONFIG_FILE"
else
printf '%s\n' 'No config.yml or config.yaml found. Check the /config mount before continuing.' >&2
fi如果两个文件都没有找到,检查容器的实际挂载位置:
sudo docker inspect frigate --format '{{range .Mounts}}{{println .Source "->" .Destination}}{{end}}'找到映射到 /config 的主机目录,将 FRIGATE_CONFIG_DIR 设置为该目录,再重复上面的目录查看、文件识别与备份步骤。如果部署中另行指定了配置文件路径,请先确认实际文件再继续。
如果你的安装目录不同,请相应调整命令。合并下文示例时,保留已有认证和自定义摄像头设置。不要重复定义顶层 YAML 键,例如 cameras:、detectors: 或 model:。
步骤 2:选择视频源
选择方案 A 或方案 B,不必同时配置。两种方案都使用步骤 3 中相同的 RKNN 检测器。
方案 A:接入外部 RTSP 网络摄像头
该方案适合实际 NVR 部署,也适合后续 RKMPP 解码测试。
-
将网络摄像头接入 RK3576 可以访问的网络。
-
在摄像头设置中启用 RTSP,记录 RTSP 地址和登录凭据,例如:
textrtsp://USERNAME:PASSWORD@CAMERA_IP:554/STREAM_PATH请使用摄像头厂商提供的实际地址替换所有占位内容。
-
可以在 RK3576 上使用
ffprobe(由ffmpeg软件包提供)检查 RTSP 视频流:bashffprobe -v error -rtsp_transport tcp \ -show_entries stream=codec_name,width,height \ -of default=noprint_wrappers=1 \ 'rtsp://USERNAME:PASSWORD@CAMERA_IP:554/STREAM_PATH'视频流正常时会返回视频编码格式和分辨率信息。不要公开真实凭据。
如果摄像头支持,检测请使用 720p 子码流。4K 主码流只会增加解码负担,模型输入仍然只有 320×320。
USB 摄像头: USB 摄像头不等同于 RTSP 网络摄像头。请先通过兼容输入方式或 RTSP 桥接将视频提供给 Frigate,不要直接把
/dev/video0填入示例 RTSP 地址。
方案 B:使用已有的本地视频文件
没有网络摄像头时,可以使用自己的视频文件,例如包含行人或车辆的 MP4,无需下载指定示例视频。
使用 1280×720、15 fps、H.264 的 MP4,画面中的人或车辆要足够清晰。如果视频更大,先转换:
ffmpeg -i input.mp4 -vf "fps=15,scale=1280:720" \
-c:v libx264 -pix_fmt yuv420p -crf 23 -an test.mp4然后将转换后的 test.mp4 复制到 storage/test.mp4(替换下面命令中的路径)。
将文件复制到已挂载给 Frigate 的目录:
cd ~/frigate-rk
# Replace /path/to/your-video.mp4 with your existing file path.
cp /path/to/your-video.mp4 storage/test.mp4如果文件在电脑上,也可以通过 SCP 或 SFTP 传到 ~/frigate-rk/storage/test.mp4。检查容器内是否可见:
sudo docker exec frigate ls -lh /media/frigate/test.mp4本方案采用 Frigate 的 Manual Dummy Camera 方法,通过 FFmpeg 读取并循环播放本地文件。
步骤 3:配置 RKNN 检测器与摄像头
在执行步骤 1 的同一个 SSH 终端中打开识别到的配置文件。如果重新连接过终端,或变量为空,请先重新执行步骤 1:
if [ -n "${FRIGATE_CONFIG_FILE:-}" ] && sudo test -f "$FRIGATE_CONFIG_FILE"; then
sudo nano "$FRIGATE_CONFIG_FILE"
else
printf '%s\n' 'Repeat Step 1 to locate the existing configuration before editing.' >&2
fi两种方案使用以下 RKNN 检测器配置:
detectors:
rknn_0:
type: rknn
num_cores: 0
model:
path: frigate-fp16-yolov9-t
model_type: yolo-generic
width: 320
height: 320
input_tensor: nhwc
labelmap_path: /labelmap/coco-80.txt本例使用 frigate-fp16-yolov9-t RKNN 检测模型。320 × 320 是模型输入尺寸,不是摄像头视频分辨率。首次使用时会自动下载模型,随后使用缓存;首次下载需要网络连接。
单视频源演示可选择下列一个完整示例。如果当前配置中有需要保留的设置,请合并相关配置段,不要直接覆盖整个文件。
完整配置——方案 A:RTSP 摄像头
mqtt:
enabled: false
detectors:
rknn_0:
type: rknn
num_cores: 0
model:
path: frigate-fp16-yolov9-t
model_type: yolo-generic
width: 320
height: 320
input_tensor: nhwc
labelmap_path: /labelmap/coco-80.txt
cameras:
front_door:
enabled: true
ffmpeg:
inputs:
- path: rtsp://USERNAME:PASSWORD@CAMERA_IP:554/STREAM_PATH
roles:
- detect
detect:
enabled: true
fps: 5
objects:
track:
- person
- bicycle
- car
record:
enabled: false
snapshots:
enabled: false注意: 重启前必须替换 RTSP 地址。示例先关闭录像和快照,集中验证目标检测。
完整配置——方案 B:本地 MP4
mqtt:
enabled: false
detectors:
rknn_0:
type: rknn
num_cores: 0
model:
path: frigate-fp16-yolov9-t
model_type: yolo-generic
width: 320
height: 320
input_tensor: nhwc
labelmap_path: /labelmap/coco-80.txt
cameras:
demo_video:
enabled: true
ffmpeg:
# Local clips may require software decoding.
hwaccel_args: ""
inputs:
- path: /media/frigate/test.mp4
input_args: -re -stream_loop -1 -fflags +genpts
roles:
- detect
detect:
enabled: true
fps: 5
objects:
track:
- person
- bicycle
- car
record:
enabled: false
snapshots:
enabled: false这里,-re 按视频原始速率读取,-stream_loop -1 循环播放,-fflags +genpts 在需要时生成时间戳。本地文件无法使用硬件解码器时,hwaccel_args: "" 会为这个模拟摄像头关闭视频硬件加速,RKNN 目标检测仍可在 NPU 上运行。
步骤 4:重启 Frigate 并检查 RKNN 初始化
保存步骤 1 选中的配置文件(config.yml 或 config.yaml),重启已有的 Frigate 容器:
cd ~/frigate-rk
sudo docker compose restart frigate
sudo docker compose ps查看相关日志,无需输出全部历史记录:
sudo docker logs --since 5m frigate 2>&1 | \
grep -iE 'rknn|model|detector|ffmpeg|error|failed' | tail -n 100首次使用时,等待模型下载和初始化。模型缓存通常位于:
~/frigate-rk/config/model_cache/rknn_cache/检查缓存文件:
sudo ls -lh ~/frigate-rk/config/model_cache/rknn_cache/继续按步骤 5 验证运行结果。
步骤 5:验证检测结果与 NPU 使用情况
-
打开
https://<RK3576_IP>:8971并登录。 -
找到配置的摄像头:方案 A 为
front_door,方案 B 为demo_video。 -
打开 Debug view 并启用 Debugging Bounding Boxes。检测到的目标周围会出现标记为
person、bicycle或car的检测框。
如果没有检测框,先确认视频里有被跟踪的目标、Debugging Bounding Boxes 已启用,并且日志中出现
Successfully loaded RKNN model。 -
打开 Frigate 的 System 页面,查看当前版本中显示的检测器推理时间和检测 FPS。
-
视频中有相关运动目标时,在 RK3576 上查看 NPU 负载:
bashsudo cat /sys/kernel/debug/rknpu/load也可以在检测过程中持续观察:
bashwatch -n 1 'sudo cat /sys/kernel/debug/rknpu/load'
NPU 使用率会随运动情况波动。结合检测框和 Frigate 指标确认检测结果。
步骤 6(可选):启用 RKMPP 硬件视频解码
本步骤主要用于方案 A(RTSP 摄像头),并应在 RKNN 检测正常工作后进行。RKMPP 加速兼容的视频解码,不负责目标检测。
在现有 front_door 摄像头的 ffmpeg: 下加入 hwaccel_args: preset-rkmpp:
cameras:
front_door:
ffmpeg:
hwaccel_args: preset-rkmpp
inputs:
- path: rtsp://USERNAME:PASSWORD@CAMERA_IP:554/STREAM_PATH
roles:
- detect这是局部配置示例:请保留步骤 3 中其余摄像头、RKNN 模型和检测器设置。
重启 Frigate,检查 FFmpeg 相关日志:
sudo docker compose restart frigate
sudo docker logs --since 5m frigate 2>&1 | \
grep -iE 'ffmpeg|rkmpp|rkvdec|error|failed' | tail -n 100确认摄像头视频和 AI 检测仍正常,FFmpeg 没有因硬件上下文错误反复崩溃;如果主机有相应监控工具,还应检查视频解码器是否处于活动状态。使用相同视频流和分辨率,对比启用 RKMPP 前后的 CPU 使用情况。
对于本地 MP4 模拟摄像头方案,初次验证 RKNN 时先保持硬件解码关闭。