博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持!
博主链接
本人就职于国际知名终端厂商,负责modem芯片研发。
在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G技术研究。
博客内容主要围绕:
5G/6G协议讲解
高级C语言讲解
Rust语言讲解
文章目录
- [一、安装cuda支持的opencv-python Windows版本](#一、安装cuda支持的opencv-python Windows版本)
-
- [1.1 基础软件包准备](#1.1 基础软件包准备)
-
- [1.1.1 检查是否安装了NVIDIA CUDA Toolkit](#1.1.1 检查是否安装了NVIDIA CUDA Toolkit)
- [1.1.2 安装cudnn](#1.1.2 安装cudnn)
- [1.2 安装cuda支持的opencv-python](#1.2 安装cuda支持的opencv-python)
-
- [1.2.1 首先需要下载opencv和opencv-contrib](#1.2.1 首先需要下载opencv和opencv-contrib)
- [1.2.2 解压上面的安装包,并创建下面的目录结构](#1.2.2 解压上面的安装包,并创建下面的目录结构)
- [1.2.3 安装numpy、opencv-python、opencv-contrib-python](#1.2.3 安装numpy、opencv-python、opencv-contrib-python)
- [1.3 使用cmake-gui配置项目参数](#1.3 使用cmake-gui配置项目参数)
-
- [1.3.1 配置opencv代码目录和编译目录](#1.3.1 配置opencv代码目录和编译目录)
- [1.3.2 配置编译器,并初次构建](#1.3.2 配置编译器,并初次构建)
- [1.3.3 配置宏定义,开启cuda功能](#1.3.3 配置宏定义,开启cuda功能)
- [1.3.4 继续配置宏定义](#1.3.4 继续配置宏定义)
- [1.3.5 查询NVIDIA GPU算力,并配置相关宏定义](#1.3.5 查询NVIDIA GPU算力,并配置相关宏定义)
- [1.3.6 检查python版本是否正确](#1.3.6 检查python版本是否正确)
- [1.3.7 生成配置文件](#1.3.7 生成配置文件)
- [1.4 编译和安装](#1.4 编译和安装)
-
- [1.4.1 打开vs2022构建项目](#1.4.1 打开vs2022构建项目)
- [1.4.2 安装](#1.4.2 安装)
- [1.5 测试安装正确性](#1.5 测试安装正确性)
- 二、常见错误处理
-
- [2.1 CUDA Toolkit 版本太低](#2.1 CUDA Toolkit 版本太低)
- [2.2 cuDNN宏定义没有指定到具体的库文件名](#2.2 cuDNN宏定义没有指定到具体的库文件名)
- [2.3 python加载cv2的时候显示 dll 加载失败](#2.3 python加载cv2的时候显示 dll 加载失败)
- [2.4 无法打开文件"pythonxxx_d.lib"](#2.4 无法打开文件“pythonxxx_d.lib”)
一、安装cuda支持的opencv-python Windows版本
1.1 基础软件包准备
需要安装CUDA Toolkit
、NVIDIA cudnn
、vs2022
、cmake
、python
,这一节主要介绍一下CUDA Toolkit
、NVIDIA cudnn
的安装,其他的都比较常用了,相信大家已经在使用了。
1.1.1 检查是否安装了NVIDIA CUDA Toolkit
在Windows命令行窗口输入
bash
nvidia-smi
查看是否安装了cuda toolkit,如果显示下面的内容表示已经安装了
如果没有安装需要登陆NVIDIA网站,下载最新版本的cuda toolkit并安装。
1.1.2 安装cudnn
从NVIDIA下载cudnn版本,下载后正常安装就可以。
1.2 安装cuda支持的opencv-python
1.2.1 首先需要下载opencv和opencv-contrib
1.2.2 解压上面的安装包,并创建下面的目录结构
1.2.3 安装numpy、opencv-python、opencv-contrib-python
bash
pip install numpy
pip install opencv-python
pip install opencv-contrib-python
1.3 使用cmake-gui配置项目参数
1.3.1 配置opencv代码目录和编译目录
1.3.2 配置编译器,并初次构建
1.3.3 配置宏定义,开启cuda功能
宏名 | 值 |
---|---|
WITH-CUDA | ON |
OPENCV-DNN-CUDA | ON |
ENABLE_FAST_MATH | ON |
OPENCV_ENABLE_NONFREE | ON |
BUILD_opencv_world | ON |
上面都是布尔参数,下面配置的是opencv的外部库,
执行配置过程,正常会失败,没关系我们还有一些参数没有配置
1.3.4 继续配置宏定义
宏名 | 值 |
---|---|
CUDA_FAST_MATH | ON |
CMAKE_CONFIGURATIONTYPES | Release |
下面配置的是cudnn的库(一定要明确到具体的库文件,不能只定位到目录,感觉是bug)
1.3.5 查询NVIDIA GPU算力,并配置相关宏定义
进入cuda toolkit安装目录(默认安装目录C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.7\extras\demo_suite),在cmd中执行deviceQuery.exe
可以看到博主的GPU能力是8.6,配置下面的宏定义
宏名 | 值 |
---|---|
CUDA_ARCH_BIN | 8.6 |
执行配置过程
1.3.6 检查python版本是否正确
博主的电脑中有多个python版本,之前就遇到过实际使用的python版本与cmake自动检测的python版本不一致,导致显示安装成功,但是没有实际的效果。下面是cmake自动检测的python版本
如果你使用的python版本与自动检测的不一致,可以参考下面的宏定义修改python版本
1.3.7 生成配置文件
1.4 编译和安装
1.4.1 打开vs2022构建项目
右键ALL_BUILD
选择生成,此时就开始了漫长的编译过程,差不多需要60分钟
1.4.2 安装
右键INSTALL
选择生成,此时就开始了安装过程
1.5 测试安装正确性
执行下面的代码
python
import os
os.add_dll_directory("C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v12.6\\bin")
os.add_dll_directory("C:\\Program Files\\NVIDIA\\CUDNN\\v9.3\\bin\\12.6")
import cv2
count = cv2.cuda.getCudaEnabledDeviceCount()
print(count)
可以看到输出的结果为1,表示已经成功安装了cuda使能的opencv-python。
二、常见错误处理
2.1 CUDA Toolkit 版本太低
问题现象
:fatal error C1189: #error: -- unsupported Microsoft Visual Studio version! Only the versions between 2017 and 2022 (inclusive) are supported! The nvcc flag '-allow-unsupported-compiler' can be used to override this version check; however, using an unsupported host compiler may cause compilation failure or incorrect run time execution. Use at your own risk.
解决方法
:可以参考 1.1.1节更新 CUDA Toolkit,更新后需要同步更新下面的宏参数:
2.2 cuDNN宏定义没有指定到具体的库文件名
问题现象
:提示 x64.lib not found in opencv_world.vcxproj
解决方法
:将宏变量CUDNN_LIBRARY
指定到具体的库文件名。如果只是指定到x64
文件夹,会提示无法打开x64.lib文件;如果指定到lib
文件夹,会提示无法打开lib.lib文件。
2.3 python加载cv2的时候显示 dll 加载失败
问题现象
:提示 "A dynamic link library (DLL) initialization routine failed"
bash
Traceback (most recent call last):
File "d:\programming\fanduel-boggle-cheat\opencv_cuda_cudnn.py", line 4, in <module>
import cv2
File "C:\Users\evank\anaconda3\envs\opencv_cuda_cudnn\Lib\site-packages\cv2\__init__.py", line 181, in <module>
bootstrap()
File "C:\Users\evank\anaconda3\envs\opencv_cuda_cudnn\Lib\site-packages\cv2\__init__.py", line 153, in bootstrap
native_module = importlib.import_module("cv2")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\evank\anaconda3\envs\opencv_cuda_cudnn\Lib\importlib\__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ImportError: DLL load failed while importing cv2: The specified module could not be found.
解决方法
:需要指定cudnn和cuda的bin
目录
python
import os
os.add_dll_directory("C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v12.6\\bin")
os.add_dll_directory("C:\\Program Files\\NVIDIA\\CUDNN\\v9.3\\bin\\12.6")
import cv2
count = cv2.cuda.getCudaEnabledDeviceCount()
print(count)
2.4 无法打开文件"pythonxxx_d.lib"
问题现象
:提示无法打开文件"pythonxxx_d.lib"
解决方法
:主要因为使用vs2022编译方式为Debug,并不是Release。项目构建方式换成Release就可以了。pythonxxx_d.lib是CPython的debug版本。