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

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

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


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



文章目录

  • 一、安装cuda支持的opencv-python Windows版本
    • 1.1 基础软件包准备
      • 1.1.1 检查是否安装了NVIDIA CUDA Toolkit
      • 1.1.2 安装cudnn
    • 1.2 安装cuda支持的opencv-python
      • 1.2.1 首先需要下载opencv和opencv-contrib
      • 1.2.2 解压上面的安装包,并创建下面的目录结构
      • 1.2.3 安装numpy、opencv-python、opencv-contrib-python
    • 1.3 使用cmake-gui配置项目参数
      • 1.3.1 配置opencv代码目录和编译目录
      • 1.3.2 配置编译器,并初次构建
      • 1.3.3 配置宏定义,开启cuda功能
      • 1.3.4 继续配置宏定义
      • 1.3.5 查询NVIDIA GPU算力,并配置相关宏定义
      • 1.3.6 检查python版本是否正确
      • 1.3.7 生成配置文件
    • 1.4 编译和安装
      • 1.4.1 打开vs2022构建项目
      • 1.4.2 安装
    • 1.5 测试安装正确性
  • 二、常见错误处理
    • 2.1 CUDA Toolkit 版本太低
    • 2.2 cuDNN宏定义没有指定到具体的库文件名
    • 2.3 python加载cv2的时候显示 dll 加载失败
    • 2.4 无法打开文件“pythonxxx_d.lib”

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

1.1 基础软件包准备

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

1.1.1 检查是否安装了NVIDIA CUDA Toolkit

在Windows命令行窗口输入

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

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-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 cv2count = 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”

Traceback (most recent call last):File "d:\programming\fanduel-boggle-cheat\opencv_cuda_cudnn.py", line 4, in <module>import cv2File "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 bootstrapnative_module = importlib.import_module("cv2")^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "C:\Users\evank\anaconda3\envs\opencv_cuda_cudnn\Lib\importlib\__init__.py", line 126, in import_modulereturn _bootstrap._gcd_import(name[level:], package, level)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ImportError: DLL load failed while importing cv2: The specified module could not be found.

解决方法:需要指定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 cv2count = cv2.cuda.getCudaEnabledDeviceCount()
print(count)

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

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

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

在这里插入图片描述



在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/403612.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

节点使用简介:comfyui-photoshop

1、安装comfyui-photoshop 略过 一点要注意的是&#xff1a;在Photoshop上的安装增效工具&#xff0c;要通过Creative Cloud 桌面应用程序进行安装&#xff0c;才能成功在增效工具中显示&#xff0c;直接通过将文件解压到Plug-ins路径行不通&#xff08;至少对我来说行不通&am…

C++语言基础|函数的嵌套与递归

C语言基础|函数的嵌套与递归 1. 函数的嵌套调用2. 函数的递归调用 1. 函数的嵌套调用 在一个函数中调用其它函数叫函数的嵌套。C中函数的定义是平行的&#xff0c;除了main()以外&#xff0c;都可以互相调用。函数不可以嵌套定义&#xff0c;但可以嵌套调用。比如函数1调用了函…

【百度】25届秋招内推码

内推码 IV1RBB 介绍 &#x1f4e3; 百度TPG技术中台事业群组—深度学习技术平台部 25届校招正在进行中&#xff0c;可通过定向内推形式get校招绿色通道 &#xff01; 欢迎联系我定向内推 &#x1f31f;【部门介绍】 飞桨&#xff08;PaddlePaddle&#xff09;以百度多年的深度…

前端技巧——复杂表格在html当中的实现

应用场景 有时候我们的表格比较复杂&#xff0c;表头可能到处割裂&#xff0c;我们还需要写代码去完成这个样式&#xff0c;所以学会在原生html处理复杂的表格还是比较重要的。 下面我们来看这一张图&#xff1a; 我们可以看到有些表头项的规格不太一样&#xff0c;有1*1 2*…

阶段练习——minishell

目录 &#xff08;一&#xff09;文件复制&#xff08;my_cp函数&#xff09; &#xff08;二&#xff09;文件内容查看&#xff08;my_cat函数&#xff09; &#xff08;三&#xff09;切换目录&#xff08;my_cd函数&#xff09; &#xff08;四&#xff09;列出目录内容…

Elasticsearch、Easy-es 快速入门 SearchAfterPage分页 若依前后端分离 Ruoyi-Vue SpringBoot

一、环境安装 Elasticsearch ik分词器 1.1 下载解压Elasticsearch-7.x版本&#xff0c;越高越好&#xff0c;低版本有Log4j漏洞&#xff0c;Easy-es目前支持7.x 1.2 IK中文分词器 将对应Elasticsearch版本IK放进文件夹&#xff0c;Elasticsearch-7.6.1&#xff0c;ik对应版…

Postgres 超时 (Timeout) 详解

原文地址 https://www.bytebase.com/blog/postgres-timeout/ PostgreSQL 提供各种超时 (Timeout) 设置&#xff0c;通过控制某些进程的持续时间来帮助管理和优化数据库操作。这些超时对于确保系统的稳定性和性能至关重要&#xff0c;尤其是在高流量或复杂查询的环境中。让我们…

STM32CubeMX生成stm32MP135中断优先级配置错误修正方法

0 修改方法 使用STM32CubeMX生成stm32MP135代码的中断优先级配置错误&#xff0c;将导致所有中断优先级设置不对。 如果设置EXTI0中断优先级为10&#xff0c;在STM32CubeMX中配置如下&#xff1a; 生成的中断优先级配置代码为&#xff1a; 正确写法应该将中断优先级左移3位&…

python从入门到精通:函数

目录 1、函数介绍 2、函数的定义 3、函数的传入参数 4、函数的返回值 5、函数说明文档 6、函数的嵌套调用 7、变量的作用域 1、函数介绍 函数是组织好的&#xff0c;可重复使用的&#xff0c;用来实现特定功能的代码段。 name "zhangsan"; length len(nam…

二叉树学习笔记

一、树的概念 树是一种非线性的结构&#xff0c;它是由n个有限结点组成的一个具层次关系的集合。&#xff08;像一颗倒着的树&#xff09; 特点&#xff1a; 有一个特殊的结点&#xff0c;称之为根结点&#xff0c;根结点没有前驱结点 除了根节点以外&#xff0c;其余节点别分…

centos 7.9 迁移到 openEuler22.03-LTS-SP3

openEuler移植案例 | 移植操作指南 | openEuler社区官网 cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) 需要两台机器&#xff0c; 不通过原因 在待升级节点检查是否有安装x2openEuler-core时, 发现已经安装了,不能作为升级节点。该节点为&#xff1a; 解…

MySQL中处理JSON数据

​ 大家好&#xff0c;我是程序员小羊&#xff01; 前言 在大数据时代&#xff0c;处理和分析结构化与非结构化数据的能力对于企业的成功至关重要。MySQL作为一种广泛使用的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;在应对传统结构化数据方面表现出色。然…

c++每日练习记录第1天

笔记&#xff1a; C 中&#xff0c;isalnum 函数用于检查一个字符是否是字母数字字符&#xff0c;isalnum 函数定义在 头文件中。双指针法&#xff0c;双指针法是一种常用的算法技巧&#xff0c;特别适用于处理数组、字符串等线性数据结构中的问题。这种方法通常涉及到两个指针…

12、springboot3 vue3开发平台-前端-记住我功能实现

文章目录 1. 前端用户信息保存2. 登录页面添加3. 后端实现 1. 前端用户信息保存 使用pinia持久化保存用户名密码 src/stores/remember-me.js // 定义 store import { defineStore } from "pinia" import {reactive} from vueexport const useRememberMeStore defi…

图书管理管理系统 (GUI)

目录 Java程序设计课程设计 图书管理管理系统 一、前言 1 研究背景 2 目的和意义 3编程环境与工具 二、图书管理系统概述 1主要业务流程 三、需求分析与设计 1 系统需求分析 2.功能需求 3.性能需求 4. 安全需求 2 数据库设计 3 界面设计 四、 总…

Solidworks二次开发:通过XYZ点的曲线

在SolidWorks中&#xff0c;通过XYZ点创建曲线是一种根据一组点的坐标生成三维曲线的方法。这种方法适用于需要根据特定点集设计曲线的情况&#xff0c;比如在建模复杂几何形状或执行逆向工程时。在SolidWorks中通过XYZ点创建曲线&#xff0c;操作步骤如下 打开SolidWorks并新建…

利用modelscope下载模型

1. modelscope的简介 ModelScope作为一个先进的“模型即服务”(MaaS)平台&#xff0c;它的核心在于汇聚人工智能领域的尖端模型&#xff0c;降低了在现实世界应用这些前沿技术的门槛。该平台通过ModelScope库展现了其强大功能&#xff0c;这一库专为简化开发者体验而设计&…

Element-06.案例

一.目标 实现下面这个页面&#xff0c;表格中的数据使用axois异步加载数据 二.实现步骤 首先在vue项目的views文件夹中新建一个tlias文件夹&#xff0c;用来存储该案例的相关组件。员工页面组件&#xff08;EmpView.vue&#xff09;和部门页面组件&#xff08;DeptView.vue&…

C语言指针详解-上

C语言指针详解-上 前言1.指针的基本概念1.1指针是什么1.2指针的声明与初始化1.3取地址符&和解引用符*& 运算符用于**获取变量的地址*** 运算符用于访问指针指向的值 2.指针的类型常见数据类型的指针指针与数组、字符串数组指针结构体指针函数指针二级指针void指针 3.指…

【数据结构】二叉树(二)遍历

上篇已经了解对二叉树有了大概了解&#xff0c;本篇学习二叉树的前序、中序、后序及层序遍历的递归与非递归共7种遍历方法&#xff0c;快收藏吧~ 目录 1、前序遍历 递归方式&#xff1a; 迭代方式&#xff1a; 2、中序遍历 递归方式&#xff1a; 迭代方式&#xff1a; …