我的环境:Win10+VS2017+Opencv4.2+Cmake3.12.4+GTX 1650+CUDA10.2+cuDNN7.6.5.32
cmake下载地址:https://cmake.org/download/ (下载速度过慢,可以在CSDN上搜索他人上传的资源)
(1)开启普通模块对GPU的支持,以及DNN模块对GPU的支持,不要勾选BUILD_CUDA_STUBS
(2)指定之前下载好的opencv_contrib模块modules文件所在的位置
(3)把各OpenCV模块编译成一个模块,这样最后生成的只有一个.lib(方便后续进行配置)。但在发行版本中建议按需引入相应模块以减少体积
(4)为了加快后面编译opencv工程的速度,带test、java、python的都不勾选
(5)WITH_INF_ENGIN 这一项是dnn-cpu的加速,需要提前安装openVINO,这里我们暂不勾选
(1)Cmake第一次构建需要下载几个文件,第二次构建时由于我们添加了opencv_contrib模块,因此也需要下载几个文件。由于这些文件保存在国外服务器上,因此我们基本都会下载失败。这些文件的缓存路径我们可以通过“Search”查询,如下图所示:
按照我们查找的路径打开.cache文件,我们可以发现多个文件夹,任意打开一个可以发现里面缓存了下载失败的文件,如下图所示:
其中“opencv_videoio_ffmpeg.dll”为文件名,“5de6044cad9398549e57bc46fc13908d”为MD5,0KB代表下载失败。
(2)Cmake会将这些文件的下载日志保存在CMakeDownloadLog.txt文件中,我们可以在E:/opencv/OpencvSource路径下找到它,内容含义如下图所示:
(3)我将构建opencv4.2需要下载的文件都存放在了.cache文件中,并上传到CSDN,需要的朋友可以自行下载。下载完毕后,可以将你需要的文件复制过去。删除原来的CMakeDownloadLog.txt文件,然后再次点击“configure”按钮,两次构建完成后再打开MakeDownloadLog.txt文件,其内容含义如下图所示:
(4)文件格式是:MD5-文件名。可以通过如下代码获取文件的MD5,然后核实获取到的MD5与下载文件中的MD5是否一致。一般情况是一致的,这步可以不用操作。
cd /d D:\opencv\sources\.cache\ffmpeg
certutil -hashfile ffmpeg_version.cmake MD5
从上图我们可以看出,当前使用的是10.2版本的CUDA。如果需要,我们可以改变编译opencv时的cuda版本,如下图所示:
修改CUDA的路径后,需要再次点击“configure”按钮,进行构建。
打开工程,在菜单栏选择“生成”——“批生成”,选择下图所示的四项,然后点击“生成”此过程大约需要2.5小时
编译完成后,在该工程目录下会生成一个install文件夹,即为我们需要的库文件。
详情请查看:https://blog.csdn.net/jgj123321/article/details/94636112
注意:为了配置方便我们可以将旧的opencv库改为别的名字,例如:build_old。然后新建build文件夹,直接将新编译的库拷贝过来,这样以后切换的时候就不用重新配置了,只需要改文件名即可。
d:\opencv\sources\modules\dnn\misc\tensorflow\types.pb.h(17): fatal error C1189:
#error:This file was generated by an older version of protoc which is
(编译源文件D:\opencv\sources\modules\dnn\misc\tensorflow\types.pb.cc)
问题分析:types.pb.h文件由protobuf更老的版本生成,而本机protobuf是新版本,从而造成版本不兼容问题。
问题查找:按照错误提示打开types.pb.h文件,看到下图所示的一段代码,含义就是其仅支持protobuf3.5.0以及3.5.1版本
此时我们在Cmake的”search“一栏输入”python“,即可发现python的相关环境变量,即链接protobuf库的位置。
然后我们使用cmd打开命令行,输入"protoc --version"或"conda list"查看protobuf的版本,我这里的版本为protobuf3.11.4。
问题解决:使用“conda remove protobuf“命令移除当前库,如果移除失败,可以使用更暴力的方法:直接卸载并重新安装anaconda,这样protobuf就被清除了(不需要安装protobuf) 。
”Error: your C compiler:"CMAKE_C_COMPILER-NOTFOUND" was not found.
“Error:your CXX compiler: "CMAKE_CXX_COMPILER-NOTFOUND" was not found
问题分析:意思就是CMAKE没有找到C与C++编译器,这里的CXX_COMPILER其实就是C++编译器。
问题解决:安装VS2015时一定要勾选Visual C++模块,win10 SDK模块最好也勾选。
CMake Error at modules/dnn/CMakeLists.txt:99 (message):
CUDA backend for DNN module requires CC 5.3 or higher.
Please remove unsupported architectures from CUDA_ARCH_BIN option.Call Stack (most recent call first):
modules/world/CMakeLists.txt:13 (include)
modules/world/CMakeLists.txt:32 (include_one_module)
问题分析:DNN模块不支持低于5.3的GPU算力
问题解决:将CUDA_ARCH_BIN中小于5.3的选项去掉。我们也可以只保留本机GPU的算力,https://developer.nvidia.com/cuda-gpus官网查询本机GPU算力,我的GPU型号为GTX1650,官网上查询不到(暂时不知道为什么),我通过在本机的ubantu系统运行CUDA-Z软件查出算力为:7.5
虽然不知道出错的原因,但是可以按照如下方式解决此问题:下载或在其它机器上拷贝此文件(anaconda和matlab的安装路径下有这个文件),然后放到C:/windows/system32路径下,即可解决。
参考文章:https://www.jianshu.com/p/5520fdb6dbae?from=singlemessage
https://www.cnblogs.com/xixixing/p/11848018.html
https://blog.csdn.net/zy2317878/article/details/78534782
https://blog.csdn.net/qq_38469553/article/details/81260914
https://blog.csdn.net/qq_34801642/article/details/105577349
https://blog.csdn.net/changeworldjust/article/details/105055234