python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > OpenCV  CUDA  Python环境搭建

OpenCV 4.7 + CUDA 11.2 + Python 3.9.x 环境搭建的实现步骤

作者:fundoit

本文详细介绍了在Windows系统下编译支持CUDA的OpenCV-Python环境的完整流程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

目录

  1. 准备工作
  2. CMake 编译
  3. VS 编译
  4. 验证
  5. 常见问题解决
  6. 附录:CMake 配置日志

OpenCV 是一个开源计算机视觉库,提供了许多图像处理和计算机视觉算法的实现。它支持多种编程语言,包括 C++、Python、Java 等。

OpenCV-Python 是 OpenCV 的 Python 接口,它提供了 Python 开发者使用 OpenCV 库的便利性。它可以在 Python 中使用 OpenCV 的所有功能,并且可以与其他 Python 库集成,如 NumPy、SciPy 等。

OpenCV 中提供了 GPU 模块,可以用来加速图像处理的相关运算。OpenCV 的 GPU 模块是使用 CUDA 编写的。

OpenCV 官方关于 CUDA 的说明及范例:https://opencv.org/

Ⅰ、准备工作

硬件环境

软件环境

  1. 下载 OpenCV 源码:opencv-4.7.0.tar.gz
  2. 下载 OpenCV Contrib 源码:opencv_contrib-4.7.0.zip

目录结构说明:
把代码解压到指定目录(例如 E:\code\external\opencv47)。
重要提示:源代码目录下必须事先拷贝好 .cache 文件夹,以避免编译时下载失败。

  1. 安装 CMake:推荐版本 cmake-3.26.0-windows-x86_64.msi。
  2. 安装 Anaconda:推荐 Anaconda3-2022.10-Windows-x86_64.exe。
  3. 安装 CUDA 开发工具包:
    • 本人亲测了不同的 CUDA SDK 版本,编译结果如下表:
CUDA 版本OpenCV 4.7.0OpenCV 4.10.0OpenCV 4.12.0
cuda-v11.2 & cudnn8.1.0
cuda-v12.4 & cudnn8.9.7
cuda-v12.6 & cudnn8.9.7
  1. 安装 Visual Studio 2019。

Ⅱ、CMake 编译

1. 打开 cmake-gui

按照教程安装好 CUDA 和 Anaconda 后,打开 CMake 界面,设置 OpenCV 源码路径(Source Code)和构建路径(Build)。

注意:

第一次点击 Configure,选择 Visual Studio 16 2019 和 x64 架构,点击 Finish。第一次编译完成后,进行以下配置:

  1. 编译 World 模块:在 Search 框搜 world,勾选 BUILD_opencv_world。这将把所有 OpenCV 库编译在一起,无需单独添加每个小模块。
  2. 启用非自由算法:在 Search 框搜 NON,勾选 OPENCV_ENABLE_NONFREE。

2. 设置 Python 路径

此步骤旨在将 CUDA 版本的 OpenCV 安装到 Python 环境中。

  1. 构建 Python 绑定:在 Search 框搜 BUILD,勾选 BUILD_opencv_python3(若搜索不到需手动添加)。

环境确认:
确认当前使用的 Python 环境(如 Anaconda base 或自定义虚拟环境)已安装 numpy(编译必需):

conda list
pip3 install numpy

手动设置路径:
由于虚拟环境可能未添加到系统环境变量,CMake 可能无法自动找到 numpy 头文件等路径。需在 CMake 界面手动设置以下变量(以 Python 3.11 和 3.8 为例):

3. 设置 CUDA

  1. 添加 Contrib 模块:在 Search 框搜 MODULES,在 OPENCV_EXTRA_MODULES_PATH 项中,添加 opencv_contrib 源码中的 modules 目录。

    • 路径示例:E:/code/external/opencv_contrib-4.7.0/modules
    • 注意:必须使用正斜杠 / 或双反斜杠 \\。若不设置,会报错:CUDA: OpenCV requires enabled 'cudev' module from 'opencv_contrib'。
  2. 启用 CUDA 支持:在 Search 框内输入 CUDA,勾选以下两项:

    • WITH_CUDA
    • OPENCV_DNN_CUDA
    • (BUILD_CUDA_STUBS 可选,通常不勾选)

    关于 cuDNN:如果忘记将 cuDNN 解压到 CUDA SDK 目录内,解压后必须在 CMake 中点击 Delete Cache 然后重新 Configure,否则会报找不到 cuDNN。

    关于 Nvidia Video Codec SDK:

    • 若不需要视频编解码功能,可在 CMake 中取消勾选 WITH_NVCUVID 与 WITH_NVCUVENC。
    • 若需要,需下载 Nvidia Video Codec SDK,解压后将 Lib 和 Interface 中的文件分别复制到 CUDA Toolkit 的 lib 和 include 目录中。

    设置完成后,再次点击 Configure,直到下方日志显示 Configure done。

  3. 数学优化:搜索框输入 fast,勾选 ENABLE_FAST_MATH 和 CUDA_FAST_MATH。

    • 注:启用此选项可能会牺牲少量精度以换取更快的浮点运算速度。
  4. 设置显卡算力:搜索框输入 cuda,找到 CUDA_ARCH_BIN。

    • 根据显卡型号修改算力值。例如 GTX 1060 对应的算力为 6.1。
    • 删除其他不需要的算力版本,仅保留 6.1(或多张显卡对应的算力值,用空格分隔)。

4. 设置 ICONV 库

确保相关配置无误后,点击 Generate 开始生成工程,直到出现 Generating done!。

5. 常见警告和错误处理

(1) 模块下载失败

(2) 警告:OPENCV_GENERATE_SETUPVARS

(3) 路径格式错误

(4) Python 未被正确识别

(5) cuDNN 版本不匹配

Ⅲ、VS 编译

1. 编译源码

  1. 点击 CMake 中的 Open Project,启动 Visual Studio 2019 加载生成的解决方案。
  2. 等待加载完毕,顶部工具栏选择 Release 和 x64。
  3. 在“解决方案资源管理器”中,找到 CMakeTargets -> ALL_BUILD。
  4. 右键点击 ALL_BUILD -> “生成”。
  5. 编译过程可能需要一小时左右,直到输出显示全部成功。
    • 检查:确保在 bindings 目录下生成了 opencv_python3 项目,否则无法在 Python 中使用 CUDA 加速。

2. 安装库到 Python

  1. 在“解决方案资源管理器”中,找到 CMakeTargets -> INSTALL。
  2. 右键点击 INSTALL -> “生成”。
  3. 等待结束后:
    • 在构建目录的 lib\python3\Release 下可看到 cv2.cp39-win_amd64.pyd (版本号可能不同)。
    • 在 Python 环境的 Lib\site-packages 目录下(如 D:\rady\anaconda3\Lib\site-packages),应能看到 cv2 文件夹及相关文件。

至此,Python 环境的 GPU 版本 OpenCV 已安装成功。

3. 编译报错解决

Ⅳ、验证

验证方法

方法一:命令行验证
打开 Anaconda Prompt 或 CMD,运行以下代码:

import cv2
print(cv2.__version__)
print(cv2.cuda.getCudaEnabledDeviceCount())

或者一行命令:

python -c "import cv2;print(cv2.__version__);print(cv2.cuda.getCudaEnabledDeviceCount());"

如果输出了版本号且设备计数大于 0,则安装成功。

方法二:Jupyter Notebook 验证
在 Jupyter Notebook 中新建单元格,运行上述 Python 代码进行验证。

验证失败常见问题

(1) import cv2 报错(转义字符问题)

(2) Python 版本冲突

(3) 多次 import 报错

(4) 多虚拟环境与多 CUDA 版本

附录:CMake 3.26 配置日志记录 (摘要)

Selecting Windows SDK version 10.0.19041.0 to target Windows 10.0.17134.
Detected processor: AMD64
CMAKE_VERSION: 3.26.0
CMAKE_SYSTEM: Windows-10.0.17134
CUDA detected: 11.2
CUDA: Using CUDA_ARCH_BIN=6.1
CUDA NVCC target flags: -gencode;arch=compute_61,code=sm_61;-D_FORCE_INLINES
...
General configuration for OpenCV 4.7.0 =====================================
  Version control:               703f139
  Extra modules:
    Location (extra):            D:/code/external/opencv_contrib47/modules
  Platform:
    Host:                        Windows 10.0.17134 AMD64
    CMake:                       3.26.0
    CMake generator:             Visual Studio 16 2019
    MSVC:                        1929
  NVIDIA CUDA:                   YES (ver 11.2, CUFFT CUBLAS FAST_MATH)
    NVIDIA GPU arch:             61
  cuDNN:                         YES (ver 8.1.0)
  Python 3:
    Interpreter:                 D:/rady/anaconda3/python.exe (ver 3.9.13)
    Libraries:                   D:/rady/anaconda3/libs/python39.lib
    numpy:                       .../numpy/core/include
    install path:                D:/rady/anaconda3/Lib/site-packages/cv2/python-3.9
  OpenCV modules:
    To be built:                 aruco barcode ... world xfeatures2d ...
    Non-free algorithms:         YES
-----------------------------------------------------------------
Configuring done (33.5s)
Generating done (41.5s)

到此这篇关于OpenCV 4.7 + CUDA 11.2 + Python 3.9.x 环境搭建的实现步骤的文章就介绍到这了,更多相关OpenCV CUDA Python环境搭建内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文