Windows系统下OpenCV+Contrib配置 实现深度学习目标检测

本文主要是介绍Windows系统下OpenCV+Contrib配置 实现深度学习目标检测,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

OpenCV是一个非常强大的计算机视觉库,特别是进入3.X时代以后,它抛弃了整体统一架构,采用内核+插件的架构形式,使得主体更加稳定,附加的库更加灵活多变。
目前的OpenCV3分为稳定的核心功能库和contrib库(包含了特征匹配等)。OpenCV3.3以后,contrib库中的dnn模块支持caffe、TensorFlow和torch三种深度学习框架,可以直接读取已经训练好的模型完成相应的检测任务。
因此,需要通过Cmake对OpenCV和Contrib库进行编译。

step1 运行环境和前期准备

笔者使用的环境和准备如下:

1、Windows 10 64位

2、Visual Studio 2017 Professional
https://visualstudio.microsoft.com/zh-hans/downloads/
建议使用VS2015及以上版本 (VS2015—vc14 VS2017—vc15)
因为OpenCV3.3及以后的版本直接下载进行解压后不支持vc12(VS2013)版本的配置,需要使用Cmake自己编译出vc12的文件再进行配置。
如果实在需要使用VS 2013配置OpenCV3.3的话,可以参考下面的文章:https://www.cnblogs.com/lifeofershisui/p/7445062.html

3、Cmake 3.13.0
https://cmake.org/download/
可以在上述网站中根据自己的需要选择版本进行下载
笔者下载的是cmake-3.13.0-rc1-win64-x64.msi

4、OpenCV 3.4.3
https://opencv.org/releases.html
可以在上述网站中根据自己的需要选择版本进行下载
3.3及以后的版本都支持深度学习

5、OpenCV Contrib 3.4.3
https://github.com/opencv/opencv_contrib/releases
建议选择与自己OpenCV版本相同的Contrib库,下载ZIP格式即可
笔者第一次下载的版本不对应导致Cmake编译出错,踩了个坑。

step2 编译OpenCV和Contrib库

笔者配置的过程参考了一些文章:
https://www.cnblogs.com/jliangqiu2016/p/5597501.html
https://blog.csdn.net/guyubit/article/details/51994171
总体配置过程还算顺利,除了在Contrib库的版本那里踩了个坑。

1、
安装完Cmake后打开gui界面,对OpenCV源码进行编译。
source code是OpenCV源码目录,build binaries是编译后生成文件的输出目录,需要自己提前建一个文件夹:
上面的是在这里插入图片描述

点击configure弹出选择对应的VS版本,选择自己使用的版本就可以,注意是否为x64:
在这里插入图片描述

2、
点击finish后等待第一次configure done。之后我们需要将额外的opencv_contrib加到工程中进行第二次编译,在配置表中找到“OPENCV_EXTRA_MODULES_PATH”,设置其参数值为open_contrib源码包中的modules目录,我的目录是“D:\OpenCV343\opencv\tools\opencv_contrib-3.4.3\modules”。
设置完成后再次点击configure,不报错的话点击generate,generate的速度比较快。

3、
编译完成后直接点击open project或者到编译输出目录下找到OpenCV.sln使用自己的VS打开此解决方案:
在这里插入图片描述

打开解决方案后在x64 debug下重新生成解决方案:
在这里插入图片描述
不配置CUDA的情况下重新生成解决方案的速度还是很快的,大概十几分钟就能完成了。

接着找到CMakeTargets中的INSTALL,然后右键选择“仅用于项目”–>“仅生成INSTALL”:
在这里插入图片描述
生成结束后,在编译输出目录下会多一个install目录,打开发现里面的内容与下载下来的OpenCV很类似,只要按照之前的配置方法,新建解决方案后在属性管理器中把包含目录、库目录和附加依赖项配置好就可以使用这个Contrib库了。
在这里插入图片描述
包含目录:
D:\OpenCV343\opencv\tools\opencv_contrib\install\include
D:\OpenCV343\opencv\tools\opencv_contrib\install\include\opencv
D:\OpenCV343\opencv\tools\opencv_contrib\install\include\opencv2

库目录:
D:\OpenCV343\opencv\tools\opencv_contrib\install\x64\vc15\lib

附加依赖项:
opencv_aruco343.lib
opencv_bgsegm343.lib
opencv_bioinspired343.lib
opencv_calib3d343.lib
opencv_ccalib343.lib
opencv_core343.lib
opencv_datasets343.lib
opencv_dnn343.lib
opencv_dpm343.lib
opencv_face343.lib
opencv_features2d343.lib
opencv_flann343.lib
opencv_fuzzy343.lib
opencv_highgui343.lib
opencv_imgcodecs343.lib
opencv_imgproc343.lib
opencv_line_descriptor343.lib
opencv_ml343.lib
opencv_objdetect343.lib
opencv_optflow343.lib
opencv_photo343.lib
opencv_plot343.lib
opencv_reg343.lib
opencv_rgbd343.lib
opencv_saliency343.lib
opencv_shape343.lib
opencv_stereo343.lib
opencv_stitching343.lib
opencv_structured_light343.lib
opencv_superres343.lib
opencv_surface_matching343.lib
opencv_text343.lib
opencv_tracking343.lib
opencv_ts343.lib
opencv_video343.lib
opencv_videoio343.lib
opencv_videostab343.lib
opencv_xfeatures2d343.lib
opencv_ximgproc343.lib
opencv_xobjdetect343.lib
opencv_xphoto343.lib

step3 深度学习模型下载及调用

深度学习目标检测主要用到的方法有SSD、SSD_MOBILENET和YOLO。
三种方法的一些区别参考以下文章:
https://www.sohu.com/a/195905376_823210
SSD论文中文版:
http://lib.csdn.net/article/deeplearning/57860

这里可以下载到已经训练好的模型(SSD):
models_VGGNet_VOC0712_SSD_300x300.tar.gz
包含:
VGG_VOC0712_SSD_300x300_iter_120000.caffemodel
deploy.prototxt
https://github.com/weiliu89/caffe/tree/ssd#models

这里可以下载到SSD_MOBILENET的模型:
mobilenet_iter_73000.caffemodel
deploy.prototxt
https://github.com/chuanqi305/MobileNet-SSD

YOLO的官方实例及使用方法:
https://github.com/AlexeyAB/darknet
https://blog.csdn.net/baidu_36669549/article/details/79798587
OpenCV中使用YOLO的实例:(放在自己的百度云上了,有测试视频、模型和原代码)
链接:https://pan.baidu.com/s/1dOWk9Rw5NpRVCwgHi0xjPg
提取码:4qdm

这里可以找到三种方法的示例代码:
ssd_object_detection.cpp
ssd_mobilenet_object_detection.cpp
yolo_object_detection.cpp
https://github.com/opencv/opencv/tree/3.4.1/samples/dnn

示例

找到示例代码中的以下部分,在两个竖线中间将proto和model加入自己下载的模型文件名,video改成自己的视频名或者图片名。

const char* params= "{ help           | false | print usage         }""{ proto          |       | model configuration }"  //这里加上自己的deploy.prototxt"{ model          |       | model weights       }"  //这里加上自己的*.caffemodel"{ camera_device  | 0     | camera device number}""{ video          |       | video or image for detection}""{ min_confidence | 0.5   | min confidence      }";

这是用YOLO跑出来的图片和视频效果图:
在这里插入图片描述
在这里插入图片描述

总结

使用深度学习实现对目标检测总体来说准确度还可以,但是跑视频速度较慢,可能需要使用gpu加速,这一块笔者还在探索中。

本文还参考了以下文章:
https://blog.csdn.net/maweifei/article/details/81045281
https://blog.csdn.net/hunzhangzui9837/article/details/82837873

Juliet 于 2018.11

这篇关于Windows系统下OpenCV+Contrib配置 实现深度学习目标检测的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/679974

相关文章

深度解析Java DTO(最新推荐)

《深度解析JavaDTO(最新推荐)》DTO(DataTransferObject)是一种用于在不同层(如Controller层、Service层)之间传输数据的对象设计模式,其核心目的是封装数据,... 目录一、什么是DTO?DTO的核心特点:二、为什么需要DTO?(对比Entity)三、实际应用场景解析

关于集合与数组转换实现方法

《关于集合与数组转换实现方法》:本文主要介绍关于集合与数组转换实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、Arrays.asList()1.1、方法作用1.2、内部实现1.3、修改元素的影响1.4、注意事项2、list.toArray()2.1、方

深度解析Java项目中包和包之间的联系

《深度解析Java项目中包和包之间的联系》文章浏览阅读850次,点赞13次,收藏8次。本文详细介绍了Java分层架构中的几个关键包:DTO、Controller、Service和Mapper。_jav... 目录前言一、各大包1.DTO1.1、DTO的核心用途1.2. DTO与实体类(Entity)的区别1

使用Python实现可恢复式多线程下载器

《使用Python实现可恢复式多线程下载器》在数字时代,大文件下载已成为日常操作,本文将手把手教你用Python打造专业级下载器,实现断点续传,多线程加速,速度限制等功能,感兴趣的小伙伴可以了解下... 目录一、智能续传:从崩溃边缘抢救进度二、多线程加速:榨干网络带宽三、速度控制:做网络的好邻居四、终端交互

java实现docker镜像上传到harbor仓库的方式

《java实现docker镜像上传到harbor仓库的方式》:本文主要介绍java实现docker镜像上传到harbor仓库的方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 前 言2. 编写工具类2.1 引入依赖包2.2 使用当前服务器的docker环境推送镜像2.2

C++20管道运算符的实现示例

《C++20管道运算符的实现示例》本文简要介绍C++20管道运算符的使用与实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录标准库的管道运算符使用自己实现类似的管道运算符我们不打算介绍太多,因为它实际属于c++20最为重要的

Java easyExcel实现导入多sheet的Excel

《JavaeasyExcel实现导入多sheet的Excel》这篇文章主要为大家详细介绍了如何使用JavaeasyExcel实现导入多sheet的Excel,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录1.官网2.Excel样式3.代码1.官网easyExcel官网2.Excel样式3.代码

Linux中SSH服务配置的全面指南

《Linux中SSH服务配置的全面指南》作为网络安全工程师,SSH(SecureShell)服务的安全配置是我们日常工作中不可忽视的重要环节,本文将从基础配置到高级安全加固,全面解析SSH服务的各项参... 目录概述基础配置详解端口与监听设置主机密钥配置认证机制强化禁用密码认证禁止root直接登录实现双因素

python实现对数据公钥加密与私钥解密

《python实现对数据公钥加密与私钥解密》这篇文章主要为大家详细介绍了如何使用python实现对数据公钥加密与私钥解密,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录公钥私钥的生成使用公钥加密使用私钥解密公钥私钥的生成这一部分,使用python生成公钥与私钥,然后保存在两个文

浏览器插件cursor实现自动注册、续杯的详细过程

《浏览器插件cursor实现自动注册、续杯的详细过程》Cursor简易注册助手脚本通过自动化邮箱填写和验证码获取流程,大大简化了Cursor的注册过程,它不仅提高了注册效率,还通过友好的用户界面和详细... 目录前言功能概述使用方法安装脚本使用流程邮箱输入页面验证码页面实战演示技术实现核心功能实现1. 随机