当前位置:   article > 正文

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

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

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

本人就职于国际知名终端厂商,负责modem芯片研发。
5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G技术研究。


博客内容主要围绕:
       5G/6G协议讲解
       高级C语言讲解
       Rust语言讲解



一、安装cuda支持的opencv-python Windows版本

1.1 基础软件包准备

需要安装CUDA ToolkitNVIDIA cudnnvs2022cmakepython,这一节主要介绍一下CUDA ToolkitNVIDIA cudnn的安装,其他的都比较常用了,相信大家已经在使用了。

1.1.1 检查是否安装了NVIDIA CUDA Toolkit

在Windows命令行窗口输入

nvidia-smi
  • 1

查看是否安装了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

pip install numpy
pip install opencv-python
pip install opencv-contrib-python
  • 1
  • 2
  • 3

1.3 使用cmake-gui配置项目参数

1.3.1 配置opencv代码目录和编译目录

在这里插入图片描述

1.3.2 配置编译器,并初次构建

在这里插入图片描述

1.3.3 配置宏定义,开启cuda功能

宏名
WITH-CUDAON
OPENCV-DNN-CUDAON
ENABLE_FAST_MATHON
OPENCV_ENABLE_NONFREEON
BUILD_opencv_worldON

上面都是布尔参数,下面配置的是opencv的外部库,

在这里插入图片描述

执行配置过程,正常会失败,没关系我们还有一些参数没有配置

1.3.4 继续配置宏定义

宏名
CUDA_FAST_MATHON
CMAKE_CONFIGURATIONTYPESRelease

下面配置的是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_BIN8.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 测试安装正确性

执行下面的代码

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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述

可以看到输出的结果为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”

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.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

解决方法:需要指定cudnn和cuda的bin目录

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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

2.4 无法打开文件“pythonxxx_d.lib”

问题现象:提示无法打开文件“pythonxxx_d.lib”

解决方法:主要因为使用vs2022编译方式为Debug,并不是Release。项目构建方式换成Release就可以了。pythonxxx_d.lib是CPython的debug版本。

在这里插入图片描述



在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/1002694
推荐阅读
相关标签
  

闽ICP备14008679号