簡體   English   中英

OpenCV Python 與 CUDA 在 Windows 上:DLL 加載失敗

[英]OpenCV Python with CUDA on Windows: DLL Load Failed

我正在嘗試讓 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 擴展正在尋找依賴項的位置有關。

希望我已經包含了所有相關信息。

可能是因為你沒有安裝OpenCV,你下載了它,如果你不想花時間配置額外的路徑來確保python找到正確的opencv包,你只需要使用'pip'安裝它:

pip install opencv-contrib-python

它可能會解決您的問題,並且C++軟件仍然可以使用下載的版本而不會發生沖突。

安裝參考

導入cv2時我收到了相同的錯誤消息,但我從源代碼編譯了OpenCV ,包括來自opencv_contrib的額外模塊,因為我想要一個包含cuda*python3模塊的Win64版本。

解決方法

即使在投入大量時間之后,我也無法提供令人滿意的解決方案。 但我的有效解決方法是使用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.dllopencv_world455.dllC:\\opencv-py39
  • 將所有與 CUDA 相關的共享庫( %CUDA_PATH%\\bin\\*.dll )復制到C:\\opencv-py39
  • 將所有英特爾 TBB共享庫( %ONEAPI_ROOT%\\tbb\\latest\\redist\\intel64\\vc14\\*.dll%ONEAPI_ROOT%\\tbb\\latest\\redist\\intel64\\vc14\\*.dllC:\\opencv-py39
  • 設置環境變量PYTHONPATH=C:\\opencv-py39

根據您選擇的構建選項,此列表可能不確定。

更多細節

這種解決方法繞過了我遇到的問題,即使環境變量設置正確並且 C++ 示例程序按預期構建和執行,我的cv2.cp39-win_amd64.pyd的依賴項也沒有從它們的特定安裝目錄加載。 我想這是特定於CPython的共享庫加載器的。 我發現有證據表明這個問題可能是在 Python 3.8 中引入的。

使用SysInternals procmon實用程序仔細查看會發現,python 解釋器在探測所有配置的 DLL 搜索目錄時停止使用正確的模塊名稱。 即它開始在當前工作目錄中尋找opencv_world455.dll ,然后在 Python 目錄等中,但是當它開始查看 PATH 的目錄時,它使用了錯誤的模塊名稱,如<stdin>或類似的損壞名稱。 也許我應該向 CPython 提交一個錯誤報告......

添加到@salchint解決方法:

我的安裝遇到了同樣的ImportError問題並解決了它,這要歸功於我旁邊的 Anaconda 安裝。

事實證明,所有丟失的 DLL 都可以在.../Anaconda3/Library/bin中找到。 因此,將文件夾包含到您的腳本中:

import os
os.add_dll_directory('path_to_Anaconda/Anaconda3/Library/bin')

為我解決了錯誤。 請注意,此文件夾我的路徑中,應該可以發現,但 Python 有(或有?)一些問題

一個更干凈的解決方案(但仍然是一種解決方法)是將此命令添加到YOUR_PYTHON_PATH/Lib/site-packagescv2模塊的__init__.py文件

我在這里寫得更詳細。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM