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

相关文章

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

Python实现微信自动锁定工具

《Python实现微信自动锁定工具》在数字化办公时代,微信已成为职场沟通的重要工具,但临时离开时忘记锁屏可能导致敏感信息泄露,下面我们就来看看如何使用Python打造一个微信自动锁定工具吧... 目录引言:当微信隐私遇到自动化守护效果展示核心功能全景图技术亮点深度解析1. 无操作检测引擎2. 微信路径智能获

Python中pywin32 常用窗口操作的实现

《Python中pywin32常用窗口操作的实现》本文主要介绍了Python中pywin32常用窗口操作的实现,pywin32主要的作用是供Python开发者快速调用WindowsAPI的一个... 目录获取窗口句柄获取最前端窗口句柄获取指定坐标处的窗口根据窗口的完整标题匹配获取句柄根据窗口的类别匹配获取句

在 Spring Boot 中实现异常处理最佳实践

《在SpringBoot中实现异常处理最佳实践》本文介绍如何在SpringBoot中实现异常处理,涵盖核心概念、实现方法、与先前查询的集成、性能分析、常见问题和最佳实践,感兴趣的朋友一起看看吧... 目录一、Spring Boot 异常处理的背景与核心概念1.1 为什么需要异常处理?1.2 Spring B

SpringBoot3.4配置校验新特性的用法详解

《SpringBoot3.4配置校验新特性的用法详解》SpringBoot3.4对配置校验支持进行了全面升级,这篇文章为大家详细介绍了一下它们的具体使用,文中的示例代码讲解详细,感兴趣的小伙伴可以参考... 目录基本用法示例定义配置类配置 application.yml注入使用嵌套对象与集合元素深度校验开发

Python位移操作和位运算的实现示例

《Python位移操作和位运算的实现示例》本文主要介绍了Python位移操作和位运算的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 位移操作1.1 左移操作 (<<)1.2 右移操作 (>>)注意事项:2. 位运算2.1

如何在 Spring Boot 中实现 FreeMarker 模板

《如何在SpringBoot中实现FreeMarker模板》FreeMarker是一种功能强大、轻量级的模板引擎,用于在Java应用中生成动态文本输出(如HTML、XML、邮件内容等),本文... 目录什么是 FreeMarker 模板?在 Spring Boot 中实现 FreeMarker 模板1. 环

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

SpringMVC 通过ajax 前后端数据交互的实现方法

《SpringMVC通过ajax前后端数据交互的实现方法》:本文主要介绍SpringMVC通过ajax前后端数据交互的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价... 在前端的开发过程中,经常在html页面通过AJAX进行前后端数据的交互,SpringMVC的controll

Spring Security自定义身份认证的实现方法

《SpringSecurity自定义身份认证的实现方法》:本文主要介绍SpringSecurity自定义身份认证的实现方法,下面对SpringSecurity的这三种自定义身份认证进行详细讲解,... 目录1.内存身份认证(1)创建配置类(2)验证内存身份认证2.JDBC身份认证(1)数据准备 (2)配置依