系统 :window 10
cuda:cuda_10.2.89_441.22_win10.exe
cudnn :cudnn-10.2-windows10-x64-v7.6.5.32
vs:VSCodeUserSetup-x64-1.63.2 .exe
首先说明我参考的博客,讲道理按照他的步骤就可以完成opencv+cuda+cudnn的混合编译
为了方便,直接转载别的博客
(109条消息) cmake编译opencv: Win10+cmake3.14.4+cuda10.0+cudnn7.6+opencv-4.0.0+contrib+vs2015_ALainGnOl的博客-CSDN博客_cmake cuda opencvhttps://blog.csdn.net/atpalain_csdn/article/details/90755764讲道理,按他的步骤没问题,一次通过,有时间录个视频记录一下。
//====================================================================
//=======================下便是引用别人===================================
Win10+cmake3.14.4+cuda10.0+cudnn7.6+opencv-4.0.0+contrib+vs2015)
参考资料:
---------------------- 超长文多图预警!!! ----------------------
我下载的软件和库如下图所示:
点击链接:Anaconda3,进入下载页面,注意先选择Windows系统,再点击Download进行下载,如下图所示:
下载完成开始安装软件。其他步骤可以选择默认,直接点击Next>。安装路径也可以使用默认的安装位置(C盘),这里我改在了D盘, 可根据个人喜好选择。
路径选好后,下面这一步,记得把红框部分都勾选上,然后点击Install,等待安装:
安装完成之后,打开cmd命令窗口,输入
python -V
出现
Python 3.7.3 :: Anaconda, Inc.
证明安装成功。
下图我自己安装了3.7.2的版本,所以显示结果稍有差别。
Anaconda3下载安装完毕!
进入cmake 3.14下载页。选择适合个人操作系统的 .msi 文件进行下载,比如我个人的电脑是64位操作系统,选择 cmake-3.14.5-win64-x64.msi ,如下图所示;如果是32位,则选择 cmake-3.14.5-win32-x86.msi 。
下载完成,先把之前安装的旧版本cmake卸载掉,才可安装新版本cmake。(如果电脑已安装cmake,也可尝试不安装新版本,使用旧版本cmake进行编译,也许同样能编译成功)
安装进入下图界面注意选择第三项,添加cmake到系统路径,下面是否创建桌面图标根据个人喜好勾选,选好后点击Next进入下一步。
安装路径根据个人喜好修改,这里我把C盘改成了D盘。如不愿意修改,也可以安装到默认路径C:\Program Files\CMake\。路径修改好后,直接点击Next进入下一步,开始软件安装。
安装完成后出现以下画面,点击Finish,结束安装。
cmake安装完毕!
进入CUDA 10.0下载页。Win10操作系统,可按照下图深绿色部分进行选择;如果非Win10,则根据个人操作系统选择合适的选项。选好后点击下图红色框内的Download进行下载。
下载完成后,打开安装程序。提示将CUDA的安装文件提取到临时文件夹中,提取路径可选择默认(提取到C盘)或自定义,然后点击OK。
等待文件提取:
提取结束,出现NVIDIA程序安装界面:
出现以下画面,AGREE AND CONTINUE点起来。
选择Custom(Advanced),然后NEXT。
这里,全都要,然后NEXT。
这里进入关键一步,选择安装位置,可选择默认或自定义。这些路径在后面配置环境变量的时候需要用到,一定要注意保持一致。比如在这里我都安装在了D盘,之后环境变量也要写D盘的路径。都选好后点击NEXT,开始安装。
等待安装:
安装完成后,NEXT。
然后CLOSE,结束安装。
安装完成,配置系统环境变量。首先确认是否下图的两项环境变量:
将刚才CUDA安装路径添下的相应文件夹添加到Path中,如下图:
验证CUDA是否安装成功。cmd或是PowerShell中输入:
nvcc -V
如正确安装,则会出现以下输出结果:
CUDA安装、配置完成!
点击此链接:cuDNN 7.6,进入下载页。下载前必须登陆NVIDIA账号,如果已有NVIDIA账号,点击Login,进入登陆界面;如果没有账号,则需要注册以后登陆。
登陆界面如下,输入注册好的账号和密码,点击Login进入下载页。
进入下载页面后先勾选同意条款 I Agree To… ,然后选择与cuda版本对应的cuDNN库,我们这里选择第一个 … for CUDA 10.0 ,然后Win10系统选择 cuDNN Library for Windows 10 ,开始下载cuDNN库。
下载完成后解压文件,解压出来的cuda目录下包含如下内容:
接着,我们将以上文件夹中的文件,复制到已安装的cuda文件夹的相应位置下:
请根据个人安装cuda的路径,找到文件复制的位置。如果之前cuda的安装路径为默认路径,则把上面的路径的盘符D:都改为C:即可找到相应路径。
以上文件都复制完以后,将库路径D:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\lib\x64,添加到环境变量中。(同样地,路径需要根据个人情况做相应修改)
点击右下角的Environment Variables环境变量按钮:
双击Path行进入编辑环境变量界面:
右边点击New新建按钮,添加红色方框内的路径:
cuDNN安装、配置完毕!
进入D:\Program Files\NVIDIA Corporation\CUDA Samples\v10.0文件夹,打开Samples_vs2015.sln这个工程:
编译生成1_Utilities中所有的文件。注意红框部分选择Release和x64。
如果编译成功,则可以看到下图提示:
在D:\Program Files\NVIDIA Corporation\CUDA Samples\v10.0\bin\win64\Release中会生成一些应用程序和库文件,我们只需要deviceQuery.exe和bandwidthTest.exe进行验证。
在文件夹空白处Shift+鼠标右键,选择Open PowerShell window here,打开PowerShell
窗口,运行deviceQuery.exe。窗口输入:
.\deviceQuery.exe
显示Result = Pass,表示安装测试成功。
接下来运行bandwidthTest.exe,窗口输入:
.\bandwidthTest.exe
同样的,显示Result = Pass,表示安装测试成功。
VS和CUDA编译测试完毕!
点此链接下载TBB 2019, 下载页面如下图所示:
下载后,根据个人喜好,可将文件解压到任意路径,这里解压到了D:\Program Files目录下,如下图所示:
然后设置环境变量,将D:\Program Files\tbb2019_20190410oss_win\tbb2019_20190410oss\bin\intel64\vc14添加到Path中:
TBB安装、配置完成!
点击以下链接进行下载:
新建一个文件夹,用来存放提取出来的opencv和contrib源码文件,方便后续编译查找和添加路径,这里我们命名为opencv400_source(可根据个人喜好命名):
再新建一个文件夹,作为目标文件夹,编译后的opencv文件将会生成到该目录下,命名为opencv400_CUDA:
打开D:\opencv400_source\opencv_contrib-4.0.0\modules\cudev路径下的CMakeLists.txt文件:
在
set(the_description “CUDA device layer”)
下一行增加
set(OPENCV_SKIP_DLLMAIN_GENERATION ON)
这么做是为了避免后续使用VS2015生成opencv库文件时,出现LNK2019 cv::__termination错误。
打开cmake,设置源码路径D:\opencv400_source\opencv-4.0.0\sources和目标路径D:\opencv400_CUDA,然后点击Configure:
弹出编译环境选择界面,选择Visual Studio 14 2015和x64,然后点击Finish:
接下来进行编译配置:
然后点击Configure。
这时还会出现红色部分,继续进行相应配置:
TBB路径可对照下图进行相应添加。去掉勾选WITH_MATLAB,是为了在之后VS2015编译过程中,避免出现 Error: MEXEXT: Unsupported platform 形式的错误。配置完成点击Configure。
之后出现TBB_VER_FILE的路径配置,已自动填写,检查确认无误,直接点击Configure。
表单全白,说明配置没有问题,点击Generate。
显示Generating done,说明cmake编译opencv顺利完成!
编译生成的文件在目标文件夹D:\opencv400_CUDA下,用VS2015打开OpenCV.sln工程:
先不要急着ALL_BUILD,先生成opencv_core和opencv_cudacodec。如果这两个项目能够通过,我们再全部生成;如果报错,说明之前的cmake编译有问题,根据错误提示进行相应的查找和分析,这样可以节省大量的时间。
生成顺序如下图所示:
opencv_core生成成功:
opencv_cudacodec生成成功:
接下来开始ALL_BUILD,生成过程相当漫长,可以该干嘛干嘛去。完事回来,蹦出以下错误:
该错误提示链接失败,无法打开opencv_cudabgsegm和opencv_cudaobjdetect的库文件。接下来我们单独对这两个项目重新生成:
喜闻乐见,opencv_cudabgsegm生成成功:
opencv_cudaobjdetect也同样生成成功:
这时,我们可以在D:\opencv400_CUDA\lib\Debug目录下,确认生成相应的.lib文件:
重新ALL_BUILD,坐等结果。。。
编译的过程中可能出现一下三个问题:
如果遇到boostdesc和vgg的问题,可参考
fatal error: boostdesc_bgm.i: vgg_generated_80. vgg_generated_120.i没有那个文件或目录文章中提到的办法解决。所需文件下载地址:boostdesc,vgg。
将解压缩后的文件放到opencv_contrib/modules/xfeatures2d/src目录下,用Cmake重新配置一遍,然后重复以上操作即可。
如果遇到 “features2d/test/test_detectors_regression.impl.hpp”: No such file or directory的问题,可参考VS2015+OpenCV4.1.1拓展模块配置主要错误解决方案中提到的方法解决。
如果遇到 error LNK1104: 无法打开文件“python37_d.lib” 的问题,可参考编译OpenCV缺少python27_d.lib的解决方法的方法来解决。
生成成功!没有报错!
这就预示着之后生成INSTALL项目一路坦途一马平川,该填的坑都填平了,可以哼着小曲小嗨一会儿。
鼠标轻轻一抖,INSTALL生成起来。果不其然,生成得舒心又顺畅:
install文件夹下,出现了相当亲切的文件目录:bin、include和x64\vc14\lib,接下来大家知道该怎么做了。
配置编译好的opencv。
首先配置环境变量,在Path中添加D:\opencv400_CUDA\install\x64\vc14\bin,注销或重启电脑使其生效:
接下来配置VS项目属性。
新建一个控制台应用程序,在项目名称上右键,然后点击 Properties(属性):
在 VC++ Directories 中添加 Include Directories 和 Library Directories:
Include Directories 中添加以下两个路径:
D:\opencv400_CUDA\install\include\opencv2
D:\opencv400_CUDA\install\include
Library Directories中添加以下路径:
D:\opencv400_CUDA\install\x64\vc14\lib
接下来要输入附加依赖项,就是在 Linker – Input – Additional Dependencies 里面,把生成的所有 .lib的文件名都写上。
下面是一个比较便捷的操作,以生成debug的库名称为例。在 D:\opencv400_CUDA\install\x64\vc14\lib 文件夹空白处Shift+鼠标右键,点击 Open PowerShell window here,打开PowerShell命令窗口。
输入以下命令行:
dir *d.lib -Name >debug_lib.txt
在文件夹中会生成一个名为 debug_lib.txt 的文本文件,里面包含了所有debug版本的库文件名,如下图所示:
Ctrl+A选中全部文本,将所有文件名复制粘贴到 Additional Dependencies 的文本框中,点击OK:
到这里,opencv配置完成!
接下来要做的就是测试刚才编译生成的opencv库,看看是否可以正常使用GPU加速。
找到 D:\opencv400_source\opencv-4.0.0\sources\samples\cpp\tutorial_code\gpu\gpu-basics-similarity 文件夹下的 gpu-basics-similarity.cpp 文件:
把该文件中的内容复制到刚才配置好opencv的测试工程中,注意选择x64的Debug版本,然后在项目名称上右键,点击Build(生成):
项目顺利生成:
到此,opencv编译和测试全部完成!!!
用GPU尽情加速吧,少年!!!
如果你想把这个例程跑起来,就需要对上面的代码做一定的修改。不难,有兴趣的朋友可以自己尝试。
将下图作为输入图像:
将原图缩小5分之一再放大回原尺寸的图像,作为待测图像,如下图所示:
运行结束,将会得到CPU和GPU运算时间对比,以及图像质量评价结果,如下图所示:
Mission completed! Well done, Boy!