文章目录
- 附件:GPU和CUDA的关系 —— 开发人员通过CUDA可以使用GPU的计算能力来加速各种计算任务,并提高计算性能和效率。
- 一、环境配置
- (0)我的电脑配置环境
- (1)CUDA + cuDNN下载与安装
- (2)OpenCV源码下载与环境配置
- (3)ImportError: DLL load failed while importing cv2: 找不到指定的模块。
- (4)解决方法:添加DLL路径
- 二、测试样本:上传图像到GPU + 从GPU下载图像
- 三、python使用GPU读取视频
附件:GPU和CUDA的关系 —— 开发人员通过CUDA可以使用GPU的计算能力来加速各种计算任务,并提高计算性能和效率。
GPU(图形处理器,Graphics Processing Unit)
是一种专门设计用于图形渲染和并行计算的硬件设备
。传统上,GPU 主要用于图形渲染,即将 3D 数据转换为 2D 图像,以显示在计算机屏幕上。然而,由于 GPU 在并行计算方面的强大能力,逐渐引起了开发者的关注,并开始将 GPU 应用于通用目的的并行计算。现代 GPU 具有大量的处理单元(称为 CUDA Core 或 Shader Core),可以同时执行多个并行计算任务,从而在适合并行计算的任务上提供巨大的计算能力。
CUDA(计算统一设备架构,Compute Unified Device Architecture)
是由 NVIDIA 开发的一种用于通用计算的并行计算平台
,它提供了一组编程接口和工具,通过 CUDA,开发者可以使用编程语言(如 CUDA C/C++、CUDA Python)编写 GPU 内核函数(称为 CUDA Kernel),并使用 NVIDIA 的 GPU(图形处理器)执行这些内核函数,以加速各种计算任务,包括图形渲染、科学计算、机器学习等。
两者关系:CUDA是一种用于编写并行计算任务的平台和编程模型,而GPU是实际用于执行计算任务的硬件设备。开发人员通过CUDA可以使用GPU的计算能力来加速各种计算任务,并提高计算性能和效率。
一、环境配置
(0)我的电脑配置环境
windows 10
RTX 3090
cuda 11.8.0
python 3.9.16
opencv 4.6.0
# 注意,安装GPU版的openvc之前需要删除原本的opencv
# 备注:OpenCV官网下载的源码只支持python3.9
(1)CUDA + cuDNN下载与安装
请看博主的这篇文章:https://blog.csdn.net/shinuone/article/details/129054444
(2)OpenCV源码下载与环境配置
OpenCV下载链接Build OpenCV (including Python) with CUDA on Windows,打开后选择找到OpenCV C++ CUDA builds
跳转到下载页面,或者直接跳转下载页面OpenCV C++ CUDA builds。
图解教程请看这篇文章
【步骤一】 选择与自己的电脑环境相支持的版本,OpenCV官网下载的源码只支持python3.9。
【步骤二】 点击opencv_contrib_cuda_4.6.0.20221106_win_amd64.7z
,下载并解压缩,得到两个文件夹:install + lib
【步骤三】 添加系统环境变量:电脑 + 属性 + 高级系统设置 + 环境变量 + 系统变量 + Path + 新建 +D:\AI\opencv_contrib_cuda_4.6.0.20221106_win_amd64\install\x64\vc17\bin
【步骤四】 提取源码中的python3\cv2.cp39-win_amd64.pyd并保存到自己的环境中。注意:cp39表示只支持python3.9版本。
(1)复制文件D:\AI\opencv_contrib_cuda_4.6.0.20221106_win_amd64\lib\python3\cv2.cp39-win_amd64.pyd
(2)将其保存到Python环境或Anaconda虚拟环境的site-packages中D:\Anaconda\envs\py39\Lib\site-packages\cv2.cp39-win_amd64.pyd
【步骤四】
(3)ImportError: DLL load failed while importing cv2: 找不到指定的模块。
- 方式一:在cmd中测试是否安装成功
python -c "import cv2; print(f'OpenCV: {cv2.__version__} for python installed and working')"
- 方式二:在Pycharm中测试是否安装成功
import cv2
print(f'OpenCV: {cv2.__version__} for python installed and working')
【BUG】将上述代码复制到Pycharm中,系统显示No module named 'cv2'
且运行结果如下:
(4)解决方法:添加DLL路径
添加三行代码(需要根据自己的安装环境修改地址)
import os
# 备注:CUDA的安装路径
# 备注:opencv_contrib_cuda的安装路径
# os.add_dll_directory('C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v12.0\\bin')
os.add_dll_directory(r'D:\CUDA\CUDA02\bin')
os.add_dll_directory(r'D:\AI\opencv_contrib_cuda_4.6.0.20221106_win_amd64\install\x64\vc17\bin')
import cv2
print(f'OpenCV: {cv2.__version__} for python installed and working')
在源码中系统仍会显示
No module named 'cv2'
,但是可以运行成功且不影响后续使用。
运行结果如下:
二、测试样本:上传图像到GPU + 从GPU下载图像
import os
os.add_dll_directory(r'D:\CUDA\CUDA02\bin')
os.add_dll_directory(r'D:\AI\opencv_contrib_cuda_4.6.0.20221106_win_amd64\install\x64\vc17\bin')
import cv2
print(f'OpenCV: {cv2.__version__} for python installed and working')
# (1)读取图像
image = cv2.imread('your_template.png')
if image is None:
print("无法加载图像1")
# (2)GPU设置
# print(cv2.cuda.getCudaEnabledDeviceCount()) # 检查是否有可用的 GPU
cv2.cuda.setDevice(0) # 设置使用的 GPU 设备索引,0 表示第一个 GPU
# cv2.cuda.printCudaDeviceInfo(0) # 打印 GPU 设备信息
# (3)上传与下载
image_gpu = cv2.cuda_GpuMat() # 3.0创建一个空的GPU矩阵
image_gpu.upload(image) # 3.1将图像上传到GPU
screenshot = cv2.cuda.cvtColor(image_gpu, cv2.COLOR_RGB2BGR) # 3.2图像处理
screenshot = cv2.cuda.resize(screenshot, (400, 400))
result_cpu = screenshot.download() # 3.3从GPU下载处理后的图像到CPU
# (4)打印上传与下载前后的图像属性不改变
print("图像宽度: ", image.shape)
print("数据类型:", image.dtype)
print("在CPU下,原始图像格式:", type(image))
print()
print("在GPU下,处理后的图像格式:", type(screenshot))
print()
print("在CPU下,处理后的图像格式:", type(result_cpu))
print("图像宽度: ", result_cpu.shape)
print("数据类型:", result_cpu.dtype)
# (5)显示图像
if result_cpu is None:
print("无法加载图像2")
else:
cv2.imshow("Window", result_cpu)
cv2.waitKey(0)
cv2.destroyAllWindows()
三、python使用GPU读取视频
(1)opencv - python使用CUDA处理图像
(2)opencv - python使用CUDA读取视频
(3)opencv - C++使用CUDA的入门教程