本文档介绍如何在 RK3576 Linux 平台上使用预编译的 RKNN demo 程序。
目录结构
dfrobot-ai-demo/
├── rknn_yolov5_demo/ # YOLOv5 目标检测
├── rknn_yolov5_seg_demo/ # YOLOv5 目标检测+实例分割
├── rknn_yolov8_demo/ # YOLOv8 目标检测
├── rknn_yolov8_seg_demo/ # YOLOv8 目标检测+实例分割
├── rknn_yolov8_pose_demo/ # YOLOv8 人体姿态估计
├── rknn_yolo11_demo/ # YOLO11 目标检测
├── rknn_clip_demo/ # CLIP 图像-文本匹配
├── rknn_whisper_demo/ # Whisper 语音识别
├── rknn_zipformer_demo/ # Zipformer 语音识别
├── rknn_mms_tts_demo/ # MMS-TTS 文本转语音
├── rknn_RetinaFace_demo/ # RetinaFace 人脸检测
└── rknn_PPOCR-System_demo/ # PPOCR 文字识别系统
└── rknn_llm_multimodal_model_demo/ # Qwen2-VL-2B 多模态模型
通用使用说明
1. 环境准备
- 硬件平台: RK3576 Linux aarch64系统
- Demo 路径:/dfrobot-ai-demo
- 依赖库: 所有 demo 所需的动态库已包含在各自的
lib/目录中 - 模型文件: 需要将对应的 RKNN 模型文件放置在
model/目录中
2. 运行方式
进入对应的 demo 目录,直接运行可执行文件:
cd rknn_xxx_demo
./rknn_xxx_demo [参数]
3. 查看帮助
./rknn_xxx_demo
Demo 详细介绍
1. YOLOv5 目标检测 (rknn_yolov5_demo)
功能: 实时目标检测,支持 COCO 数据集的 80 类物体检测
主要特性:
- 支持摄像头实时检测(利用rk3576 ISP功能,使用同一摄像头枚举的两个格式不同的video设备)
- 多线程推理,使用双 NPU 核心加速
- DRM 显示输出
使用方法:
cd rknn_yolov5_demo
# 使用默认摄像头设备
./rknn_yolov5_demo model/yolov5.rknn
# 指定摄像头设备
./rknn_yolov5_demo model/yolov5.rknn /dev/video11 /dev/video12 connector_id
参数说明:
model_path: RKNN 模型文件路径nv12_device: NV12 格式摄像头设备(可选,默认: /dev/video11)rgb_device: RGB 格式摄像头设备(可选,默认: /dev/video12)connector_id: DRM 连接器 ID(可选,默认: 0,自动选择)
退出: 按 Ctrl+C 查看统计信息(推理帧数、运行时间、平均 FPS)
2. YOLOv5 实例分割 (rknn_yolov5_seg_demo)
功能: 目标检测 + 实例分割,可同时检测物体并生成分割掩码
主要特性:
- 实时目标检测和分割
- 彩色掩码叠加显示
- 多线程推理优化
- 固定显示分辨率720P
使用方法:
cd rknn_yolov5_seg_demo
# 使用默认摄像头设备
./rknn_yolov5_seg_demo model/yolov5_seg.rknn
# 指定摄像头设备和显示设备
./rknn_yolov5_seg_demo model/yolov5_seg.rknn [nv12_device] [rgb_device] [connector_id]
参数说明: 同 YOLOv5 目标检测
3. YOLOv8 目标检测 (rknn_yolov8_demo)
功能: YOLOv8 实时目标检测,性能优于 YOLOv5
主要特性:
- 更高的检测精度和速度
- 双 NPU 核心并行推理
- 实时显示检测结果
使用方法:
cd rknn_yolov8_demo
# 使用默认摄像头设备
./rknn_yolov8_demo model/yolov8n.rknn
# 指定摄像头设备和显示设备
./rknn_yolov8_demo model/yolov8n.rknn [nv12_device] [rgb_device] [connector_id]
参数说明: 同 YOLOv5 目标检测
4. YOLOv8 实例分割 (rknn_yolov8_seg_demo)
功能: YOLOv8 目标检测 + 实例分割
主要特性:
- 高精度目标检测和分割
- 优化的分割掩码渲染
- 多线程后处理加速
- 固定显示分辨率为720P
使用方法:
cd rknn_yolov8_seg_demo
# 使用默认摄像头设备
./rknn_yolov8_seg_demo model/yolov8_seg.rknn
# 指定摄像头设备和显示设备
./rknn_yolov8_seg_demo model/yolov8_seg.rknn [nv12_device] [rgb_device] [connector_id]
参数说明: 同 YOLOv5 目标检测
5. YOLOv8 人体姿态估计 (rknn_yolov8_pose_demo)
功能: 实时人体姿态估计,检测人体关键点和骨架
主要特性:
- 检测 17 个人体关键点
- 绘制骨架连接线
- 实时姿态可视化
使用方法:
cd rknn_yolov8_pose_demo
# 使用默认摄像头设备
./rknn_yolov8_pose_demo model/yolov8_pose.rknn
# 指定摄像头设备和显示设备
./rknn_yolov8_pose_demo model/yolov8_pose.rknn [nv12_device] [rgb_device] [connector_id]
参数说明: 同 YOLOv5 目标检测
关键点说明:
- 检测 17 个关键点:鼻子、眼睛、耳朵、肩膀、手肘、手腕、臀部、膝盖、脚踝等
- 自动绘制骨架连接线
6. YOLO11 目标检测 (rknn_yolo11_demo)
功能: YOLO11 目标检测
主要特性:
- 更高的检测精度
- 优化的推理性能
使用方法:
cd rknn_yolo11_demo
# 使用默认摄像头设备
./rknn_yolo11_demo model/yolo11.rknn
# 指定摄像头设备和显示设备
./rknn_yolo11_demo model/yolo11n.rknn [nv12_device] [rgb_device] [connector_id]
参数说明: 同 YOLOv5 目标检测
7. CLIP 图像-文本匹配 (rknn_clip_demo)
功能: 使用 CLIP 模型进行图像和文本的相似度匹配
主要特性:
- 交互式图像搜索
- 文本查询图像库
参数说明:
$ ./rknn_clip_demo_search
Usage: ./rknn_clip_demo_search <image_model_path> <text_model_path> <image_dir>
Example: ./rknn_clip_demo_search ./model/clip_images.rknn ./model/clip_text.rknn ./images
Interactive mode: Enter text query to search for matching images, or 'quit' to exit.
image_model_path: 图像编码模型路径text_model_path: 文本编码模型路径image_dir: 图像目录路径
使用示例:
$ cd rknn_clip_demo
# 交互式使用
# 输入文本查询,例如: "a cat"
# 输入 "quit" 或 "exit" 退出
$ ./rknn_clip_demo_search model/clip_images.rknn model/clip_text.rknn images/
=== Ready for Interactive Search ===
Enter text query to search for matching images (or 'quit' to exit):
> a cat
Searching for: "a cat"
Processing 3 images...
rga_api version 1.10.1_[0]
=== Search Results ===
Processed 3 images
Best match:
Path: images//cat.jpg
Score: 0.262
> quit
Exiting...
8. Whisper 语音识别 (rknn_whisper_demo)
功能: 使用 Whisper 模型进行语音识别,支持中英文
主要特性:
- 支持麦克风实时录音
- 中英文语音识别
- 高精度转录
参数说明:
$ cd rknn_whisper_demo
$ ./rknn_whisper_demo_mic
Usage: ./rknn_whisper_demo_mic <encoder_path> <decoder_path> <task> [duration_sec] [alsa_device]
encoder_path: Path to encoder RKNN model
decoder_path: Path to decoder RKNN model
task: Recognition task: "en" (English) or "zh" (Chinese)
duration_sec: Audio capture duration in seconds (default: 20, max: 20)
alsa_device: ALSA device name (default: "plughw:0,0")
Recommended: "plughw:0,0" (auto format conversion)
Alternatives: "default", "hw:0,0" (direct hardware)
Note: If only 4 arguments are provided and the 4th argument looks like an ALSA device
(starts with 'plughw:', 'hw:', or 'default'), it will be treated as alsa_device.
encoder_path: 编码模型路径decoder_path: 解码模型路径task: en: 英文识别,zh: 中文识别duration_sec:录音时长(秒),默认 20 秒alsa_device:ALSA 设备,默认 "plughw:0,0"
使用示例:
# 英文识别,录音 5 秒
./rknn_whisper_demo_mic model/whisper_encoder_base_20s.rknn model/whisper_decoder_base_20s.rknn en 5
# 中文识别,使用指定麦克风设备
./rknn_whisper_demo_mic model/whisper_encoder_base_20s.rknn model/whisper_decoder_base_20s.rknn zh 10 plughw:0,0
输出: 识别结果会显示在终端
9. Zipformer 语音识别 (rknn_zipformer_demo)
功能: 使用 Zipformer 模型进行语音识别
主要特性:
- 高效的语音识别模型
- 支持麦克风输入
- 实时识别
参数说明:
$ ./rknn_zipformer_demo_mic
Usage: ./rknn_zipformer_demo_mic <encoder_path> <decoder_path> <joiner_path> [duration_sec] [alsa_device]
encoder_path: Path to encoder RKNN model
decoder_path: Path to decoder RKNN model
joiner_path: Path to joiner RKNN model
duration_sec: Audio capture duration in seconds (default: 5.0)
alsa_device: ALSA device name (default: "plughw:0,0")
Recommended: "plughw:0,0" (auto format conversion)
Alternatives: "default", "hw:0,0" (direct hardware)
encoder_path: 编码模型路径decoder_path:解码模型路径joiner_path:joiner模型路径duration_sec: 录音时长alsa_device:ALSA 设备,默认 "plughw:0,0"
使用示例:
# 默认 5 秒录音
./rknn_zipformer_demo_mic model/encoder-epoch-99-avg-1.rknn model/decoder-epoch-99-avg-1.rknn model/joiner-epoch-99-avg-1.rknn
# 指定录音时长和设备
./rknn_zipformer_demo_mic model/encoder-epoch-99-avg-1.rknn model/decoder-epoch-99-avg-1.rknn model/joiner-epoch-99-avg-1.rknn 10 plughw:0,0
10. MMS-TTS 文本转语音 (rknn_mms_tts_demo)
功能: 将文本转换为语音并播放
主要特性:
- 交互式文本输入
- 板载扬声器播放
参数说明:
$ ./rknn_mms_tts_demo_interactive
Usage: ./rknn_mms_tts_demo_interactive <encoder_path> <decoder_path> [alsa_device]
Example: ./rknn_mms_tts_demo_interactive model/mms_tts_eng_encoder_200.rknn model/mms_tts_eng_decoder_200.rknn plughw:0,0
Interactive mode: Enter text to convert to speech, or 'quit' to exit.
encoder_path: 编码模型路径decoder_path:解码模型路径alsa_device:ALSA 设备,默认 "plughw:0,0"
使用示例:
$ ./rknn_mms_tts_demo_interactive model/mms_tts_eng_encoder_200.rknn model/mms_tts_eng_decoder_200.rknn plughw:0,0
> The weather is really nice today!
Inference time: 0.502 sec, Audio length: 1.072 sec, RTF: 0.469
Playing audio...
Target sample rate: 44100 Hz, actual: 44100 Hz (requested: 16000 Hz)
Using 2 channels (stereo)
Resampling from 16000 Hz to 44100 Hz
Converting from 1 channels to 2 channels
Audio device opened successfully: plughw:0,0
Sample rate: 44100 Hz, Channels: 2, Format: S16_LE
Period size: 512 frames, Buffer size: 2048 frames
Audio data: 47275 frames, 1.07 seconds
Audio data range: [-0.0020, 0.0015] (first 1000 samples)
Warning: Audio data appears to be very quiet or silent!
Playback already running after writing 512 frames
Total frames written: 47275 / 47275
Draining PCM buffer...
PCM state before drain: 3 (0=SND_PCM_STATE_OPEN, 1=RUNNING, 2=XRUN, 3=DRAINING, 4=PAUSED, 5=SUSPENDED, 6=DISCONNECTED, 7=SETUP, 8=PREPARED)
PCM is running, waiting for playback to complete...
Final PCM state: 1
Audio playback complete.
> quit
Exiting...
注意事项: 文本长度限制为 200 个字符
11.RetinaFace 人脸检测 (rknn_RetinaFace_demo)
功能: 高精度人脸检测,可检测多个人脸并标注关键点
主要特性:
- 实时人脸检测
- 人脸关键点检测(5 个点)
- 多线程优化
使用方法:
cd rknn_RetinaFace_demo
# 使用默认摄像头设备
./rknn_retinaface_demo model/RetinaFace.rknn
# 指定摄像头设备和显示设备
./rknn_retinaface_demo model/RetinaFace.rknn [nv12_device] [rgb_device] [connector_id]
参数说明: 同 YOLOv5 目标检测
12. PPOCR 文字识别系统 (rknn_PPOCR-System_demo)
功能: OCR 文字识别,可检测和识别图像中的文字
主要特性:
- 文字检测 + 文字识别
- 支持中英文识别
- 实时 OCR 处理
使用方法:
cd rknn_PPOCR-System_demo
# 使用默认摄像头设备
./rknn_ppocr_system_demo model/ppocrv4_det.rknn model/ppocrv4_rec.rknn
# 指定摄像头设备和显示设备
./rknn_ppocr_system_demo model/ppocrv4_det.rknn model/ppocrv4_rec.rknn [nv12_device] [rgb_device] [connector_id]
参数说明:
det_model_path: 文字检测模型路径rec_model_path: 文字识别模型路径- 其他参数同 YOLOv5 目标检测
多模态大语言模型(rknn_llm_multimodal_model_demo)
功能:本示例使用的是rknn-llm/examples/multimodal_model_demo,用来演示在k3576端部署多模态模型
主要特征:内置的开源模型:Qwen2-VL-2B
使用示例:
cd rknn_llm_multimodal_model_demo
export LD_LIBRARY_PATH=./lib
# run imgenc
#./imgenc model/rknn/qwen2-vl-vision_rk3576.rknn demo.jpg 3
# run demo(Multimodal Example)
./demo demo.jpg model/rknn/qwen2-vl-vision_rk3576.rknn model/rkllm/qwen2-vl-2B-llm_rk3576.rkllm 2048 4096 3 "<|vision_start|>" "<|vision_end|>" "<|image_pad|>"
#多模态示例
user: <image>What is in the image?
robot: The image depicts an astronaut ,on the moon, enjoying a beer. The background shows the Earth and stars, creating a surreal and futuristic scene.
#纯文本示例
user: 把这句话翻译成英文: 今天天气真好啊!我们一起去郊游吧!
robot: The weather is really nice today! Let's go for a picnic together!
常见问题
- 摄像头设备找不到
问题: 提示camera_source_init fail
解决方法:
# 列出可用的摄像头设备
v4l2-ctl --list-devices
# 检查设备格式
v4l2-ctl --list-formats-ext --device=/dev/video11
- 显示设备问题
问题: 提示drm_display_init fail
解决方法:
# 运行 demo 时会自动列出可用的显示器
# 使用 connector_id=0 会自动选择第一个可用显示器
# 或指定具体的 connector_id
- 麦克风设备问题
问题: 语音识别 demo 无法录音
解决方法:
# 列出可用的音频设备
aplay -l
arecord -l
# 尝试不同的 ALSA 设备
# plughw:0,0 (推荐,自动格式转换)
# hw:0,0 (直接硬件访问)
# default (系统默认)
- 模型文件缺失
问题: 提示模型文件不存在
解决方法:
- 确保模型文件已放置在
model/目录中 - 检查模型文件路径是否正确
- 确认模型文件格式为
.rknn
- 动态库加载失败
问题: 提示error while loading shared libraries
解决方法:
# 确保 lib 目录存在且包含所需的 .so 文件
# 设置 LD_LIBRARY_PATH(通常已自动设置)
export LD_LIBRARY_PATH=$PWD/lib:$LD_LIBRARY_PATH
性能优化说明
多线程架构
大部分视觉检测 demo 采用多线程架构:
- 摄像头线程: 负责采集 NV12 和 RGB 图像
- 推理线程: 双 NPU 核心并行推理(Core 0 + Core 1)
- 后处理线程: 双线程并行后处理和绘制
- 显示线程: DRM 显示输出
性能统计
运行 demo 时按 Ctrl+C 可查看性能统计:
- 总推理帧数
- 运行时间
- 平均推理 FPS
更新日志
- 支持双 NPU 核心并行推理
- 优化多线程后处理性能
- 添加交互式语音和图像搜索功能
- 优化显示缓冲区管理,减少闪烁
版本: 1.0
平台: RK3576 Linux aarch64
更新日期: 2025/11/11