分享好友 最新资讯首页 最新资讯分类 切换频道
编译支持CUDA的Opencv4.2
2024-11-07 21:37

我的环境:Win10+VS2017+Opencv4.2+Cmake3.12.4+GTX 1650+CUDA10.2+cuDNN7.6.5.32

编译支持CUDA的Opencv4.2

  • 1)下载并安装VS2017社区版:https://my.visualstudio.com/Downloads?q=visual%20studio%202017
  • 2)安装CUDA10.2及cuDNN7.6.5.32:Win10+CUDA10.2+CUDNN7.6.5安装_进击的路飞桑的博客-CSDN博客
  • 1)opencv:Releases · opencv/opencv · GitHub(github下载速度慢,可以在CSDN上搜索他人上传的资源
  • 2)opencv_contrib:Releases · opencv/opencv_contrib · GitHub
  • 注意:两者版本必须对应

cmake下载地址:Download | CMake (下载速度过慢,可以在CSDN上搜索他人上传的资源

  • 1)打开cmake,选择opencv源代码路径与存放生成的opencv解决方案的路径(路径不要包含中文,如下图所示。cmake会自动读取源代码路径下的CMakeLists.txt文件,根据文件内容构建项目工程。

  • 2)点击“configure”按钮,第一次点击此按钮会提示我们指定此项目的生成器,选择带有Win64的VS2017,点击完成。(此时会在E:/opencv/OpencvSource路径下自动生成几个cmake相关的文件来保存配置,下次打开cmake时不会提示我们指定生成器,而是自动读取保存的配置,可以通过手动删除文件或者点击CMake左上角的File->Delete Cache,把之前选择的清除掉再重新选择)。然后等待第一次构建完成。

  • 3)在“search”一栏中按关键字搜索一些参数,如下图所示

(1)开启普通模块对GPU的支持,以及DNN模块对GPU的支持,不要勾选BUILD_CUDA_STUBS

(2)指定之前下载好的opencv_contrib模块modules文件所在的位置

(3)把各OpenCV模块编译成一个模块,这样最后生成的只有一个.lib(方便后续进行配置)。但在发行版本中建议按需引入相应模块以减少体积

(4)为了加快后面编译opencv工程的速度,带test、java、python的都不勾选

(5)WITH_INF_ENGIN 这一项是dnn-cpu的加速,需要提前安装openVINO,这里我们暂不勾选

  • 4)再次点击“configure”按钮,等待Cmake构建完成。

(1)Cmake第一次构建需要下载几个文件,第二次构建时由于我们添加了opencv_contrib模块,因此也需要下载几个文件。由于这些文件保存在国外服务器上,因此我们基本都会下载失败。这些文件的缓存路径我们可以通过“Search”查询,如下图所示

按照我们查找的路径打开.cache文件,我们可以发现多个文件夹,任意打开一个可以发现里面缓存了下载失败的文件,如下图所示

其中“opencv_videoio_ffmpeg.dll”为文件名,“5de6044cad9398549e57bc46fc13908d”为MD5,0KB代表下载失败。

(2)Cmake会将这些文件的下载日志保存在CMakeDownloadLog.txt文件中,我们可以在E:/opencv/OpencvSource路径下找到它,内容含义如下图所示

(3)我将构建opencv4.2需要下载的文件都存放在了.cache文件中,并上传到CSDN,需要的朋友可以自行下载。下载完毕后,可以将你需要的文件复制过去。删除原来的CMakeDownloadLog.txt文件,然后再次点击“configure”按钮,两次构建完成后再打开MakeDownloadLog.txt文件,其内容含义如下图所示

(4)文件格式是:MD5-文件名。可以通过如下代码获取文件的MD5,然后核实获取到的MD5与下载文件中的MD5是否一致。一般情况是一致的,这步可以不用操作。

 
  • 5)检查CUDA以及cuDNN配置情况,都为Yes表示配置成功。如果不是Yes就不要编译opencv工程了,浪费时间。

从上图我们可以看出,当前使用的是10.2版本的CUDA。如果需要,我们可以改变编译opencv时的cuda版本,如下图所示

修改CUDA的路径后,需要再次点击“configure”按钮,进行构建。

  • 6)查看Cmake的输出,可以有警告,不能有错误。
  • 7)点击“Generate”按钮,即可生成opencv解决方案的工程文件。我们可以在opencv解决方案的路径下找到OpenCV.sln,双击即可打开该工程。也可直接在cmake中点击“Open Project”按钮打开工程。

打开工程,在菜单栏选择“生成”——“批生成”,选择下图所示的四项,然后点击“生成”此过程大约需要2.5小时

编译完成后,在该工程目录下会生成一个install文件夹,即为我们需要的库文件。

详情请查看VS2015与Opencv4.1配置(win10系统)_进击的路飞桑的博客-CSDN博客

注意:为了配置方便我们可以将旧的opencv库改为别的名字,例如:build_old。然后新建build文件夹,直接将新编译的库拷贝过来,这样以后切换的时候就不用重新配置了,只需要改文件名即可。

  • 1)VS编译Opencv源码时出现如下错误提示
 

问题分析:types.pb.h文件由protobuf更老的版本生成,而本机protobuf是新版本,从而造成版本不兼容问题。

问题查找:按照错误提示打开types.pb.h文件,看到下图所示的一段代码,含义就是其仅支持protobuf3.5.0以及3.5.1版本

此时我们在Cmake的”search“一栏输入”python“,即可发现python的相关环境变量,即链接protobuf库的位置。

然后我们使用cmd打开命令行,输入"protoc --version"或"conda list"查看protobuf的版本,我这里的版本为protobuf3.11.4。

问题解决:使用“conda remove protobuf“命令移除当前库,如果移除失败,可以使用更暴力的方法:直接卸载并重新安装anaconda,这样protobuf就被清除了(不需要安装protobuf) 。

  • 2)之前我安装的VS2015,在Cmake构建阶段出现”Error in configuration process, project files may be invalid.“错误,仔细查看Cmake输出,显示如下错误
 

问题分析:意思就是CMAKE没有找到C与C++编译器,这里的CXX_COMPILER其实就是C++编译器。

问题解决:安装VS2015时一定要勾选Visual C++模块,win10 SDK模块最好也勾选。

  • 3)Cmake构建阶段出现如下错误
 

问题分析:DNN模块不支持低于5.3的GPU算力

问题解决:将CUDA_ARCH_BIN中小于5.3的选项去掉。我们也可以只保留本机GPU的算力,CUDA GPUs - Compute Capability | NVIDIA Developer官网查询本机GPU算力,我的GPU型号为GTX1650,官网上查询不到(暂时不知道为什么,我通过在本机的ubantu系统运行CUDA-Z软件查出算力为:7.5

  • 4编译好的opencv库在其它电脑上使用时,提示找不到“hdf5.dll”文件

虽然不知道出错的原因,但是可以按照如下方式解决此问题:下载或在其它机器上拷贝此文件(anaconda和matlab的安装路径下有这个文件,然后放到C:/windows/system32路径下,即可解决。

参考文章:https://www.jianshu.com/p/5520fdb6dbae?from=singlemessage

                  CMake编译OpenCV - 夕西行 - 博客园

                  Cmake编译-CMAKE_C_COMPILER-NOTFOUND解决_zy2317878的博客-CSDN博客 

                  caffe.pb.h:17:2: error: #error This file was generated by an older version of protoc 问题解决_坎幽黑尔弥?的博客-CSDN博客

                  学习OpenCV3:Cmake编译OpenCV时无法下载ffmpeg、xfeatures2d等文件_北冥有鱼wyh的博客-CSDN博客 

           vs 运行opencv hdf5.dll找不到_追风少年coco的博客-CSDN博客

最新文章
再看快速排序(QuickSort)
      快速排序是一个十分伟大的算法,作为再一次的学习,写一写快排以及和快排相关的问题。 1.基本的快速排序方
阿里伴侣配合阿里巴巴打造全方位线上推广
在当今竞争激烈的电商时代,企业的线上推广至关重要。阿里巴巴作为全球知名的电商平台,为众多企业提供了广阔的发展空间。而阿里
Python大数据分析&人工智能教程 - Scrapy工作原理详解与实操案例
Scrapy是一个开源的、用Python编写的高性能网络爬虫框架,用于抓取网站数据和提取结构性数据。它是基于Twisted异步网络框架构建
AI智能写作助手:一站式解决内容创作、文章润色与高效写作的全面工具
在信息爆炸的时代内容创作已经成为企业、媒体和个人展现自我、传递价值的不可或缺手。面对海量的信息与日益增强的内容品质需求高
你的站点抗压么?推荐一款超方便的开源压测工具
这里是 HelloGitHub 推出的《讲解开源项目》系列,本期介绍一款标星 17.7k 纯 Go 语言实现的 HTTP(S) 压测工具——vegetaVegeta
【系统架构设计】计算机网络
OSI/RM 结构模型 1977年,国际标准化组织为适应网络标准化发展的需求,制定了开放系统互联参考模型(Open System Interconnectio
全世界规模最大战争排名,第一名居然是清朝时期!
自打人类走上进化这条路,就想着法儿想要证明【一伙人就该被另一伙人支配】。古罗马角斗士时代一方有多大势力,就看他有多少人的
python tk随机内容生成器
MyRandom ran=new MyRandom();System.out.println(ran.nextString(1));System.out.println(ran.nextString(50, OnlyNum));System
ai自动写文章在线 在线写文章自动生成器
身为文案工作者,我深感写作之重要且充满挑战。如今,随着人工智能(AI)写作平台的出现,我的写作历程出现了巨大变革。在此,很
AI写系统性综述ChatGPT还远远不够未来百年能否实现
在科学研究的浩瀚海洋中,科研人员时常面临一个棘手的问题:如何有效整合和理解海量的科学文献。尽管网络的普及极大地丰富了文献