外观
yolov3 示例
2025-10-29
本文介绍了如何在 RuiChing Studio 中创建一个 YOLO目标检测 示例工程,并将其编译后在开发板上运行。旨在帮助读者使用YOLO进行目标检测。
YOLO 算法简介
YOLO(You Only Look Once)是一种实时目标检测算法,它将目标检测任务转化为一个回归问题,通过单个神经网络直接在图像上预测边界框和类别概率。这种方法速度快,能够在保证一定准确率的同时实现实时检测,广泛应用于安防监控、自动驾驶等领域。
创建工程点击展开
依次点击 “文件” -> “新建” -> "RT-Thread RuiChing App 项目"。

在弹出新建向导中选择 开发版 、BSP: 、示例 、 调试器/下载器。选择好之后点击 “完成”。

点击 “完成” 后,等待工程创建完成。

创建完成。

构建工程点击展开
单击工程使工程进入 Active-Debug 模式。

点击工具栏上的构建按钮进行工程编译。

构建成功后,会显示构建成功的信息。

固件下载点击展开
固化设备树

固化 APP

核心示例代码
yolov3 示例相关 API
cv::imread:加载需要检测的图像;detect_yolov3:运用 YOLOv3 模型对输入的图像进行目标检测,把检测到的目标信息存于 objects 向量中;draw_objects:在输入图像上绘制检测到的目标框和标签,然后把绘制后的图像保存到指定路径源。
applications/yolov3.cpp
int mnet_yolov3_test(int argc, char *argv[])
{
rt_kprintf("Hello RT-Thread NCNN\n");
char default_input[] = "bus.png", default_output[] = "image1.jpg";
char *input_img, *output_img;
if (argc < 3)
{
input_img = default_input;
output_img = default_output;
rt_kprintf(" input_img=bus.png,output_img=image1.jpg\n");
}
else if (argc == 3)
{
input_img = argv[1];
output_img = argv[2];
rt_kprintf(" input_img=%s,output_img=%s\n", input_img, output_img);
}
else
{
rt_kprintf("input_img or output_img is invalid\n");
return -1;
}
rt_uint32_t time_start = 0, time_end = 0;
rt_kprintf("execute imread start \n");
time_start = rt_tick_get();
// 读取待检测图片
cv::Mat m = cv::imread(input_img, 1);
time_end = rt_tick_get();
rt_kprintf("execute imread end : %d ms\n", time_end - time_start);
if (m.empty())
{
rt_kprintf("cv::imread failed\n");
return -1;
}
cv::Mat image = m.clone();
std::vector<Object> objects;
rt_kprintf("execute detect_yolov3 start \n");
time_start = rt_tick_get();
// 进行目标检测
detect_yolov3(m, objects);
time_end = rt_tick_get();
rt_kprintf("execute detect_yolov3 end : %d ms\n", time_end - time_start);
rt_kprintf("execute draw_objects start\n");
time_start = rt_tick_get();
// 绘制标识,保存图片
draw_objects(m, objects, output_img);
time_end = rt_tick_get();
rt_kprintf("execute draw_objects end : %d ms\n", time_end - time_start);
return 0;
}运行示例
操作步骤
准备
准备一张 TF 卡,存放从https://github.com/nihui/ncnn-assets/tree/master/models获取的mobilenetv2_yolov3.param和mobilenetv2_yolov3.bin,以及待检测的图片。

执行
开发板运行程序后,将测试图像传入系统,程序会调用 YOLO 模型进行目标检测,在输出图像上绘制检测到目标的边界框和类别标签。
[I/SPI1] sdio: SD card capacity 15558144 KB
[I/SPI1] sdio: switch to High Speed / SDR25 mode
found part[0], begin: 222298112, size: 14.644GB
elm file system mounted successfully!
msh />cd sd
msh /sd>cd sdmmc/
msh /sd/sdmmc>ls
Directory /sdmmc:
System Volume Information<DIR>
cat_raw.png 909679
mobilenetv2_yolov3.bin 7484620
mobilenetv2_yolov3.param 9508
bus.png 941129
msh /sd/sdmmc>mnet_yolov3_test
Hello RT-Thread NCNN
input_img=bus.png,output_img=image1.jpg
execute imread start
execute imread end : 396 ms
execute detect_yolov3 start
6 3 1
execute detect_yolov3 end : 4281 ms
execute draw_objects start
execute draw_objects end : 336 ms
execute done
msh /sd/sdmmc>mnet_yolov3_test cat_raw.png out.jpg
Hello RT-Thread NCNN
input_img=cat_raw.png,output_img=out.jpg
execute imread start
execute imread end : 389 ms
execute detect_yolov3 start
6 3 1
execute detect_yolov3 end : 4239 ms
execute draw_objects start
execute draw_objects end : 355 ms
execute done
msh /sd/sdmmc>查看检测结果

