OpenCV + NCNN 在VS2017调用yolov5记录
根据ncnn+opencv+yolov5调用摄像头进行检测这位博主的文章自己走了一遍,记录一下,防忘记!!!
OpenCV-4.5.4下载地址:
链接:https://pan.baidu.com/s/1gzdkrbNWX1urmTIf5X2TOA?pwd=9u82
提取码:9u82
下载后解压exe文件,将解压后目录里的以下红框中的路径添加到电脑环境系统变量里
这里默认已经安装配置了VS2017
cmake-3.24.0下载地址如下:cmake下载入口
下载.zip文件后解压即可(这里不用安装cmake软件,如果要安装软件,可以下载上图中的.msi文件进行安装),打开解压文件找到bin文件,然后将该绝对路径
1、protobuf-3.4.0下载地址:protobuf下载入口
2、同样下载后解压即可(记住解压后的存放位置)
3、接着打开VS2017的x64命令行
4、在命令窗口中执行一下命令:
(1)使用cd 命令将操作路径移动到解压后的protobuf-3.4.0目录下;如上图
(2)再依次执行如下命令(一条一条执行):
> mkdir build-vs2017
> cmake -G"NMake Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%cd%/install -Dprotobuf_BUILD_TESTS=OFF -Dprotobuf_MSVC_STATIC_RUNTIME=OFF ../cmake
>nmake
>nmake install
这个过程需要几分钟,全部完成后,protobuf-3.4.0文件下会生成build-vs2017文件,包含如下:
1、ncnn下载地址:GitHub链接 可直接用git clone该项目;
2、与protobuf一样,打开VS2017的X64命令终端,cd 进入到上一步clone的ncnn的根目录下;
3、逐一执行如下命令:
注意:在第三条命令中的 protobuf-root-dir 处,需要根据自己的protobuf根路径,修改3个地方
mkdir -p build-vs2017
cd build-vs2017
cmake -G"NMake Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%cd%/install -DProtobuf_INCLUDE_DIR=<protobuf-root-dir>/build-vs2017/install/include -DProtobuf_LIBRARIES=<protobuf-root-dir>/build-vs2017/install/lib/libprotobuf.lib -DProtobuf_PROTOC_EXECUTABLE=<protobuf-root-dir>/build-vs2017/install/bin/protoc.exe -DNCNN_VULKAN=OFF ..
nmake
nmake install
编译完之后,生成build-vs2017文件如下:
1、先新建一个空项目,命名为yolov5
2、下载yolov5s_6.0.bin和yolov5s_6.0.param两个权重文件 下载入口
将两个下载的文件存放于VS2017刚新建的项目的yolov5_test文件夹下,确保这两个文件和后面的.cpp文件在同一目录下
3、在VS项目中新建一个.cpp源文件
4、复制如下链接yolov5.cpp中的代码,粘贴到刚创建的.cpp文件里。
5、添加cpp所需要的依赖项(头文件、依赖库、链接输入)
如未正确添加依赖库,头文件会出现如下报错
添加开始:
(1)右键->属性
(2)选择release x64平台, VC++目录 -> 包含目录
在包含目录中逐一浏览找到下面所示的目录,添加到包含目录中去
包含目录:
E:\OpenCV4\opencv\build\include
E:\OpenCV4\opencv\build\include\opencv2
E:\ncnn\ncnn\build-vs2017\install\include\ncnn
E:\ncnn\ncnn\build-vs2017\install\include
(3)、VC++目录 -> 库目录
同样的操作,在库目录中添加如下目录
库目录
E:\ncnn\ncnn\build-vs2017\install\lib
E:\OpenCV4\opencv\build\x64\vc15\lib
E:\protobuf\protobuf-3.4.0\build-vs2017\install\lib
libprotobuf.lib
opencv_world454.lib
ncnn.lib
6、VS2017中生成解决方案
原代码生成绝决方案不成功,我这边会出现如下报错,
这是由于IDE默认不适用sprintf这个旧函数。
解决方法:在yolov5.cpp里的头部加入#pragma warning(disable:4996)
语句即可,添加完之后,重新生成解决方案。
从yolov5.cpp的main函数中我们看到,需要传入检测图片的路径:
项目–属性–调试–命令参数
输入图片路径即可
我们之前检测是获取图片路径,这时我们就注释掉图片路径的读入,直接获取视频输入,然后传给
detect_yolov5(m, objects);
draw_objects(m, objects);
直接将原来main函数里的全部注释掉,替换成如下代码:
cv::VideoCapture capture(0);
cv::Mat frame;
while (true)
{
capture >> frame;
flip(frame, frame, 1);
cv::Mat m = frame;
std::vector<Object> objects;
detect_yolov5(m, objects);
draw_objects(m, objects);
if (cv::waitKey(1) == 'q')
break;
}
capture.release();
还要将draw_objects
函数里的最后一句waitKey(0)改成waitKey(10),不然窗口一直无限停留在第一帧检测帧。
ncnn+opencv+yolov5调用摄像头进行检测 根据这位大佬的文章,自己走了一遍
ncnn + VS2017 + win10 深度学习加速框架环境配置方法,保姆级详细易懂,一文Get