【问题标题】:OpenCV Python with CUDA on Windows: DLL Load Failed在 Windows 上使用 CUDA 的 OpenCV Python:DLL 加载失败
【发布时间】:2020-02-14 16:57:46
【问题描述】:

我正在尝试让 OpenCV python 绑定与 CUDA 一起使用,但是当我运行时

import cv2

我收到以下错误:

OpenCV loader: os.name="nt"  platform.system()="Windows"
OpenCV loader: loading config: C:\opencv\build\python_loader\cv2\config.py
OpenCV loader: loading config: C:\opencv\build\python_loader\cv2\config-3.8.py
OpenCV loader: PYTHON_EXTENSIONS_PATHS=['C:/opencv/build/lib/python3/Release']
OpenCV loader: BINARIES_PATHS=['C:/opencv/build/bin/Release']
OpenCV loader: PATH=C:/opencv/build/bin/Release;C:\Program Files\Python38\Scripts\;C:\Program Files\Python38\;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\bin;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\libnvvp;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\CCM;C:\WINDOWS\CCM;C:\Perl64\c\bin;C:\Perl64\perl\site\bin;C:\Perl64\perl\bin;C:\WINDOWS\CCM;C:\WINDOWS\CCM;C:\WINDOWS\CCM;C:\Program Files\PuTTY\;C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\110\Tools\Binn\;C:\Program Files (x86)\Microsoft SQL Server\120\Tools\Binn\;C:\Program Files\Microsoft SQL Server\120\Tools\Binn\;C:\Program Files\Microsoft SQL Server\120\DTS\Binn\;C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\;C:\Program Files\Git\cmd;C:\Program Files\Git\mingw64\bin;C:\Program Files\Git\usr\bin;C:\Program Files\nodejs\;C:\Program Files (x86)\Yarn\bin\;C:\Program Files\NVIDIA Corporation\Nsight Compute 2019.5.0\;C:\opencv\build\install\x64\vc16\bin\;C:\Users\md249\AppData\Local\Microsoft\WindowsApps;
OpenCV loader: replacing cv2 module
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\opencv\build\python_loader\cv2\__init__.py", line 96, in <module>
    bootstrap()
  File "C:\opencv\build\python_loader\cv2\__init__.py", line 86, in bootstrap
    import cv2
ImportError: DLL load failed while importing cv2: The specified module could not be found.

我设置了以下环境变量:

OPENCV_DIR: C:\opencv\build\
PATH: $PATH;C:\opencv\build\install\x64\vc16\bin\;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\bin

由于我不明白的原因,OpenCV 似乎将二进制文件构建到多个不同的目录,所以我不确定将 PATH 和 OPENCV_DIR 指向哪里。

针对 cv2.cp38-win_amd64.pyd 运行 Dependency Walker 并不表示 OpenCV 或 CUDA 缺少任何依赖项。

.pyd 是否动态加载 Dependency Walker 可能无法捕获的任何其他依赖项? C++ 应用程序可以很好地加载 OpenCV,所以我想这个问题与 .pyd 扩展名在哪里寻找依赖关系有关。

希望我已包含所有相关信息。

【问题讨论】:

    标签: python windows opencv 64-bit


    【解决方案1】:

    这可能是因为你没有安装OpenCV,你下载了它,如果你不想花时间配置额外的路径来确保python找到正确的opencv包你只需要使用'pip'安装它:

    pip install opencv-contrib-python
    

    应该可以解决你的问题,C++软件仍然可以使用下载的版本,没有冲突。

    Install Reference

    【讨论】:

    • 您的评估不正确,我遇到了与 OP 相同的问题,我编译了正确配置所有路径的库。而且您关于安装 opencv-contrib-python 的建议也是错误的,因为 OP 显然希望 OpenCV 与 CUDA 一起使用,当您按照您的建议直接安装 opencv-contrib-python 时,它不支持 CUDA。
    【解决方案2】:

    我在导入 cv2 时收到相同的错误消息,但我从源代码编译了 OpenCV,包括来自 opencv_contrib 的额外模块,因为我想要一个 Win64构建包括 cuda*python3 模块。

    解决方法

    即使投入大量时间,我也无法提供令人满意的解决方案。但我的有效解决方法是使用 dumpbinDependency walker 以递归方式查找所有 cv2.cp39-win_amd64.pyd 依赖项,并从同一平面目录中提供所有这些依赖项,包括 cv2.cp39-win_amd64.pyd,其中你添加到PYTHONPATH

    在我的情况下,这意味着在从源代码编译 OpenCV 之后需要执行以下手动步骤:

    • 创建一个类似C:\opencv-py39的目录。
    • cv2.cp39-win_amd64.pyd复制到C:\opencv-py39
    • 将所有 OpenCV 共享库(${EXECUTABLE_OUTPUT_PATH}\*.dll 例如opencv_world455.dll)复制到C:\opencv-py39
    • 将所有与 CUDA 相关的共享库 (%CUDA_PATH%\bin\*.dll) 复制到 C:\opencv-py39
    • 将所有 Intel TBB 共享库 (%ONEAPI_ROOT%\tbb\latest\redist\intel64\vc14\*.dll) 复制到 C:\opencv-py39
    • 设置环境变量PYTHONPATH=C:\opencv-py39

    根据您选择的构建选项,此列表可能不确定。

    更多详情

    这个解决方法绕过了我遇到的问题,即我没有从特定安装目录加载我的cv2.cp39-win_amd64.pyd 的依赖项,即使环境变量设置正确并且 C++ 示例程序按预期构建和执行。我猜这是 CPython 的共享库加载器特有的。我发现evidence 这个问题可能是在 Python 3.8 中引入的。

    使用SysInternals procmon 实用程序仔细查看后发现,python 解释器在探测所有已配置的 DLL 搜索目录时停止使用正确的模块名称。 IE。它开始在当前工作目录中查找 opencv_world455.dll,然后在 Python 目录等中查找,但是当它开始查找 PATH 的目录时,它使用了错误的模块名称,例如 &lt;stdin&gt; 或类似的损坏名称。也许我应该向 CPython 提交错误报告...

    【讨论】:

      猜你喜欢
      • 2015-07-20
      • 2011-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多