Skip to content

leo-proger/OpenCV-CUDA-installation-in-Russian

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Установка OpenCV CUDA

Оригинал статьи - OpenCV-CUDA-installation.
Это перевод инструкции по сборке OpenCV-CUDA для Python 3 на Windows 10/11.
Работает только с видеокартами Nvidia.

Если вы просто хотите собрать модуль OpenCV для Python 3, то пропустите параграфы, связанные с CUDA.

Источники и ссылки по устранению неполадок

Данная инструкция основана на:

  • статье от Anindya - пошаговая сборка с помощью CMake GUI
  • статье от James Bowley - сборка с помощью консоли CMake и решение некоторых проблем

Ошибка ImportError

Статей выше будет достаточно для большинства случаев. Но в каких-то, даже если модуль был успешно установлен в Python, вы все равно можете увидеть это сообщение,
когда импортируете OpenCV через import cv2:

ImportError: DLL load failed while importing cv2: The specified module could not be found.

Этот случай подробно описан в разделе по устранению неполадок и почти полностью основан на этом большом GitHub issue. В общем, вся ваша сборка, вероятно, полностью удачна, это просто может быть Python не смог прочесть переменные окружения.

Используемый софт и конфигурация ПК

Протестировано на Windows 10 20H2 с процессором i7-10700 2.90ГГц и видеокартой GeForce RTX 2080 Ti

Софт:

  • Python 3.8.10
  • OpenCV 4.5.5
  • NumPy 1.21.6
  • CUDA Toolkit v11.6
  • cuDNN v8.3.3
  • Visual Studio Community 2019 v16.11.13
  • CMake 3.19.1

Все это делалось в апреле 2022 года

P.S.: в сентябре 2022 года все повторно проделано без проблем на таком же ПК, но уже на Windows 11, и на ноутбуке с
процессором i5 и старым ГПУ Quadro.

P.P.S.: процесс успешно повторен в конце 2023 года (без CUDA) на ноутбуке (Windows 11, i7 8-го поколения, Intel UHD
Graphics 620) с Python 3.10 и OpenCV 4.9.

P.P.P.S: в конце 2024 года все работает (с CUDA 11.6, Windows 11, Ryzen 5 5600x, RTX 2060 Super, Python 3.10, OpenCV
4.9.0)

Пошаговый процесс установки

Python, NumPy и pip

Установите Python 3.x любым удобным для вас
способом (оф. сайт, Anaconda, магазин
Майкрософт или создать виртуальное окружение).

Убедитесь, что у вас установлен модуль NumPy, иначе сделайте это в консоли pip install numpy. Удалите все версии
OpenCV pip uninstall opencv-python и pip uninstall opencv-contrib-python. Удалите папку
ВАШ_ПУТЬ_К_ПАПКЕ_С_PYTHON\Lib\site-packages\cv2 (Python обычно находится в AppData\Local\Programs)

Visual Studio

Скачайте Visual Studio (желательно 2019 года, скачать), выставите галочки как на скриншоте ниже:

image

Рекомендуется использовать английский язык, так как далее настройки будут приведены на этом языке. После всего нажмите установить (Install).

CUDA и cuDNN

Убедитесь, что ваша видеокарта поддерживает CUDA, и узнайте соответственно версию CUDA
Toolkit здесь. Сначала находите поддерживаемую архитектуру (вторая
таблица, колонка "Compute capability"), потом по зеленым квадратикам смотрите версию CUDA Toolkit для данной
архитектуры (первая таблица, колонка CUDA SDK version).

Скачайте и установите CUDA Toolkit в соответствии с вашей
видеокартой. Или же проверьте, что это уже установлено по пути C:\Program Files\NVIDIA GPU Computing Toolkit.

Аналогично для cuDNN согласно установленной версии CUDA Toolkit (для
скачивания нужно зарегистрироваться)

Проверьте, что добавились переменные окружения CUDA_PATH и CUDA_PATH_Vxx_x. Они должны указывать на путь, где
установилась CUDA.

Скопируйте все файлы в подпапках cuDNN (bin, include, lib\x64) в одноименные папки CUDA (путь по умолчанию -
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\vXX.X)

OpenCV и OpenCV contrib

Скачайте и распакуйте OpenCV и OpenCV-contrib (версии должны совпадать)

CMake конфигурация

Подготовка

Создайте папку build с вашими распакованными OpenCV папками:

image

Измените конец файла OpenCVDetectPython.cmake в папке opencv-x.x.x\cmake. Переместите второй elseif выше над первым:

image

Это сделает приоритет на использование Python 3 для сборки.

Конфигурация сборки CMake GUI

Укажите пути к папке OpenCV и папке, где будет выполнена сборка:

image

Нажмите Configure и выберите x64 в поле Optional platform for generator. Далее нажмите Finish, чтобы начать первый этап конфигурации.

Когда все готово, измените следующие параметры:

Name (имя) Value (значение)
ENABLE_FAST_MATH
OPENCV_DNN_CUDA
OPENCV_EXTRA_MODULES_PATH Путь до папки modules в opencv-contrib-x.x.x
OPENCV_PYTHON3_VERSION
WITH_CUDA

Заметьте, что любые пути, в том числе в параметре OPENCV_EXTRA_MODULES_PATH, должны иметь /, не \. Пример - C:/opencv-contrib-x.x.x/modules. Проверьте параметры, начинающиеся с PYTHON3_, чтобы они соответствовали тем значениям, которым вы ожидаете.

Нажмите Configure снова.

Измените еще 2 параметра:

Name (имя) Value (значение)
CUDA_FAST_MATH
CUDA_ARCH_BIN x.x

Параметр CUDA_ARCH_BIN должен быть в соответствии с вашей видеокартой. Например значение 7.5 будет для RTX 2080 Ti.

image

Нажмите Configure для финального этапа конфигурации.

Когда все выполнилось, убедитесь, что у вас нет ничего, выделенного красным слева. Далее нажмите Generate. Дождитесь окончания процесса, потом можно выходить из CMake.

Сборка проекта с помощью Visual Studio

Откройте файл OpenCV.sln, созданный в папке build.

В верхней панели перейдите Tools ➔ Options, затем Projects and Solutions ⭢ Web Projects. Снимите галочку с последнего параметра и перезапустите Visual Studio (запуск также через двойное нажатие по OpenCV.sln).

image

Измените режим сверху с Debug на Release

image

Справа в обозревателе решений (Solution Explorer) раскройте меню CMakeTargets, правой кнопкой мыши по ALL_BUILD и выберите Build. Это займет у вас около 30 мин.

image

Те же действия повторите для пункта INSTALL (ниже ALL_BUILD). После проверьте, есть ли ошибки. Если их нет, то все готово 🥳.

Проверка установки и устранение неполадок

Первым делом откройте привычным образом Python и выполните эти строки, чтобы убедиться, что все получилось:

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

Если работает, мои поздравления 👐

Если же не сработало, то, возможно, у вас эта проблема ImportError: DLL load failed while importing cv2: The specified module could not be found.. Ее решение описано в начале.

Другие ошибки и проблемы можно посмотреть здесь.

Все ли на месте?

У вас должна быть папка cv2 в вашей папке с Python - ВАШ_ПУТЬ_К_ПАПКЕ_С_PYTHON\Lib\site-packages.

Если ее нет, то можете попробовать изменить 2 параметра в CMake конфигурации:

Name Value
BUILD_SHARED_LIBS 🔳
OPENCV_FORCE_PYTHON_LIBS

Потом нажмите Generate и проделайте заново сборку в Visual Studio.

CV2 обнаруживается?

В IDE с подсказками (например PyCharm) попробуйте напечатать import cv2, затем cv2. и посмотрите подсказки. Если они появились, то все хорошо.

image

OpenCV библиотеки

Проверьте, что установленные библиотеки вашей сборкой не вызывают ошибку импорта. Чтобы это сделать, вы можете вручную добавить DLL файлы:

import os  
os.add_dll_directory('C:/path_to_opencv_build_folder/install/x64/vc16/bin')

import cv2  

Этот импорт должен быть выполнен по умолчанию в файле config.py в папке cv2 и, возможно, сам по себе не решит проблему.

Дополнительные библиотеки

Проблема скорее всего связана с другими библиотеками, незагруженными Python, даже если они добавлены в переменную окружения "PATH". Вы можете починить это, добавив все PATH переменные в скрипт с помощью os.add_dll_directory(), пока это работает. Или же используйте Dependency walker, чтобы найти недостающие DLL файлы.

Использование Dependency walker

Открытие файла cv2.cp38-win_amd64.pyd (или .pyd файла, соответствующего вашей версии Python) с помощью Dependency Walker может дать вам список недостающих DLL файлов. Однако даст еще много DLL файлов от Microsoft (начинаются с API-MS-... или EXT-MS-...), что на самом деле не влияет на ошибку import error. Затем вы можете попробовать добавить вручную недостающие библиотеки и посмотреть, решает ли это проблему.

Использование бинарников Anaconda

Решение, о котором говорится в этом GitHub issue, а также упомянутое в начале этой инструкции, заключается в том, что использование Anaconda Python сработало, поэтому, имея Python 3.8 Anaconda, я добавил путь C:/Users/username/Anaconda3/Library/bin в мой скрипт, и все заработало.

Оказывается, недостающими библиотеками у меня были hdf5.dll и zlib.dll из >200 DLL файлов, расположенных там. Поэтому они добавлены в этот репозиторий, если вы не хотите устанавливать Anaconda.

Когда вы разместили папки, содержащие недостающие DLL файлы, у вас есть несколько опций, чтобы навсегда решить import error:

  • Скопируйте файлы в папку ПУТЬ_К_ПАПКЕ_OPENCV_BUILD/install/x64/vc16/bin (легко, но не идеально)
  • Добавьте import os и os.add_dll_directory('...') в любой скрипт, использующий OpenCV (сойдет, но неудобно)
  • Добавьте все необходимое os.add_dll_directory() в файл __init__.py из cv2 прямо после строчки __all__ = [] (идеальный вариант)

Если что-то из этого раздела решило ImportError: DLL load failed while importing cv2: The specified module could not be found, это замечательно. Если нет, то рекомендую пройтись по этому GitHub issue, может тут найдете решение.

Releases

No releases published

Packages

No packages published