美文网首页程序员
OpenCV 4.1.0 + contrib + Win 10

OpenCV 4.1.0 + contrib + Win 10

作者: 陈年小白 | 来源:发表于2020-04-04 23:35 被阅读0次

    第一篇在简书的记录,主要是记录自己多次配置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.lib
    opencv_bgsegm410d.lib
    opencv_bioinspired410d.lib
    opencv_calib3d410d.lib
    opencv_ccalib410d.lib
    opencv_core410d.lib
    opencv_cudaarithm410d.lib
    opencv_cudabgsegm410d.lib
    opencv_cudacodec410d.lib
    opencv_cudafeatures2d410d.lib
    opencv_cudafilters410d.lib
    opencv_cudaimgproc410d.lib
    opencv_cudalegacy410d.lib
    opencv_cudaobjdetect410d.lib
    opencv_cudaoptflow410d.lib
    opencv_cudastereo410d.lib
    opencv_cudawarping410d.lib
    opencv_cudev410d.lib
    opencv_datasets410d.lib
    opencv_dnn410d.lib
    opencv_dnn_objdetect410d.lib
    opencv_dpm410d.lib
    opencv_face410d.lib
    opencv_features2d410d.lib
    opencv_flann410d.lib
    opencv_fuzzy410d.lib
    opencv_gapi410d.lib
    opencv_hdf410d.lib
    opencv_hfs410d.lib
    opencv_highgui410d.lib
    opencv_igcodecs410d.lib
    opencv_imgproc410d.lib
    opencv_img_hash410d.lib
    opencv_line_descriptor410d.lib
    opencv_ml410d.lib
    opencv_objdetect410d.lib
    opencv_optflow410d.lib
    opencv_phase_unwrapping410d.lib
    opencv_photo410d.lib
    opencv_plot410d.lib
    opencv_quality410d.lib
    opencv_reg410d.lib
    opencv_rgbd410d.lib
    opencv_saliency410d.lib
    opencv_shape410d.lib
    opencv_stereo410d.lib
    opencv_stitching410d.lib
    opencv_structured_light410d.lib
    opencv_superres410d.lib
    opencv_surface_matching410d.lib
    opencv_text410d.lib
    opencv_tracking410d.lib
    opencv_video410d.lib
    opencv_videoio410d.lib
    opencv_videostab410d.lib
    opencv_xfeatures2d410d.lib
    opencv_ximgproc410d.lib
    opencv_xobjdetect410d.lib
    opencv_xphoto410d.lib
    

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

    import os
    path ="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配置成功


    相关文章

      网友评论

        本文标题:OpenCV 4.1.0 + contrib + Win 10

        本文链接:https://www.haomeiwen.com/subject/pvpiyhtx.html