windows11编译OpenCV4.5.0 with CUDA(附注意事项)

2023-05-16

windows11编译OpenCV4.5.0 with CUDA

在这里插入图片描述

从OpenCV4.2.0 版本开始允许使用 Nvidia GPU 来加速推理。本文介绍最近使用windows11系统编译带CUDA的OpenCV4.5.0的过程。

  • 文中使用【特别注意:…】为大家标识出容易出错的地方。
  • 安装成功后,使用CPU与GPU调用yolov4模型进行推理的耗时测试结果:
GPUCPU
4ms311ms
  • 从差距上看,还是值得花时间编译一下的:)
  • 耗时测试环境:
    • 调用笔记本自带摄像头获取视频
    • Notebook GTX3080显卡

1.准备环境

1.1 下载OpenCV4.5.0

  • 编译需要OpenCV4.5.0的源码
  • 下载地址(3项可选):

    https://opencv.org/releases/
    https://github.com/opencv/opencv/releases/tag/4.5.0
    https://sourceforge.net/projects/opencvlibrary/files/4.5.0/opencv-4.5.0-vc14_vc15.exe/download

  • 下载完成后是一个exe程序,双击即可解压,解压后:
    • source文件夹就是源码
    • build文件夹是编译好的不带CUDA加速的OpenCV4.5.0(本文不使用)

1.2 下载OpenCV4.5.0 contrib

  • Contrib Modules是OpenCV的扩展模块,包含了很多用于实现特定算法
  • 编译OpenCV需要用到contirb模块
  • 特别注意:务必下载与源码对应版本的contrib模块
  • 下载地址(第1个为官方下载地址,第2个为国内某同学搭建的下载库,速度较快):

    https://github.com/opencv/opencv_contrib/tags
    https://www.raoyunsoft.com/opencv/opencv_contrib/opencv_contrib-4.5.0.zip

1.3 准备.cache文件

  • 编译过程中需要联网下载一些依赖库,并存放于sourc.cache文件夹中
  • 特别注意:因要连到外网,因此速度比较慢,有时断网造成编译失败,所以可以提前准备好这些文件
  • OpenCV4.5.0的.cache文件下载地址:

    https://download.csdn.net/download/iracer/85695997

  • 使用方法:
    • 将.cache文件夹拷贝到source文件夹下,与原.cache文件夹合并

1.4 安装Visual Studio 2019

  • 安装CUDA需要vs,这里选择vs2019
  • 安装步提要:
  • Download Visual Studio 2019 Community Edition
  • Select Desktop Development with C++ option and click on install

1.5 安装CUDA和cuDNN

  • NVIDIA官方指南:

    https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html#install-windows

  • 本次在windows11上安装的CUDA和cuDNN版本为:
  • CUDA 11.3:cuda_11.3.1_465.89_win10.exe
  • duDNN 8.4:cudnn-windows-x86_64-8.4.0.27_cuda11.6-archive.zip
  • 特别注意:zlib库需要下载并添加到系统环境变量path中,因为cdDNN需要调用该库。
  • zlib库下载地址:

    www.winimage.com/zLibDll/zlib123dllx64.zip
    下载完成后解压zip文件,并将zlibwapi.dll所在目录添加到系统环境变量path

  • 查看CUDA安装结果:
C:\Users\irace>nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2021 NVIDIA Corporation
Built on Mon_May__3_19:41:42_Pacific_Daylight_Time_2021
Cuda compilation tools, release 11.3, V11.3.109
Build cuda_11.3.r11.3/compiler.29920130_0

1.6 安装CMake

  • 本次是用的是3.22版本,3.19以上版本应该都可以(未逐一测试)
  • 下载地址:

    https://github.com/Kitware/CMake/releases/download/v3.22.5/cmake-3.22.5-windows-x86_64.msi

2. 编译

2.1 CMake生成解决方案

  • 双击解压OpenCV4.5.0.exe,解压后的source目录即OpenCV4.5.0的源码

  • 解压opencv_contrib-4.5.0

  • 新建一个编译目录

    D:\opencv\oepncv4.5.0cuda\build

  • 打开CMake

  • 配置source code:

    D:/opencv/opencv4.5.0/sources

  • 配置目标目录:

    D:\opencv\oepncv4.5.0cuda\build

  • 第1次点击[Configure]

  • 弹出窗口选择vs2019作为编译器:

    Visual Studio 16 2019

  • generate平台选择x64

  • 第2次点击[Configure]后,搜cuda带cuda的都勾选,

    • BUILD_CUDA_STUBS
    • BUILD_opencv_cudaarithm
    • BUILD_opencv_cudabgsegm
    • BUILD_opencv_cudacodec
    • BUILD_opencv_cudafeatures2d
    • BUILD_opencv_cudafilters
    • BUILD_opencv_cudaimgproc
    • BUILD_opencv_cudalegacy
    • BUILD_opencv_cudaobjdetect
    • BUILD_opencv_cudaoptflow
    • BUILD_opencv_cudastereo
    • BUILD_opencv_cudawarping
    • 除此之外此外以下两项数学加速选项也勾选:
    • CUDA_FAST_MATH
    • ENABLE_FAST_MATH勾选好后
    • CMake界面上Search栏搜modules,设置contrib模块路径

    D:\opencv\oepncv4.5.0cuda\opencv_contrib-4.5.0\modules

  • 第3次点击[Configure],完成后,再次搜索cuda,配置CUDA_ARCH_BIN中将显卡的算力内容改成自己显卡的算力,t如下网址查询自己显卡的算力,我保留了7.5;8.0;8.6

    • 查询显卡算力链接

    GeForce 笔记本

    GPUCompute Capability
    GeForce RTX 30808.6
    GeForce RTX 30708.6
    GeForce RTX 30608.6
    GeForce RTX 3050 Ti8.6
    GeForce RTX 30508.6
    Geforce RTX 20807.5
    Geforce RTX 20707.5
    Geforce RTX 20607.5
    GeForce GTX 10806.1
    GeForce GTX 10706.1
    GeForce GTX 10606.1

    GeForce and TITAN 台式机

    GPUCompute Capability
    Geforce RTX 3060 Ti8.6
    Geforce RTX 30608.6
    GeForce RTX 30908.6
    GeForce RTX 30808.6
    GeForce RTX 30708.6
    GeForce GTX 1650 Ti7.5
    NVIDIA TITAN RTX7.5
    Geforce RTX 2080 Ti7.5
    Geforce RTX 20807.5
    Geforce RTX 20707.5
    Geforce RTX 20607.5
    NVIDIA TITAN V7.0
  • 搜索并勾选

    BUILD_opencv_world,可生成一个整的dll方便使用

    OPENCV_ENABLE_NONFREF

  • 解压.cache.rar,将.cache目录拷贝到source目录:

    D:\opencv\oepncv4.5.0\source\.cache >![将下载的.cache目录与source中的.cache目录合并](https://img-blog.csdnimg.cn/

  • 第4次点击[Configure]

  • 完成后,点击[Generate],完美生成:

    配置完成
    配置完成后CMake log中显示找到了CUDA和cuDNN:

    NVIDIA CUDA: YES (ver 11.3, CUFFT CUBLAS FAST_MATH)

    NVIDIA GPU arch: 75 80 86

    NVIDIA PTX archs:

    cuDNN: YES (ver 8.4.0)

  • 点击[Open Project],会自动打开vs2019,开始编译

2.2 VS2019编译OpenCV

  • 使用VS2019打开刚刚编译工程后,等待左下角显示的项全部加载完毕才可以继续操作

  • 选择Release x64版本

    在这里插入图片描述

  • 找到解决方案资源管理器中的“CmakeTargets”下的“ALL_BUILD”,右键→“生成”,然后开始漫长的等待……

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nNqwu0Ta-1655631459263)(E:\software\opencv\opencv编译GPU\image-20220616221804612.png)]

  • 解决方案资源管理器—>CMakeTargets—>INSTALL—>生成”然后又是等,好在这次时间很短。完成后你的build文件夹中会出现一个install文件夹,这就是完成了。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fVI9AP2K-1655631459263)(E:\software\opencv\opencv编译GPU\image-20220617072231198.png)]

2.3 生成文件

  • 生成完成后会出现如下文件夹

    D:\opencv\oepncv4.5.0cuda\build\install

  • build/install目录的目录结构(部分)
    ├─etc
    ├─include
    │ └─opencv2
    │ ├─core
    │ ├─cudalegacy
    │ ├─cudev
    │ ├─datasets
    │ ├─dnn
    │ ├─face
    │ ├─features2d
    └─x64
    └─vc16
    ├─bin
    └─lib

  • tips:在当前目录中运行cmd,使用tree命令,即可生成目录树

D:\opencv\oepncv4.5.0cuda\build\install>tree

3. 测试

3.1 配置OpenCV with cuda

  • 配置OpenCV4.5.0cuda,与一般OpenCV的配置方法一致,可参考:
  • Win7系统Visual Studio 2013配置OpenCV3.1图文详解

3.2 YOLOv4 示例程序

  • 测试程序可以直接用《OpenCV4机器学习算法原理与编程实战》书中的代码(部分):
#include<opencv2\opencv.hpp>
#include<opencv2\dnn.hpp>
#include<fstream>
#include<iostream>

using namespace std;
// 检测结果后处理
void postProcess(
	cv::dnn::Net& net,
	cv::Mat& frame,
	const vector<cv::Mat>& outs,
	vector<cv::Rect>& boxes,
	vector<int>& classIds,
	vector<int>& indices,
	double confThreshold,
	double nmsThreshold
);

// 检测绘制结果
void drawPred(
	cv::Mat& frame,
	vector<cv::Rect>& boxes,
	vector<int>& classIds,
	vector<int>& indices,
	vector<string>& classNamesVec);

// 程序设置
bool USE_IMAGE = false;  // true: 测试图像; false: 测试视频
bool USE_YOLOv4 = true; // true: YOLOv4;   false: YOLOv4_tiny
bool USE_CUDA = true; // true: GPU, false: CPU

float confidenceThreshold = 0.3; // 置信度设置
float nmsThreshold = 0.2; 		  // 置信MNS门限

int main()
{
	// [1]模型文件路径设置
	cv::String model, config;
	if (USE_YOLOv4)
	{
		model = "D:/models/yolov4/yolov4.weights"; // 模型权重文件
		config = "D:/models/yolov4/yolov4.cfg";    // 模型配置文件 
	}
	else // use yolov4-tiny
	{
		model = "D:/models/yolov4/yolov4-tiny.weights";
		config = "D:/models/yolov4/yolov4-tiny.cfg";
	}
	cv::String framework = "Darknet";                     // 深度学习框架
	cv::String label_file = "D:/models/yolov4/coco.names";// 类别标签文件

	//[2] 加载类别
	ifstream classNamesFile(label_file);
	vector<string> classNamesVec;
	if (classNamesFile.is_open())
	{
		string className = "";
		while (std::getline(classNamesFile, className))
		{
			classNamesVec.push_back(className);
		}
	}
	// [3]载入模型
	cv::dnn::Net net = cv::dnn::readNet(config, model, framework);

	if (USE_CUDA)
	{
		net.setPreferableTarget(cv::dnn::DNN_TARGET_CUDA);
		net.setPreferableBackend(cv::dnn::DNN_BACKEND_CUDA);
	}
	else
	{		
		net.setPreferableTarget(cv::dnn::DNN_TARGET_OPENCL);
		net.setPreferableBackend(cv::dnn::DNN_BACKEND_OPENCV);
	}

	// ...
	}

4. 相关链接

  • OpenCV4机器学习算法原理与编程实战(附部分模型下载地址)
  • 本文更新链接
  • 转载请注明出处。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

windows11编译OpenCV4.5.0 with CUDA(附注意事项) 的相关文章

随机推荐

  • 浅聊Matter协议 (原CHIP协议)

    聚焦 xff1a 芯产品 xff0c 芯市场 xff0c 芯资讯 因为Matter协议目前还没有发布 xff0c 标准只针对部分协会成员开放 xff1b 很多朋友可能听过这个名字 xff0c 然后知道是一个 上层 协议 xff0c 更多内容
  • 2021 MCU WiFi竞争新格局,国产MCU WiFi芯片盘点,附录2020/2021 MCU WiFi排行

    关注智联网事 iotthings xff1a 芯产品 xff0c 芯市场 xff0c 芯资讯 缺货 xff0c 是半导体产业2021年最主要的基调 xff0c 有公司拿不到产能 xff0c 有公司新芯片流片周期大幅拉长 xff1b 新冠病情
  • 芯科(Silabs) Matter 全栈解决方案,附录高质量Matter培训资

    关注智联网事 xff1a 芯产品 xff0c 芯市场 xff0c 芯资讯 对芯科的最初印象 xff0c 最早应该是2014 5年左右 xff0c 当时SI44xx系列渗透了很多市场的客户 xff0c 记得一个是低功耗的特性 xff0c 一个
  • WAF技术选型介绍

    WAF目前是企业必不可少的安全设备 xff0c 目前常见的开源技术选型包括 xff1a jxwafopenstarngx lua wafApache APISIXmodsecurity 介绍参考 xff1a https zhuanlan z
  • int 占多少字节

    char 1 int 4 long 8 float 4 double 8 xff08 1 xff09 使用VC xff0c int类型占4个字节 xff08 2 xff09 使用Turbo C xff0c int类型占2个字节 16位编译器
  • 海外LPWAN的王者是我,一文看懂Wi-Sun协议

    聚焦 xff1a 芯产品 xff0c 芯市场 xff0c 芯技术 注 xff1a 欢迎加入文章底部的 lt 物联坊间 gt 微信 刚刚毕业的我 xff0c 有参与城市照明系统的建设 xff0c 包括城市公交系统 xff0c 那个时候困扰我的
  • 22家国产汽车MCU公司及型号盘点

    专注芯片 xff0c 应用系统 xff0c 行销技能的公众号 如果有一家芯片MCU或模拟公司和你说 xff0c 他不做汽车方向芯片 xff0c 你可以内心欣喜的 xff0c 严肃的问一句 xff0c 为什么 xff1b 做汽车芯片 xff0
  • 2022 MCU公司交卷,总营收84.8亿人民币,排名第一和最后的分别是

    2022财报季结束 xff0c 我们看下上市MCU公司的最新排名 xff0c 毛利 xff0c 库存及库存周转率情况 xff1b 根据 Omdia 的数据 xff0c 2022 年中国 MCU 市场规模约为 82 亿美元 xff0c 小二统
  • 深度:旋转变压器原理,芯片,算法,选型

    之前介绍的新能源汽车电机控制器 MCU 和电动助力转向 EPS 文章中 xff0c 有提到电机的角度反馈可选择转旋转变压器方案 xff0c 今天做个分享 xff0c 欢迎留言交流 本文目录 xff1a 旋转变压器应用及参数概览 旋转变压器原
  • 实时微控制器的关键技术及国产玩家,国产DSP盘点

    小二用芯在写 xff0c 如果您觉得有帮助 xff0c 帮忙朋友圈推荐下 34 xff0c 感谢 xff01 在介绍OBC xff0c DCDC时候 xff0c 觉得有必要对主控芯片做个介绍 xff0c 比如为什么说数字电源的控制一般集成H
  • 天猫精灵的开发者生态

    文章转自 智联网事 欢迎关注 xff0c 每周一篇原创 xff0c 直至 No End https mp weixin qq com s biz 61 MzI3NDE2NDMwNQ 61 61 amp mid 61 2649905740 a
  • 蓝牙Mesh网络性能及网络特点总结(一)

    原文链接 xff1a 欢迎关注公众号 智联网事 xff0c 一周一篇原创文章 xff0c 一起探讨智联网 https mp weixin qq com s biz 61 MzI3NDE2NDMwNQ 61 61 amp mid 61 264
  • 华为物联网(IOT)开发者平台

    智联网事 关注与分享 xff0c 是对原创最大的鼓励 原文链接 https mp weixin qq com s biz 61 MzI3NDE2NDMwNQ 61 61 amp mid 61 2649905835 amp idx 61 1
  • Kubernetes v1.21.14二进制搭建单节点集群

    1 集群环境准备 1 1 主机规划 IP主机名主机角色操作系统安装组件192 168 11 71k8s master1master workerCentos7 9api server controller manager scheduler
  • shell脚本第一行:#!/bin/bash的含义

    相信有接触过shell脚本的同学们都应该知道 xff0c shell脚本的第一行一般会写有以下字样 xff1a bin bash或者 bin sh或者 bin awk 比较常见的说法是 xff1a 第一行的内容指定了shell脚本解释器的路
  • LPMS-IMU姿态解算

    参考文章 xff1a AHRS姿态解算说明 加速度 43 陀螺仪 43 磁力计原理及原始数据分析 AHRS俗称航姿参考系统 xff0c AHRS由加速度计 xff0c 磁场计 xff0c 陀螺仪构成 xff0c AHRS的真正参考来自于地球
  • 如何在我的VsCode中集成Git

    在VsCode中配置Git后 xff0c 我们就可以简单快速管理我们的代码仓库 一 下载安装Git 如果没有Git xff0c 这里可以参考我之前的文章安装 配置Git 精讲Git xff08 从安装到熟练使用一文全解 xff0c 看完轻松
  • 虚拟机:xshell连接虚拟机Ubuntu失败解决方法

    当我们买不起服务器但却想模拟服务器环境进行学习时 xff0c 再好不过的就是直接装Linux虚拟机了 xff0c 非常简单快捷 xff01 首先我们可以通过ifconfig a来查看Ubuntu Server的IP地址 xff08 前提是你
  • SVM原理:超平面方程

    xff08 1 xff09 超平面方程 3维空间中平面方程的一般形式 xff1a 1 我们都知道为平面到原点的距离 这里简单证明超平面的法向量为 d维空间平面方程的一般形式 xff1a 2 平面的法向量为 xff0c xff08 分号表示列
  • windows11编译OpenCV4.5.0 with CUDA(附注意事项)

    windows11编译OpenCV4 5 0 with CUDA 从OpenCV4 2 0 版本开始允许使用 Nvidia GPU 来加速推理 本文介绍最近使用windows11系统编译带CUDA的OpenCV4 5 0的过程 文中使用 特