• Win10下CUDA版OpenCV的编译过程


    1.编译环境

    1)系统环境:Win10( i7-8700 CPU, 16GB RAM)+RTX 2070+VS2017 Enterprise+CUDA 11.6+cuDNN v8.5.0
    2)CMake 3.24.1:https://github.com/Kitware/CMake/releases/download/v3.24.1/cmake-3.24.1-windows-x86_64.zip
    3)OpenCV 4.6.0:https://github.com/opencv/opencv/archive/refs/tags/4.6.0.tar.gz
    4)opencv_contrib 4.6.0:https://github.com/opencv/opencv_contrib/archive/refs/tags/4.6.0.tar.gz
    5)oneTBB 2021.5.0:https://github.com/oneapi-src/oneTBB/releases/download/v2021.5.0/oneapi-tbb-2021.5.0-win.zip

    2.编译过程

    编译过程参考知乎文章。同样遇到了“Couldn’t resolve host name”的错误,也就是在下载部分第三方库或者文件时,由于是国外的服务器,出现下载失败的情况。作者使用了文章中分享的.cache文件包进行替换,成功完成编译(过程中仍然出现的问题见第3节的问题记录)。为了编译contrib模块和CUDA模块,需要进行如下设置,这里再次记录一下:
    1)OPENCV_EXTRA_MODULES_PATH:这里填写opencv_contrib-4.6.0目录下的modules文件夹的路径,例如:D:/Software/opencv/opencv_contrib-4.6.0/modules;
    2)WITH_CUDA、BUILD_CUDA_STUBS、OPENCV_DNN_CUDA:全部勾选;
    3)OPENCV_ENABLE_NONFREE:勾选;
    4)BUILD_opencv_world:勾选;
    5)CUDA_ARCH_BIN:修改为GPU支持的算力版本,例如:7.5。注意:必须将这里修改为所使用的GPU支持的算力版本,否则会编译成支持很多种算力的库,编译过程会浪费非常多的时间;
    6)CUDA_FAST_MATH、ENABLE_FAST_MATH:勾选;
    7)WITH_TBB:勾选;
    8)TBB_ENV_INCLUDE:修改为TBB库的include文件夹路径,例如:D:/Software/opencv/oneapi-tbb-2021.5.0/include;
    9)TBB_ENV_LIB:修改为TBB库的lib文件路径,例如:D:/Software/opencv/oneapi-tbb-2021.5.0/lib/intel64/vc14/tbb.lib;
    9)TBB_ENV_LIB_DEBUG:修改为TBB库的lib文件路径(Debug版),例如:D:/Software/opencv/oneapi-tbb-2021.5.0/lib/intel64/vc14/tbb_debug.lib
    备注:已经勾选了WITH_CUDA后再点击Configure才会出现CUDA_ARCH_BIN的设置,作者根据RTX2070的算力,将其修改为7.5。
    配置完成后,点击Generate就可以生成VS2017的工程;点击Open Project就可以通过VS2017打开工程;在解决方案资源管理器中,首先编译“ALL_BUILD”,再编译“INSTALL”就可以生成自己编译的库。
    在这里插入图片描述
    在这里插入图片描述

    3.问题记录

    1)作者使用的是OpenCV4.6.0版本进行编译,也就是作者编写本博客时OpenCV的最新版本。使用了上面提到的知乎文章分享的cache文件包解决CMake Configure过程中文件无法下载的问题,但是Configure完成后,ffmpeg库始终无法找到。尝试了多次之后,使用知乎文章中介绍的方法处理后ffmpeg成功下载;在ffmpeg成功下载之后会自动生成3rdparty/ffmpeg文件夹,其中内容如下:
    在这里插入图片描述
    需要提醒的是,对于OpenCV4.6.0,直接使用知乎文章分享的cache包的话,Configure过程中会始终找不到ffmpeg!作者对比文件发现,上面成功下载的ffmpeg库为较新的版本(新版本为2022.5.0,cache包中的版本为2020.9.0);
    2)最终的Configure结果如下所示:

    General configuration for OpenCV 4.6.0 =====================================
      Version control:               unknown
    
      Extra modules:
        Location (extra):            D:/Software/opencv/opencv_contrib-4.6.0/modules
        Version control (extra):     unknown
    
      Platform:
        Timestamp:                   2022-09-11T12:38:53Z
        Host:                        Windows 10.0.19044 AMD64
        CMake:                       3.24.1
        CMake generator:             Visual Studio 15 2017
        CMake build tool:            C:/Program Files (x86)/Microsoft Visual Studio/2017/Enterprise/MSBuild/15.0/Bin/MSBuild.exe
        MSVC:                        1910
        Configuration:               Debug Release
    
      CPU/HW features:
        Baseline:                    SSE SSE2 SSE3
          requested:                 SSE3
        Dispatched code generation:  SSE4_1 SSE4_2 FP16 AVX AVX2
          requested:                 SSE4_1 SSE4_2 AVX FP16 AVX2 AVX512_SKX
          SSE4_1 (18 files):         + SSSE3 SSE4_1
          SSE4_2 (2 files):          + SSSE3 SSE4_1 POPCNT SSE4_2
          FP16 (1 files):            + SSSE3 SSE4_1 POPCNT SSE4_2 FP16 AVX
          AVX (5 files):             + SSSE3 SSE4_1 POPCNT SSE4_2 AVX
          AVX2 (33 files):           + SSSE3 SSE4_1 POPCNT SSE4_2 FP16 FMA3 AVX AVX2
    
      C/C++:
        Built as dynamic libs?:      YES
        C++ standard:                11
        C++ Compiler:                C:/Program Files (x86)/Microsoft Visual Studio/2017/Enterprise/VC/Tools/MSVC/14.10.25017/bin/HostX86/x64/cl.exe  (ver 19.10.25017.0)
        C++ flags (Release):         /DWIN32 /D_WINDOWS /W4 /GR  /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigobj /Oi  /fp:fast     /EHa /wd4127 /wd4251 /wd4324 /wd4275 /wd4512 /wd4589 /MP  /MD /O2 /Ob2 /DNDEBUG 
        C++ flags (Debug):           /DWIN32 /D_WINDOWS /W4 /GR  /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigobj /Oi  /fp:fast     /EHa /wd4127 /wd4251 /wd4324 /wd4275 /wd4512 /wd4589 /MP  /MDd /Zi /Ob0 /Od /RTC1 
        C Compiler:                  C:/Program Files (x86)/Microsoft Visual Studio/2017/Enterprise/VC/Tools/MSVC/14.10.25017/bin/HostX86/x64/cl.exe
        C flags (Release):           /DWIN32 /D_WINDOWS /W3  /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigobj /Oi  /fp:fast     /MP   /MD /O2 /Ob2 /DNDEBUG 
        C flags (Debug):             /DWIN32 /D_WINDOWS /W3  /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigobj /Oi  /fp:fast     /MP /MDd /Zi /Ob0 /Od /RTC1 
        Linker flags (Release):      /machine:x64  /INCREMENTAL:NO 
        Linker flags (Debug):        /machine:x64  /debug /INCREMENTAL 
        ccache:                      NO
        Precompiled headers:         NO
        Extra dependencies:          cudart_static.lib nppc.lib nppial.lib nppicc.lib nppidei.lib nppif.lib nppig.lib nppim.lib nppist.lib nppisu.lib nppitc.lib npps.lib cublas.lib cudnn.lib cufft.lib -LIBPATH:C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v11.6/lib/x64 -LIBPATH:C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v11.6/lib
        3rdparty dependencies:
    
      OpenCV modules:
        To be built:                 aruco barcode bgsegm bioinspired calib3d ccalib core cudaarithm cudabgsegm cudacodec cudafeatures2d cudafilters cudaimgproc cudalegacy cudaobjdetect cudaoptflow cudastereo cudawarping cudev datasets dnn dnn_objdetect dnn_superres dpm face features2d flann fuzzy gapi hfs highgui img_hash imgcodecs imgproc intensity_transform line_descriptor mcc ml objdetect optflow phase_unwrapping photo plot quality rapid reg rgbd saliency shape stereo stitching structured_light superres surface_matching text tracking ts video videoio videostab wechat_qrcode world xfeatures2d ximgproc xobjdetect xphoto
        Disabled:                    -
        Disabled by dependency:      -
        Unavailable:                 alphamat cvv freetype hdf java julia matlab ovis python2 python3 sfm viz
        Applications:                tests perf_tests examples apps
        Documentation:               NO
        Non-free algorithms:         YES
    
      Windows RT support:            NO
    
      GUI: 
        Win32 UI:                    YES
        VTK support:                 NO
    
      Media I/O: 
        ZLib:                        build (ver 1.2.12)
        JPEG:                        build-libjpeg-turbo (ver 2.1.2-62)
        WEBP:                        build (ver encoder: 0x020f)
        PNG:                         build (ver 1.6.37)
        TIFF:                        build (ver 42 - 4.2.0)
        JPEG 2000:                   build (ver 2.4.0)
        OpenEXR:                     build (ver 2.3.0)
        HDR:                         YES
        SUNRASTER:                   YES
        PXM:                         YES
        PFM:                         YES
    
      Video I/O:
        DC1394:                      NO
        FFMPEG:                      YES (prebuilt binaries)
          avcodec:                   YES (58.134.100)
          avformat:                  YES (58.76.100)
          avutil:                    YES (56.70.100)
          swscale:                   YES (5.9.100)
          avresample:                YES (4.0.0)
        GStreamer:                   NO
        DirectShow:                  YES
        Media Foundation:            YES
          DXVA:                      YES
    
      Parallel framework:            TBB (ver 2021.5 interface 12050)
    
      Trace:                         YES (with Intel ITT)
    
      Other third-party libraries:
        Lapack:                      NO
        Eigen:                       NO
        Custom HAL:                  NO
        Protobuf:                    build (3.19.1)
    
      NVIDIA CUDA:                   YES (ver 11.6, CUFFT CUBLAS FAST_MATH)
        NVIDIA GPU arch:             75
        NVIDIA PTX archs:
    
      cuDNN:                         YES (ver 8.5.0)
    
      OpenCL:                        YES (NVD3D11)
        Include path:                D:/Software/opencv/opencv-4.6.0/3rdparty/include/opencl/1.2
        Link libraries:              Dynamic load
    
      Python (for build):            NO
    
      Java:                          
        ant:                         NO
        JNI:                         NO
        Java wrappers:               NO
        Java tests:                  NO
    
      Install to:                    D:/Software/opencv/opencv-full-4.6.0/install
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    需要关注的项目有一下几点:
    1、FFMPEG:这里应为YES,如果为NO说明ffmpeg接口添加失败,会影响视频处理;
    2、NVIDIA GPU arch:这里一般只有1个参数,比如作者设置的75(即算力为7.5)。如果出现了多种,意味着需要编译支持多种算力的库,这样的话编译会耗费大量的时间;
    3、Parallel framework:TBB,表示TBB库会参与编译(主要用于图像处理在多核CPU上的并行加速);
    
    • 1
    • 2
    • 3
    • 4

    3)关于CMake Configure过程中文件下载失败,作者始终有一点不解:首先,将Configure过程中文件下载的地址拷贝至Chrome浏览器进行下载,均可以下载成功;其次,尝试了修改host文件的域名映射,Configure过程中文件下载失败的代码变了,但是依旧大部分文件下载不成功;此外,还尝试了其他破除限制访问网络的方法,Configure过程文件下载都没有成功。

    4.共享资源

    最后,分享一下包含install文件夹的整个编译结果文件夹供参考:
    链接:https://pan.baidu.com/s/1YnP1oPHW_5TbvdnPA0vBzw?pwd=g1i4
    提取码:g1i4

  • 相关阅读:
    自动化测试总计
    网络渗透测试:Wireshark抓取qq图片
    流式 Isotype control 流式细胞仪control组
    ubuntu 20.04.1 LTS 开机自启动脚本服务开启
    Java - 位运算的基本原理和用途
    TMS FMX Cloud提供集成元素
    并发编程(概念简述)
    泰迪智能科技大模型数据智能实验室
    shiro550反序列学习
    爬虫过程和反爬
  • 原文地址:https://blog.csdn.net/zhoukehu_CSDN/article/details/126808200