赞
踩
前些天在B站上看到用OpenCV调用CUDA加速目标检测和关键点检测的教程,较Pytorch推理速度提升很明显,最近整了个RTX4070,所以就也想来试一试。由于刚换了电脑,没有相关环境,配置过程中踩了一些坑,因此有了这篇记录文章。
安装Visual Studio2019,CMake,CUDA以及cuDNN
地址
需要注意,下载的OpenCV主包和Contrib包的版本要一致才可以,我用的是4.7.0版本
下载好后,将这两个包解压至同一目录下,方便查找。同时,为了存放编译生成的支持CUDA的OpenCV库,需要创建一个新的文件夹,这里我在同一目录下创建了一个名为opencv_cuda_build的文件夹,具体如图1所示

由于下载下来的OpenCV编译好的包没有CUDA以及contrib包中的相关支持,所以需要源代码编译,生成支持Contrib和CUDA的定制的OpenCV库。从下载的OpenCV源代码到我们加速推理所需要的库文件之间需要经过以下步骤:
由于某些客观原因,编译OpenCV以及contrib所需的某些库在国内无法下载,因此需要对下载下来的代码配置进行一些修改方可避免缺少某些库导致编译失败。
具体来说,主要是OpenCV的ffmpeg,ippicv和contrib的face,xfeatures2d这几个库。
解决方法就是,修改这几个库的下载地址,在原来的下载地址前增加代理。
例如,在ippicv的ippicv.cmake文件中的原始下载地址
https://raw.githubusercontent.com/opencv/opencv_3rdparty/${IPPICV_COMMIT}/ippicv/
前面新增一个代理地址
https://ghproxy.com/
修改成这样即可
https://ghproxy.com/https://raw.githubusercontent.com/opencv/opencv_3rdparty/${IPPICV_COMMIT}/ippicv/
如图2所示

以此类推,ffmpeg的配置文件是opencv\sources\3rdparty\ffmpeg\ffmpeg.cmake,xfeatures2d配置文件是opencv_contrib-4.7.0\opencv_contrib-4.7.0\modules\xfeatures2d\cmake**目录下的download_boostdesc.cmake和download_vgg.cmake**,face的配置文件是F:\packages\opencv_contrib-4.7.0\opencv_contrib-4.7.0\modules\face\CMakeLists。
前期工作准备完毕,开始编译我们所需的OpenCV。
打开CMake软件,Where is the source code这一栏选择我们解压的OpenCV的源代码的路径,我这里是F:/packages/opencv/sources。Where to build the binaries这一栏选择我们创建的opencv_cuda_build文件夹。然后点击Configure进行第一次Configure,在弹出的对话框中选择VS 2019和x64,之后点击finish。

执行完成后界面如下图所示:

接下来在CMake搜索框搜索CUDA,勾选弹出的CUDA选项

搜索并勾选math相关

搜索并勾选NONFREE

搜索并勾选BUILD_opencv_world

搜索GENERATE_SETUPVARS,取消勾选

最后搜索MODULES并添加contrib包的路径

至此,完成这一步的配置选择,第二次点击configure,等待配置完成,如下图:

configure完成后,搜索CUDA_ARCH_BIN,根据自己的GPU算力选择保留对应的数值。具体GPU对应的数值可以从Nvidia官网查找。由于40系显卡的计算能力是8.9,而4.7版本的OpenCV支持的最大的计算能力是8.6,所以我这里选择的是8.6

接下来第三次点击configure,等待完成后点击generate如下图所示:

然后就可以点击Open Project打开Visual Studio 2019,至此,CMake完成使命



编译完OpenCV后,需要对VS进行一些配置才能在我们的项目中引用到我们编译的OpenCV库。具体来说主要有
F:\packages\opencv_cuda_build\install\include
F:\packages\opencv_cuda_build\install\include\opencv2


F:\packages\opencv_cuda_build\install\x64\vc16\lib


F:\packages\opencv_cuda_build\install\x64\vc16\bin

至此,VS配置完成,可以在VS中调用我们刚刚编译的支持CUDA的OpenCV了。
在刚刚创建的main.cpp中添加如下示例程序:
#include <opencv2/opencv.hpp> #include <opencv2/core.hpp> #include <opencv2/cudaarithm.hpp> #include <iostream> using namespace std; using namespace cv; using namespace cv::cuda; int main() { // OpenCV版本号 cout << "OpenCV_Version: " << CV_VERSION << endl; // CUDA int num_devices = getCudaEnabledDeviceCount(); if (num_devices) cout << "CUDA is available, num_devices:" << num_devices << endl; else cout << "CUDA is not available." << endl; //读取图片 Mat img = imread("D:/CUDA_ARCH_BIN.png"); imshow("picture", img); waitKey(0); return 0; }
如果能正确显示图片以及CUDA,表明安装成功!

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。