opencv3之后要使用SURF,需要xfeatures2d模块,xfeatures2d模块被移到opencv_contrib了,所以要使用SURF,需要重新编译opencv源码和opencv_contrib源码。
本项目不仅要使用SURF算法,还要使用yolov3进行目标检测。由于目标检测用CPU跑不仅慢帧率还低,所以我们要用GPU跑。同样的darknet也要用GPU跑不然训练太慢。接下来将演示如何编译opencv4.7.0。
- win10
- VS2019
- python3.7.5 (不要用VS下载python,VS没有debug版本的python)
- Cmake-gui(3.15.1)
- opencv4.7.0
- opencv_contrib-4.7.0(版本要和opencv一样)
- 一张显卡
- CUDA11.6.2(CUDA的版本计算能力要包含显卡的计算能力)
- CUDNN(版本要和CUDA兼容)
- 科学上网
-
CUDA下载安装
为了让opencv yolov3使用GPU跑,要启用CUDA。
我的显卡是1650s,根据CUDA百科,1650s的计算能力是7.5,而CUDA10.0以上的版本才支持7.5的计算能力。
然后在命令行用nvidia-smi查看显卡驱动适配的最高CUDA版本
可以看到1650s显卡支持最高CUDA版本是11.7,你下载的CUDA版本必须低于该版本,这里我选用CUDA11.6.2版本。
CUDA官网(可能需要登录英伟达账号)
CUDA11.6.2下载
安装安装比较简单,如果不想更新显卡驱动建议选择自定义安装,取消勾选显卡驱动。
-
cuDNN下载解压并拷贝文件到CUDA目录
cnDNN官网(可能需要登录英伟达账号)
cuDNN8.7.0下载
这里我直接下载兼容CUDA11.x的最新版本cuDNN8.7
下载完将cuDNN解压包内的include,bin,lib里的文件拷贝到CUDA对应的include,bin,lib内 -
使用opencv-4.7.0的下载缓存文件(可选)
opencv配置的时候要下载很多文件(大概160MB),如果你网络不好就可能下载失败,导致配置报错或者编译VS项目的时候报错,即使科学上网也可能下载失败。所以我这里将opencv-4.7.0版本的下载缓存文件备份到QQ群,有需要加群获取。直接用我的缓存文件配置过程会非常快。当然你必须用4.7版本,其它版本我不保证不会出问题。
至少要配置三次
打开Cmake-gui,输入opencv源目录和输出目录,我的构建目录如下
- CMake源目录是:
D:/dev/up/opencv-4.7.0-build/opencv-4.7.0
- 输出目录是:
D:/dev/up/opencv-4.7.0-build/generate
- 最后生成文件所在目录:
D:/dev/up/opencv-4.7.0-build/generate/install
- 点击configure,选择VS2019,x64平台(默认),配置过程比较慢,耐心等待。
- Python相关选项(不用python可以不选)
- JAVA相关选项
- test相关选项
- BUILD_opencv_world(开发环境可勾选,部署不勾选)
- OPENCV_ENABLE_NONFREE
- WITH_CUDA
- OPENCV_DNN_CUDA
- OPENCV_EXTRA_MODULES_PATH 选择目录:[你的路径]/opencv_contrib-4.7.0/modules
勾选CUDA并且configure过一次后才会出现以下选项:
- WITH_CUDNN
- CUDA_ARCH_BIN 只保留:7.5
启用BUILD_opencv_world好处是只有一个dll,坏处是默认编译所有opencv模块,dll很大,release版在200M到300M左右。
OPENCV_ENABLE_NONFREE是为了使用surf算法(特征匹配)。
WITH_CUDA,OPENCV_DNN_CUDA,WITH_CUDNN是为了使用GPU版darknet或者GPU版opencv yolov3。
OPENCV_EXTRA_MODULES_PATH指定额外模块的位置,该模块包含xfeature(使用surf算法)。
CUDA_ARCH_BIN指定了CUDA计算能力,7.5对应1650s显卡。
- configure成功后generate,然后打开OpenCV.sln
- 选择Debug和x64
- 生成opencv_world模块,大概用了30分钟,编译完会生成opencv_world470d.lib和opencv_world470d.dll(这步可选)
- 生成ALL_BUILD项目
- 最后生成INSTALL项目(所有输出文件都在这)
- 删除install目录里无用的文件,然后将install拷贝到调用项目
- 切换Release和x64再编译一遍
fatal error: boostdesc_bgm.i: vgg_generated_80. vgg_generated_120.i没有那个文件或目录
解决方法:下载下列文件,拷贝到opencv_contrib/modules/xfeatures2d/src/目录
boostdesc_bgm.i
boostdesc_bgm_bi.i
boostdesc_bgm_hd.i
boostdesc_lbgm.i
boostdesc_binboost_064.i
boostdesc_binboost_128.i
boostdesc_binboost_256.i
vgg_generated_120.i
vgg_generated_64.i
vgg_generated_80.i
vgg_generated_48.i
Cannot open include file: 'features2d/test/test_detectors_regression.impl.hpp': No such file or directory
解决方法:将opencv-build\opencv-4.3.0\modules\features2d目录拷贝到opencv-build\generate(CMake生成目录)
- github搜索onlyet
- CSDN搜索他过江
- B站ID:他过江
B站的小伙伴点个三连和关注吧。
你指尖跃动的四连是我此生不灭的更新的动力!