OpenCV 编译安装教程
原创:PinkFeet
本文全程科学上网。
传统视觉算法时代,GPU 的作用没有现在明显。近些年来,随着深度学习方法崛起,卷积神经网络模块被嵌入到了 OpenCV,加上特定任务场景下的需求,GPU 的重要性越来越显著,计算机视觉从业人员用到 GPU 的机会越来越多。
首先,简单介绍一下 GPU。英伟达最新的一块显卡上的核心可以达到上万个,每一个核心可以同时进行运算,从而达到大规模降低运行时间的效果,但每一个核心运行的内容逻辑不能很复杂,所以它天然地适合做矩阵运算,尤其是高维的矩阵运算。如果任务实时性要求很高,就一定会要求使用 GPU。典型的应用场景有:无人驾驶、人脸识别等。无人驾驶场景对实时性的要求非常高,如果计算得不够快,车辆已经开出去很远,很可能引发安全问题。人脸识别场景对实时性的要求主要是从客户体验的角度考虑。另外,当模型的参数变得很多的时候,要训练一个模型需要很多时间,如果使用GPU 训练模型,就能缩小训练时间,加快模型上线时间。
一、检查GPU
为了编译 OpenCV,我们对GPU要做什么准备工作呢?确认硬件,即确认机器是否有显卡,是否有独立显卡(不能是核心显卡),品牌必须是英伟达,不可以是 AMD 或其他品牌的显卡,这是因为 OpenCV 需要 GPU 支持的时候,是通过 CUDA 编译,CUDA 是英伟达的辅助库,只有英伟达的显卡支持 CUDA 编译。因此说只有使用英伟达显卡,才可以添加 GPU 支持。打开 Nvidia Settings-(左下角)System Information,查看显卡型号和显卡驱动版本号。
二、安装驱动
根据显卡型号,去查显卡适配的驱动的最高版本号,并安装该版本的驱动。
三、安装 VS2019
安装 Visual Studio 2019 社区版,你也可以选择其他编译器,本文以 VS2019 为例。安装选择模块:Desktop development with C++,大约需要 6 G 空间。
四、安装 CUDA 和 cuDNN
从官网安装 CUDA 和 cudnn。方法是先从英伟达官网下载 CUDA 安装包进行安装,接着安装 cudnn。CUDA 的版本不需要选择最高的,这是为了避免后续安装其他深度学习平台没跟上 CUDA 最新版本。例如本文选择 10.2 版本的 CUDA 即可,下载 CUDA 的网址在这里:
https://developer.nvidia.com/cuda-toolkit-archive
进入下载页面后选择你对应的操作系统/架构/版本,安装类型选择 local 版本,会全部下载好后进行安装,(net 版本不推荐,它是安装的时候下载的。)需要下载 Base Installer 和 Patch1、Patch2。
在默认路径安装好后可以在终端输入 nvidia-smi 检查相关信息。
接着安装 cuDNN,网址如下:
https://developer.nvidia.com/rdp/cudnn-archive
根据此前安装的 CUDA 版本选择对应的 cndnn 进行下载,如果需要登陆,是可以免费注册账号。下载后解压缩,之后进行库文件拷贝。
上图是 cuDNN 文档中对于库文件拷贝的描述,第一类文件的拷贝要求是:将 cuda 安装路径下的 cuda\bin\ 下面所有以 cudnn 开头 .dll 结尾的文件拷贝到 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v x.x\bin 下面。后面两类文件拷贝要求类似,看图中的描述(就不翻译了哈)。
五、下载 OpenCV
看官网的指导,自己进行编译,不下载 Pre-built Libraries。
首先安装 cmake,这是一个编译工具,下载网址:
下载最新的版本即可。如果是 windows 系统,推荐下载 .msi 为后缀的安装文件。下载后一路点就安装好了。
OpenCV 和 OpenCVcontirb 都是从 GitHub 网页下载压缩包,网址分别是:
https://github.com/opencv/opencv
https://github.com/opencv/opencv_contrib
两个网址里的源代码都要下载哦!
新建 opencv 文件夹,把两个压缩包放进去并解压缩。在 opencv 文件夹里新建 opencv_build 文件夹,准备用来放编译出来的文件。
六、编译安装
打开 cmake,点击 Browse Source 选择源代码的 opencv-master 文件夹。
点击 Browse Build 选择空文件夹 opencv_build。
点击 configure,生成器选 Visual Studio 16 2019,操作系统按照实际的系统选,Optional toolset 不用选,点击 Finish,就开始编译了。
一定要有科学上网环境,否则会报奇怪的错误。
编译完成后,出现很多红色的包,这一步按大家的需求进行筛选。我建议去掉:python,java,julia,test。需要:cuda,fast math,world。在 search 一栏中搜索包名进行操作。具体操作:
去掉的包以 python 为例,搜索 python,把 name 一栏里向右的箭头都点开,对应的 value 一栏里的勾都去掉,截图如下:
增加的包以 cuda 为例:搜索 cuda,把把 name 一栏里向右的箭头都点开,对应的 value 一栏里的勾都勾上,截图如下:
单独说一下编译 opencv 的扩展包,在搜索框中搜索 extra,在 value 里把 opencv_contirb-master 里的 modules 的路径放进去。
所有的编译选项很多,有些是勾,有些不是勾,这就是配置选项。点击 Generate,开始生成文件。如果有警告就没事,如果有错误,一般是因为你没有按照要求做,或者没有合适的上网环境,所以本文一开始就强调啦要科学上网。
生成完成后,打开 opencv_build 文件夹中的 opencv.sln 文件。
在项目中,需要注意的是 Debug 模式和 Release 模式不要随意切换,会导致找不到文件。编译过程中推荐选择 Debug 模式不变。
在 Solution Explorer 的 Solution ‘OpenCV’ 上右击选择 Build Solution 就开始编译了。没有错误就编译成功了,大概需要一个小时的时间。
七、最后一步
最后需要提醒,把连接器的路径加到环境变量下。这是为了使用 opencv_build\install\x64\vc16\bin 里面的 opencv_world453.dll,就要把这个目录放到系统环境变量里。
至此,就可以使用 OpenCV 写项目啦。