软硬件环境
- windows 10 64bit
- nvidia gtx 1070Ti
- opencv 4.2.0-dev
- cuda 10.2
- cudnn 7.6.5.32
- visual studio 2019
视频看这里
前言
本文的目标是在window10
的系统上编译opencv
的最新源码版本(4.2.0),使能cuda
和cudnn
加速。关于cuda
和cudnn
在windows10
上的安装,请参考之前的文章 https://xugaoxiang.com/2019/12/18/windows-10-cuda-cudnn/。
超级详细的图文教程
第一步去下载opencv
和opencv_contrib
的源代码,我们放在一个统一的目录进行管理,比如我这里的C:\xugaoxiang\opencv_cuda
,另外再创建一个vs
文件夹,用来存放编译生成的文件,此时的目录结构
接下来去下载源码
git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git
由于opencv
是基于cmake
进行编译的,为了方便进行cmake
编译参数的设定,我们去下载cmake
并使用cmake-gui
进行配置,下载地址是 https://cmake.org/download/
下载安装完毕后,我们打开cmake-gui
指定好Where is the source code
和Where to build the binaries
的路径,然后点击下方的Configure
按钮
出现了python2
相关的错误,直接忽略,因为根本就没有装,而且版本也快被废弃了。我的python
环境是anaconda
,别忘了设定系统环境变量
接下来由于网络的原因,出现了两个下载的错误,我们放在一起来讲,先看错误提示
一个是ippicv
,另一个是ffmpeg
,我尝试过几次反复下载,都没有成功。所以只能另想办法,根据错误提示,打开文件opencv\3rdparty\ippicv\ippicv.cmake
,找到下载地址
注意到这个链接并不是最终的下载地址,它需要进行拼接,首先找到${IPPICV_COMMIT}
对应的值,然后找到软件压缩包的名称,这两个值都可以在当前的ippicv.cmake
文件中找到
拼接好的最终的文件包下载路径如下
然后将链接的文件下载下来,用浏览器就可以
下载下来的zip
包,还需要做最后一项工作,还是在ippicv.cmake
文件中,找到OPENCV_ICV_HASH
对应的值,然后将下载的zip
包的文件进行重命名,得到1d222685246896fe089f88b8858e4b2f-ippicv_2019_win_intel64_20180723_general.zip
,将此文件拷贝到opencv\.cache\ippicv
下
同样的步骤,我们把ffmpeg
缺失的文件也下载下来,放到相应的目录
继续Configure
,又有文件下载不了,face_landmark_module.dat
,这是个跟人脸识别相关的文件,我们也按照之前的方法手动去下载,然后存放到相应的目录里去
继续进行Configure
,又有错误出现
看提示,是opencv_contrib
的路径没有指定,点击cmake-gui
上的Add Entry
,添加OPENCV_EXTRA_MODULES_PATH
,指向下载好的opencv_contrib
下的modules
文件夹,特别注意,这里的目录分隔符一定要用/
,即使是在windows
上面,如下图所示
由于cuda
安装版本的关系,我们用了最新的10.2
,会出现cuda
某些版本不支持的错误
通过grep
工具,我们找到变量CUDA_ARCH_BIN
是在vs/CMakeCache.txt
中定义,我们直接修改这个文件中的值,去掉小的版本号
由于cmake-gui
缓存的原因,我们还需要在cmake-gui
中修改CUDA_ARCH_BIN
的值
后面就比较顺利了,直至Configure
成功
到这里,就可以去生成visual studio
的工程了,点击cmake-gui
上的Generate
接着,来到vs
文件夹,用visual studio 2019
打开文件OpenCV.sln
,在右侧解决方案里的CMakeTargets
下的INSTALL
,右键选择生成
正式开始编译安装,等待一段时间,这里我跑了接近2个小时,取决于你的电脑性能
最后来到opencv
安装路径查看
可以看到生成了跟cuda
相关的dll
!
小结
在整个编译安装的过程中,出现了多次的软件包下载不成功的问题,这个网络环境造成的,只能另想办法。要想成功,必须足够耐心。编译好的opencv
库文件到底怎么用?我们后面继续。