安装cuda支持的opencv-python Windows版本(包含常见错误处理)

博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持!
博主链接

本人就职于国际知名终端厂商,负责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

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版本。


相关推荐
李子红了时9 小时前
EncFS MP中文版汉化下载(免费文件加密工具)
windows·安全
辻弋2019 小时前
五年前的旅行视频糊成马赛克?Video2X用Real-ESRGAN逐帧重建细节,但只支持Windows、集显用户建议直接放弃
服务器·数据库·windows·游戏引擎·电脑
会飞的土拨鼠呀9 小时前
Windows 系统关闭虚拟内存文件pagefile.sys
windows
北冥有鱼被烹10 小时前
砷化镓与磷化铟:光模块的地基——从化学键到AI缺货潮的底层逻辑
人工智能·python
for_ever_love__11 小时前
线性回归与梯度下降——从零手写一个模型
python·机器学习·线性回归·梯度下降
code_whiter12 小时前
7.自动化测试常用函数
python·功能测试
传奇开心果编程12 小时前
【Compose Multiplatform 跨端开发学与练】第7课 平台适配与互操作
android·windows·学习·ui·ios·kotlin·composer
工作10年+,存储芯片行业12 小时前
Linux NVMe 中断排查与性能优化:CPU 亲和性
linux·运维·服务器·windows·性能优化·ssd·pcie
小园子的小菜12 小时前
Python协程深度解析:从原理演进到实战避坑
后端·python
砚底藏山河12 小时前
量化实战:截面因子有效性检验(IC 分析与分层回测)
java·python·金融·maven