ncnn opencv VS2017 window10 yolov5调用摄像头实时目标检测

Contents

  • 环境下载、编译
      • 1 OpenCV-4.5.4下载、配置
      • 2 CMake下载安装、配置
      • 3 下载、编译protobuf-3.4.0
      • 4 下载、编译ncnn
  • VS2017新建项目--编译yolov5
  • 输入图片测试检测效果
  • 调用本地摄像头,实时检测
  • 参考知乎、博客文章


OpenCV + NCNN 在VS2017调用yolov5记录
根据ncnn+opencv+yolov5调用摄像头进行检测这位博主的文章自己走了一遍,记录一下,防忘记!!!


环境下载、编译

1 OpenCV-4.5.4下载、配置

OpenCV-4.5.4下载地址:
链接:https://pan.baidu.com/s/1gzdkrbNWX1urmTIf5X2TOA?pwd=9u82
提取码:9u82

下载后解压exe文件,将解压后目录里的以下红框中的路径添加到电脑环境系统变量里
ncnn opencv VS2017 window10 yolov5调用摄像头实时目标检测_第1张图片


2 CMake下载安装、配置

这里默认已经安装配置了VS2017


cmake-3.24.0下载地址如下:cmake下载入口
ncnn opencv VS2017 window10 yolov5调用摄像头实时目标检测_第2张图片
下载.zip文件后解压即可(这里不用安装cmake软件,如果要安装软件,可以下载上图中的.msi文件进行安装),打开解压文件找到bin文件,然后将该绝对路径 \bin添加到电脑环境变量(系统变量)
ncnn opencv VS2017 window10 yolov5调用摄像头实时目标检测_第3张图片


3 下载、编译protobuf-3.4.0

1、protobuf-3.4.0下载地址:protobuf下载入口
2、同样下载后解压即可(记住解压后的存放位置)
3、接着打开VS2017的x64命令行
ncnn opencv VS2017 window10 yolov5调用摄像头实时目标检测_第4张图片
ncnn opencv VS2017 window10 yolov5调用摄像头实时目标检测_第5张图片
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文件,包含如下:
ncnn opencv VS2017 window10 yolov5调用摄像头实时目标检测_第6张图片


4 下载、编译ncnn

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文件如下:

ncnn opencv VS2017 window10 yolov5调用摄像头实时目标检测_第7张图片


VS2017新建项目–编译yolov5

1、先新建一个空项目,命名为yolov5
ncnn opencv VS2017 window10 yolov5调用摄像头实时目标检测_第8张图片
2、下载yolov5s_6.0.bin和yolov5s_6.0.param两个权重文件 下载入口
将两个下载的文件存放于VS2017刚新建的项目的yolov5_test文件夹下,确保这两个文件和后面的.cpp文件在同一目录下
ncnn opencv VS2017 window10 yolov5调用摄像头实时目标检测_第9张图片

3、在VS项目中新建一个.cpp源文件
ncnn opencv VS2017 window10 yolov5调用摄像头实时目标检测_第10张图片
ncnn opencv VS2017 window10 yolov5调用摄像头实时目标检测_第11张图片
4、复制如下链接yolov5.cpp中的代码,粘贴到刚创建的.cpp文件里。
5、添加cpp所需要的依赖项(头文件、依赖库、链接输入)
如未正确添加依赖库,头文件会出现如下报错
ncnn opencv VS2017 window10 yolov5调用摄像头实时目标检测_第12张图片
添加开始:
(1)右键->属性
ncnn opencv VS2017 window10 yolov5调用摄像头实时目标检测_第13张图片
(2)选择release x64平台, VC++目录 -> 包含目录
ncnn opencv VS2017 window10 yolov5调用摄像头实时目标检测_第14张图片
ncnn opencv VS2017 window10 yolov5调用摄像头实时目标检测_第15张图片
在包含目录中逐一浏览找到下面所示的目录,添加到包含目录中去

包含目录:
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

ncnn opencv VS2017 window10 yolov5调用摄像头实时目标检测_第16张图片
(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

ncnn opencv VS2017 window10 yolov5调用摄像头实时目标检测_第17张图片

(4)、链接器->输入->附加依赖项
ncnn opencv VS2017 window10 yolov5调用摄像头实时目标检测_第18张图片
输入如下依赖项

libprotobuf.lib
opencv_world454.lib
ncnn.lib

ncnn opencv VS2017 window10 yolov5调用摄像头实时目标检测_第19张图片
6、VS2017中生成解决方案
原代码生成绝决方案不成功,我这边会出现如下报错,
ncnn opencv VS2017 window10 yolov5调用摄像头实时目标检测_第20张图片
这是由于IDE默认不适用sprintf这个旧函数。
解决方法:在yolov5.cpp里的头部加入#pragma warning(disable:4996)语句即可,添加完之后,重新生成解决方案。


到这里环境都配置完毕了,项目文件夹内容如下:
ncnn opencv VS2017 window10 yolov5调用摄像头实时目标检测_第21张图片
ncnn opencv VS2017 window10 yolov5调用摄像头实时目标检测_第22张图片


输入图片测试检测效果

ncnn opencv VS2017 window10 yolov5调用摄像头实时目标检测_第23张图片
从yolov5.cpp的main函数中我们看到,需要传入检测图片的路径:
项目–属性–调试–命令参数
ncnn opencv VS2017 window10 yolov5调用摄像头实时目标检测_第24张图片
输入图片路径即可


点击运行,结果如下
ncnn opencv VS2017 window10 yolov5调用摄像头实时目标检测_第25张图片


调用本地摄像头,实时检测

我们之前检测是获取图片路径,这时我们就注释掉图片路径的读入,直接获取视频输入,然后传给

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 VS2017 window10 yolov5调用摄像头实时目标检测_第26张图片


实时检测效果如下:
ncnn opencv VS2017 window10 yolov5调用摄像头实时目标检测_第27张图片

参考知乎、博客文章

ncnn+opencv+yolov5调用摄像头进行检测 根据这位大佬的文章,自己走了一遍

ncnn + VS2017 + win10 深度学习加速框架环境配置方法,保姆级详细易懂,一文Get

你可能感兴趣的:(ncnn,OpenCV(4.5.2),opencv,目标检测)