【opencv】【gpu】windows10下opencv4.8.0-cuda python版本源码编译教程
文章目录
前言
opencv是一个开源的计算机视觉库,包含了核心模块和扩展模块,提供了基础的图像处理和计算机视觉算法,以及一些机器学习工具。而opencv contrib是opencv社区贡献的一组扩展模块之一,包含了一些较为新颖和实用的算法和工具函数,提供了一些高级的图像处理和计算机视觉算法。这些功能和算法可能不适合所有用户或者还处于实验性阶段。opencv contrib模块中的代码由社区贡献者开发和维护,它们提供了一些在opencv核心库中尚未包含的新特性和实验性功能。
准备工具
cmake、vs2019、opencv4.8.0、opencv_contrib-4.8.0、anaconda、cuda、cudnn
anaconda/cuda/cudnn
安装cuda、cudnn可以参考此前博主的【】,因为对于新手来说,需要注意的细节比较多,这里不浪费篇幅重复讲述了。
anaconda创建环境(选做)
为了将cuda版本的opencv安装到虚拟环境中,安装到默认环境(base)不需要执行此步骤。
# 搭建opencv环境
conda create -n opencv_onnx_gpu python=3.10.9 -y
# 激活环境
activate opencv_onnx_gpu
虚拟环境中需要安装numpy,后续的编译过程中需要。
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple numpy
安装原生python(选做)
在使用 cmake 为 anaconda 新建的虚拟环境安装 opencv 时,需要在主机上安装一个与虚拟环境中的 python 版本一致的原生环境,这是由于cmake 需要在构建过程中使用与虚拟环境中的 python 版本一致的 python 解释器来生成适用于该版本的 python 绑定。
博主在anaconda创建的虚拟环境python为3.10,因此需要安装了python3.10原生版本,否则即使通过编译但始终无法使用opencv-python。

原生python官网下载地址,选择windows版本。

这里通过激活虚拟环境查看安装对应的版本,博主不确定这种微小版本的差异会不会影响后续编译测试,所以最好都保持一致。

勾选加入系统环境后直接安装。

配置环境变量,这里可能出现cmd使用的python版本还是使用anaconda的base环境的情况,这是因为在环境变量path中anaconda的顺序排在原生python的前面,调整原生python的路径在anaconda的base之前即可。

cmake
cmake官方下载地址,下载cmake-3.27.7-windows-x86_64.msi。

添加到环境和安装路径博主根据自身情况作出了修改,其他都是默认安装。

出现以下界面安装成功。

opencv4.8.0
opencv官方下载地址,下载opencv – 4.8.0 sources,下载解压opencv-4.8.0.zip。

opencv_contrib
opencv_contrib官方下载地址,选择opencv对应的contrib版本,例如opencv4.8.0对应就是opencv_contrib-4.8.0.zip。下载后直接解压。

cmake编译
- 打开cmake,where is the source code是opencv sources(博主是opencv-4.8.0)的文件夹位置,where to build the binaries是编译opencv保存的文件夹位置(自定义),在左下角第一次点击configure。

- 选择对应vs的版本(博主是vs2019),系统选择x64,最后点右下角finish,显示configuring done。

- 安装到默认环境(base)不需要执行此步骤,该步骤步骤的目的是安装cuda版本opencv到用户自定义的虚拟环境中,分别将路径指向自定义虚拟环境的对应位置 : python3_executable、python3_include_dir、python3_library、python3_numpy_include_dirs(需要安装numpy)、python3_packages_path。

4.在search搜索框搜索带cuda的关键字,全部勾选。

- search搜索框搜索opencv_extra_modules_path,添加解压的opencv_contrib中的modules的路径,再搜索并勾选opencv_enable_nonfree选项。

- build_opencv_world可以将所有opencv的库都打包编译在一起,但是具体的工程又不建议这种模式。

- 对于java、js、tests相关选项的选择,用search搜索框分别搜索“java”,“js”,“tests”,根据需要选中和取消相关选项,默认都是选中,博主都取消了,必须勾选build_opencv_python3,决定了能否在python中使用gpu加速,第二次点击configure。

- 显示configuring done后,将cuda_arch_bin显卡算力内容改成自己显卡的算力。官网查看显卡算力地址,删除小于自己显卡算力的部分,再搜索并勾选enable_fast_math选项,第三次点击configure。

- 显示configuring done后,点击generate,显示generating done,成功完成cmake编译,在输出的opencv保存文件夹位置中存在就生成了opencv.sln文件。

cmake编译过程是会从githup上下载数据,但是一般都会出现下载失败的情况,这里建议读者先跳到【可能出现的问题】这一小节,来确认是不是自己也出现了下载失败的情况。
vs2019编译
- 确保在解决方案的bindings这个目录下有opencv_python3,否则即使编译成功仍然不能使用cuda加速。

- 使用vs2019 (以管理员方式运行) 打开刚刚编译工程opencv.sln,在release|x64模式下,在解决方案资源管理器—>cmaketargets—>右键点击all_build–>生成。

- 同样在release|x64模式下,在解决方案资源管理器—>cmaketargets—>右键点击install–>生成。

没有任何报错信息就是编译完成,在xxx\lib\python3\release文件夹下可以看到cv2.cpxxx-win_amd64.pyd文件。

同时,在虚拟环境中,可以在路径lib\site-packages下看到cv2文件夹

进入cv2目录打开config.py可以看到虚拟环境opencv_onnx_gpu依赖于cmake编译的opencv(where to build the binaries)。

博主将依赖的opencv拷贝到了虚拟环境中,并修改了依赖的路基。

可能出现的问题
cmake编译过程中可能出现的问题
cmake编译出现download failed的问题。

在where to build the binaries位置里面有个cmakedownloadlog.txt,将里面下载链接复制到浏览器进行下载,

将其和where is the source code里面的.cache文件夹里面内容相对应,下图是下载失败时候,文件大小是0kb,手动下载完成后进行替换。

对于部分文件则需要将网页以另存为的方式进行替换,注意一定不要以复制网页内容粘贴到空文件的方式进行替换,这是无效的的。

将整个.cache都用同样的方式进行处理。

强调一点,出现这种问题,可以暂时先走完cmake编译过程,因为每一次configuring都会有新的下载内容,然后再一次性将.cache的内容进行完整的替换,最后进行configuring和generate。
这里博主提供自己的【.cache百度云 ,提取码:ctl6 】
vs2019编译过程中可能出现的问题
通常是对于部分资源,vs2019没有管理员操作权限,因此只需要用管理员身份重新打开进行操作即可。

测试使用gpu
这里用一段简单的python代码验证安装完成的opencv是否支持gpu设备。
import cv2
# 检查是否支持cuda
if cv2.cuda.getcudaenableddevicecount():
print("检测到支持cuda的设备数量:", cv2.cuda.getcudaenableddevicecount())
else:
print("未检测到支持cuda的设备")
验证成功,oepncv-cuda版本源码编译成功。

总结
尽可能简单、详细的介绍windows10下python版本opencv4.8.0-cuda版本用源码进行编译的详细流程。
发表评论