OpenCV 4.1.0 + contrib + Win 10 + CUDA 10.1 + Cudnn 7_1 环境配置

作者 : 开心源码 本文共6824个字,预计阅读时间需要18分钟 发布时间: 2022-05-13 共212人阅读

第一篇在简书的记录,主要是记录自己屡次配置opencv的血泪教训和经验。

安装配置库的路永远都是开头难的,我看了很多很多个教程,其中有少量是对没有什么编译经验的人十分友好的,平常由于不怎样接触C++这些语言所以手动编译就抓狂,写下此篇记录成长~

我的系统是win10 64位的,1050TI 之前已经安装了CUDA和Cudnn,这次主要想配置一个支持cuda加速的opencv,一开始安的是最新版4.2.0+对应contrib,用过VS 2015 /2015 blend /VS 2019 安装过每次都是老长时间了,最后一大堆报错,看着就揪心,最后把所有opencv删了下了4.1.0从头配置,才搞定的…都是泪啊(假如是python的直接pip install opencv-python就能自动安装了,只不过用不了cuda加速,c++源码配置可以参考下下面大佬们的教程)。

  1. win10+anaconda3环境下安装opencv+opencv-contrib 4.2.0

  2. opencv4.2.0 源码编译,win7+VS2015,DNN模块支持cuda加速

  3. windows下详细配置VS2019+CUDA10.1+tensorflow2.0+tbb+gpu支持的opencv4.2.0(with_cuda)编译全过程

  4. python 下 CMake 安装配置 OPENCV 4.1.1的方法

  5. Windows系统下OpenCV+Contrib+CUDA配置(VS2017+OpenCV3.4.3+CUDA10.0)

  6. win10下编译opencv4.1.2,opencv_contrib for java

  7. Windows10+VS2017+cmake 编译opencv4.1 + opencv_contrib(含cuda)

  8. OpenCV 3 – 编译更强大的OpenCV(三) – BUG与崩溃齐飞

推荐大家去看B站贾志刚老师的OpenCV课程【传送门】,比较干货,个人感觉十分有用,走投无路的最后就是根据视频中的方法做的,而后居然即可以了。接下来是我自己在配置CUDA Opencv 4.1.0时的详细过程和所遇到的问题。小白友好!

一、前期准备工作

1.先给电脑连好网,有梯子的也要放好,这样下载某些文件不会出错,但没有也不要紧,也有对策。

2.假如安装了Anaconda是默认到base环境里的,这个可以在configure的时候改,确认一下自己的anaconda安在什么位置了(假如你有虚拟环境看下envs的路径)哦对,假如不打算用python的话如同一般也不用~。

3.重要的是看一下自己是不是有英伟达独显,并且搞清楚型号。例如我这个是GTX 1050Ti笔记本的显卡,可以通过 设施管理器 或者者 驱动xx 鲁大师之类的查看。

二、整个过程

1.下载opencv和contrib扩展包源码

去opencv官网 ,点击上方Release 寻觅OpenCV-4.1.0(新的版本可能不稳固或者者对设施有些要求,建议新的不行就换以往稳固的版本),选择Windows版本进入下载。

或者者上github ,点击release 找相应版本下载

下载opencv-contrib对应版zip本 (肯定要和上面的版本一致)

2.cuda和cudnn的下载和配置

上面列出来的的教程里面都有详细详情以及配置方法,这个我是之前就安好了,这次就不写了,有硬件条件、有耐心就肯定能安上的。具体可以参考B站贾志刚老师的OpenCV课程【传送门】

3.下载安装cmake

下载安装msi版的cmake工具 地址 ,我用的是3.16版,也是不要用太新的,还是稳固为上具体介绍可参考 win10 安装 cmake环境。一会编译OpenCV要用到的是cmake-gui.exe。

———————–接下来就是具体配置opencv的过程了———————–

4.解压opencv源码和contrib源码,可以放到不同位置,但没必要。

5.打开cmake gui.exe,在前面两行输入解压的opencv目录下的sources,其中build路径最好不要覆盖原来的build,可以另外建立一个cudabuild用来cmake。

而后点击下方的Configure,出现提醒build路径不存在能否创立,点Yes就可。

在弹出的对话框选择Visual studio 14 2015(注14是2015,15是2017,16是2019),下方选择x64,而后点击Finish,开始cmake。【注,第一次configure】

image

而后会在下方生成一堆输出信息,这时候常常遇到错误,下面是几个我遇到的情况:

(1)cmake/OpenCVDetectPython.cmake 275(find python)

假如你是python3的一般会出现这种错误,提醒python2的没有找到,这个错误可以忽略。

(2)download ippicv或者者ffmpeg文件时超时

可能因为网络问题,无法正常下载,那么你需要手动下载之后放到指定位置再cmake,附地址【百度网盘】密码:an82

ippicv_2019_win_intel64_20180723_general.zip

opencv_ffmpeg.dll

opencv_ffmpeg_64.dll

附加contrib可能用到人脸特征的部分文件xfeature2d

4.2.0及以后还会用到:

opencv_videoio_ffmpeg_64.dll

opencv_videoio_ffmpeg.dll

face_landmark_model.dat

而后放到.cache里面对应文件夹位置上

如果由于下载问题configure失败之后,把上述手动下载的文件放到对应文件夹中,替换原来的文件,而后再重新编译就可(后面几次configure出现download失败的时候也这么做)。

6.勾选WITH_CUDA等项目再次编译

而后进行进行选项的选择而后再进行configure,搜索cuda,勾选STUBS和WITH_CUDA的选项,而后搜索extra,填上contrib里modules文件夹路径,而后根据自己情况选择勾选不勾选test相关的、python支持、matlab支持以及多线程Tbb的选项,去掉少量待会VS里build会快少量,但我这里没有额外操作,其余都是默认的。

设置完毕之后进行configure。【第二次configure】

7.生成

上一步完毕之后还有一部分是红色的,搜索cuda,再勾选cuda_fast_math,检查cuda路径以及算力cuda_arch_bin,这个为了避免出错都默认就可,注意有时候4.1.0以后的对显卡算力有要求会提醒错误,把CUDA_ARCH_BIN去掉5.3以前的数字就可,你也可以在知道自己显卡算力的情况下填写自己对应的那个,还能起到节约时间的作用,而后进行generate生成。

而后得到信息configure done ,generate done即完成cmake阶段。假如在configure或者者generate阶段出错则会报什么什么invaild的,可能是你extra那步modules路径写错了,一般把 \ 改成 / 就行了。

8.进入VS 2015生成

首先打开opencv/cudabuild目录(也就是上部configure/generate的目录)而后找到OpenCV.sln处理方案,而后以管理员身份打开VS 2015,而后再打开OpenCV.sln。一开始会有一段时间的加载过程,这个阶段耐心等待,不要上来就生成很容易死机的。

加载完成之后,其余保持默认就可,(有的教程讲到用Release x64)我这里只是在笔记本上实验运行因而保持了Debug x64,右键ALL_BUILD点击生成,而后就是漫长的等待。。。

在VS 2015中对工程进行build编译,这一步最漫长,从一个小时到五六个小时不等,你可以后端让他慢慢解决,或者者睡一觉。解决完成之后找到INSTALL右键生成就行了。

这一步我们可以到opencv build目录下找到生成的install/x64/vc14/lib和dll看一下是不是都有了62个lib静态,65个dll动态。假如都没问题那么就基本宣告配置完成了。

这里插播一下我遇到的各种问题吧,为后来人排一下坑:

(1)版本问题。最一开始的不成功时,我用的4.2.0版本,默认打开的vs2015 blend编译,按照少量教程说的建议使用Release x64进行生成,结果中间出现了一堆警告,后来还有少量fatal error,最后出现了几百个生成失败,气得跺脚,无能狂怒。后来冷静一会,继续使用4.2.0版本从解压源码开始,但是使用了是VS 2019,并且使用了Debug、Release两个模式来批生成ALL_BUILD和INSTALL,时间长是一定的了,电脑解决了一晚上一通宵,这个继续出现问题故障,最后失败143个,INSTALL失败,我: @#$%^&*。没办法最新版本的确有很多新功但是用不了啊,于是就用了一个比较不新的4.1.0来编译cuda,最后才成功。

image

(2)VS生成阶段可能遇到的问题

这里出现一大堆warning是正常的,可以忽略,只需不出现error即可以,最常见的问题如:

warning : field of class type without a DLL interface used in a class with a DLL interface

warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失

warning C4702: 无法访问的代码

warning C4244: “=”: 从“float”转换到“unsigned short”,可能丢失数据

warning C4505: “__float2half_rz”: 未引用的本地函数已移除

还有一点,假如你都是用的默认的话安装配置完的空间会比较大,肯定要找空间足的盘不然就会报错,而后就白等半天。我这个是吧两个源文件和最终的编译文件夹放在一起了,除了提到的都用的默认设置,总共需要24GB空间。

此外假如失败的没有那么多,可以在处理方案管理器中直接对提醒生成失败的项目重新生成。

9.配置的最后一步,非常重要的一步就是配置环境变量!

编辑系统环境变量中的Path,写入对应的路径确定就可。假如你不需要进行cuda配置,可以直接在源解压之后的build文件夹中找到\x64\vc14\bin这个目录,把他增加到环境变量中去,这即可以使用无cuda版的opencv了。这一步完成之后需要将电脑重启一下生效(注销也可)

10.工程文件配置

在正式使用之前,需要对每个使用opencv的工程进行设置才能调用。具体步骤如下:

(1)在 视图 – 其余窗口 – 属性管理器,而后右键Debug模式下的Microsoft.Cpp.x64.user 属性,

把opencv的include目录和lib增加进去

包含include目录增加两个

库目录增加对应lib文件夹

链接器 – 附加依赖项 输入lib文件夹下的所有.lib文件名(不要放cmake文件),而后确定就可。可以使用脚本python来获取所有文件信息

4.1.0对应的文件名如下,可以直接拷贝进去

opencv_aruco410d.libopencv_bgsegm410d.libopencv_bioinspired410d.libopencv_calib3d410d.libopencv_ccalib410d.libopencv_core410d.libopencv_cudaarithm410d.libopencv_cudabgsegm410d.libopencv_cudacodec410d.libopencv_cudafeatures2d410d.libopencv_cudafilters410d.libopencv_cudaimgproc410d.libopencv_cudalegacy410d.libopencv_cudaobjdetect410d.libopencv_cudaoptflow410d.libopencv_cudastereo410d.libopencv_cudawarping410d.libopencv_cudev410d.libopencv_datasets410d.libopencv_dnn410d.libopencv_dnn_objdetect410d.libopencv_dpm410d.libopencv_face410d.libopencv_features2d410d.libopencv_flann410d.libopencv_fuzzy410d.libopencv_gapi410d.libopencv_hdf410d.libopencv_hfs410d.libopencv_highgui410d.libopencv_igcodecs410d.libopencv_imgproc410d.libopencv_img_hash410d.libopencv_line_descriptor410d.libopencv_ml410d.libopencv_objdetect410d.libopencv_optflow410d.libopencv_phase_unwrapping410d.libopencv_photo410d.libopencv_plot410d.libopencv_quality410d.libopencv_reg410d.libopencv_rgbd410d.libopencv_saliency410d.libopencv_shape410d.libopencv_stereo410d.libopencv_stitching410d.libopencv_structured_light410d.libopencv_superres410d.libopencv_surface_matching410d.libopencv_text410d.libopencv_tracking410d.libopencv_video410d.libopencv_videoio410d.libopencv_videostab410d.libopencv_xfeatures2d410d.libopencv_ximgproc410d.libopencv_xobjdetect410d.libopencv_xphoto410d.lib

假如你是其余版本的,那么可以用下面的python代码来输出文件名,注意去掉cmake的文件,只留.lib文件
测试代码如下:

import ospath ="G:\opencv4\opencv\cudabuild\install/x64/vc14\lib" #替换成自己的路径dirs =os.listdir(path)for f in dirs:   if os.path.isfile(os.path.join(path,f)):      print(f)

至此,opencv cuda版编译告一段落。

但要想使用opencv,还需要在实际工程中进行相关设置才能正常使用。

三、测试

#include <opencv2\opencv.hpp>#include <iostream>using namespace std;using namespace cv;using namespace cv::cuda;int main(){    /*-------------------------以下四种验证方式任意选取一种就可-------------------------*/    //获取显卡简单信息1    //cuda::printShortCudaDeviceInfo(cuda::getDevice());  //有显卡信息表示GPU模块配置成功    //获取显卡详细信息2    cuda::printCudaDeviceInfo(cuda::getDevice());  //有显卡信息表示GPU模块配置成功    //获取显卡设施数量3    //int Device_Num = cuda::getCudaEnabledDeviceCount();    //cout << Device_Num << endl;  //返回值大于0表示GPU模块配置成功    //获取显卡设施状态4    //cuda::DeviceInfo Device_State;    //bool Device_OK = Device_State.isCompatible();    //cout << "Device_State: " << Device_OK << endl;  //返回值大于0表示GPU模块配置成功    system("pause");    return 0;}

假如返回显卡信息则说明cuda配置成功

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » OpenCV 4.1.0 + contrib + Win 10 + CUDA 10.1 + Cudnn 7_1 环境配置

发表回复