摘要

这篇博客将以两个入门实例,帮助初学者掌握在树莓派上进行C/C++程序开发以及快速入门在64位树莓派上运行OpenCV深度学习模型。

说明

本文只是对于在树莓派上的OpenCV C++两个入门实例的复现,不涉及具体代码的解读

参考文档:OpenCV C++ examples on Raspberry Pi - Q-engineering

实验环境

  • 开发板选用树莓派4B 8GB,搭载附赠的摄像头,用的是64GB的SD卡:

  • 系统选用官方最新的64位系统带桌面款,已经进行了基本的环境配置:

实例一:OpenCV Camera Example

1.首先我们建立一个文件夹software,用以保存以后所有的实例和项目/软件:

 2.我们在software文件夹中建立我们第一个实例的文件夹Camera:

 3.打开Code::Blocks进行简单的配置后,新建工程:

 4.Code::Blocks支持开发多种类型的工程,我们这里选择开发一个控制台应用:

5.下一步是选择C语言还是C++,OpenCV是C++,所以我们选择C++。

 6.工程名我们叫TestCamera,路径选择刚刚创建的文件夹:

7.下一步是一些配置,我们先保持默认:

 8.点击Finish,我们的第一个项目就创建好了,可以看到,Code::Blocks默认带有一个HelloWorld程序,整个IDE的布局跟Visual Studio很像,有一个位于中间的调试/发布(Debug/Release)下拉选择框,以及在工具栏上的一些构建、运行、调试按钮。菜单结构也大体相同。

 9.我们从GitHub上下载测试源码:GitHub - Qengineering/OpenCV-Livecam-Raspberry-Pi: A live camera C++ example on a Raspberry Pi in OpenCV

 然后放到/software/Example文件夹中

 这里面的LICENSE和README可以不管,把剩下的文件都复制到Camera/TestCamera目录下,原来的main.cpp也可以删了。

10.重载项目后,界面大概是这样的:

 11.在Debug模式下,点击"Build":

 控制台中显示0 error(s),0 warning(s):

 12.在Debug模式下,点击"Run":

 然后,一段视频就会被播放:

 至此,第一个案例执行完毕,我们在第一个案例中,学习了如何使用Code::Blocks,包括新建工程、引入文件,编译和执行。

实例二:Deep learning code example

对于第二个实例,我们选用ncnn,这个兼具轻量级和高速的框架由中国互联网巨头——腾讯构建,我们首先要安装ncnn框架,可以参考我的另一篇博客:

在64位树莓派上安装ncnn深度学习框架_Slothwolf的博客-CSDN博客

仅作为示例,我们将构建一个MobileNet-YOLO网络。原始的YOLO网络可以检测1000种不同的物体。通过用MobileNet替换前端,只剩下20个要检测的类别。这将大幅增加计算速度。MobileNet-YOLO仍然使用YOLO后端进行位置确定。

我们开始下载深度学习网络和相关代码。从GitHub获取文件有很多方法,通常,我们使用以下步骤。其中,MyDir是您想要运行此示例的文件夹名称,可以使用任何名称。同时,请注意wget命令的最后一部分。在GitHub原始URL的末尾添加了后缀“/archive/master.zip”。这是在下载与之关联的zip容器中的文件时的常见做法。

mkdir MyDir
cd MyDir
wget https://github.com/Qengineering/MobileNetV2_YOLOV3_ncnn/archive/master.zip
unzip -j master.zip

 可以清理一些不必要的文件:

rm master.zip
rm README.md

然后,我们在software目录下建立DeepLearning目录,在其中建立MobiYO目录,并将工程文件复制进去:

 打开Code::Blocks,加载MobiYO.cbp,载入项目:

 然后进入正式的运行:

1.将模式从Debug转为Release,因为我们想要快速得到结果,而不是调试:

 2.点击"Build and run"按钮:

 得到结果:

在深度学习网络能够检测物体之前,必须加载所有的权重参数。这可能是一个耗时的过程。在MobiYO的情况下,加载权重参数需要82毫秒。预处理和后处理图像也需要一些时间完成。每张图片都被调整大小为网络的输入尺寸352x352,这需要约18毫秒。之后,检测到的矩形在图像中绘制,并在屏幕上显示,再次需要大约185毫秒。因此,从总执行时间620毫秒中,仅有335毫秒用于检测本身。(这些时间基于树莓派4,时钟频率为1.5 GHz) 

结语

我们成功在64位树莓派上配置运行了两个OpenCV简单项目,掌握了如何使用Code::Blocks在树莓派上进行C/C++应用的开发,以及如何运行OpenCV深度学习模型。

更多推荐