Используйте GPU с opencv-python

Я пытаюсь использовать opencv-python с графическим процессором в Windows 10.

Я установил opencv-contrib-python, используя pip, и это v4.4.0.42, у меня также есть Cuda на моем компьютере и в пути.

Во всяком случае, вот (простой) код, который я пытаюсь скомпилировать:

import cvlib as cv
from cvlib.object_detection import draw_bbox

bbox, label, conf = cv.detect_common_objects(img,confidence=0.5,model='yolov3-worker',enable_gpu=True)

output_image = draw_bbox(img, bbox, label, conf)

Во-первых, вот строка, которая говорит мне, что tf в порядке с cuda:

2020-08-26 5:51:55.718555: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library cudart64_101.dll

но когда я пытаюсь использовать свой графический процессор для анализа изображения, вот что происходит:

[ WARN:0] global C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-j8nxabm_\opencv\modules\dnn\src\dnn.cpp (1429) cv::dnn::dnn4_v20200609::Net::Impl::setUpNet DNN module was not built with CUDA backend; switching to CPU

Есть ли способ решить эту проблему без установки opencv с помощью cmake? На окнах бардак...


person Panda50    schedule 26.08.2020    source источник


Ответы (3)


Проблема здесь в том, что версия opencv, поставляемая с вашей системой (в данном случае Windows), не была скомпилирована с поддержкой Cuda. Поэтому вы не можете использовать любую функцию, связанную с cuda, с этой сборкой.

Если вы хотите иметь opencv с поддержкой cuda, вам придется либо скомпилировать его самостоятельно (что может быть утомительно в Windows), либо найти где-нибудь готовый. Если вы хотите выбрать первое решение, вот ссылка, которая может помочь вам в этом процессе: https://programming.vip/docs/compile-opencv-with-cuda-support-on-windows-10.html. Имейте в виду, что для этого вам потребуется установить пакет SDK.

person Harry333Cover    schedule 26.08.2020
comment
Большое спасибо за ответ. Я установил opencv-python, используя pip (и contrib), нет возможности скомпилировать Cuda с помощью pip? Потому что я не хочу использовать Cmake... - person Panda50; 26.08.2020
comment
Извините за задержку ответа. К сожалению, нет, pip — это всего лишь менеджер пакетов, который служит для распространения пакетов между пользователями. Я сомневаюсь, что существует версия python-opencv, распространяемая с поддержкой cuda, и, к сожалению, она не планируется командой opencv. Основная проблема заключается в зависимостях времени выполнения, связанных с запуском программы cuda, а также, возможно, в некоторых проблемах с лицензией. - person Harry333Cover; 27.08.2020
comment
Однако я бы посоветовал вам не бояться компилировать его через cmake. Мне пришлось сделать это несколько месяцев назад (однако в Linux), и процесс был довольно простым даже с установленными передовыми gcc и cuda. Это не всегда так для таких крупных проектов. - person Harry333Cover; 27.08.2020
comment
Ага, я понимаю и это правда, что нужен аккаунт, как минимум, cudnn. Итак, я делаю это с Cmake, это немного проще, чем в прошлый раз, когда я пытался, но это сработало (ожидайте, когда я включу графический процессор, но это, я думаю, потому что я использую cuda 10.1 с cudnn 8.something, я делаю это с Cuda 10.2 и той же версией cudnn, чтобы посмотреть, что произойдет). Большое спасибо за ответ, Гарри, и хорошего дня. - person Panda50; 29.08.2020

Для тех, кто может получить ту же проблему. Как упомянул Гарри, невозможно использовать GPU с opencv из pip, вам нужно вручную собрать его с помощью Cmake (для Windows).

Это немного сложно, но есть много руководств, которые помогут вам. Я потратил два дня, пытаясь заставить cvlib работать, и вот почему: одна из cudnn.dll, доступных в настоящее время на веб-сайте Nvidia, называется:

Cudnn64_8.dll

и opencv (или, если быть более точным, тензорный поток) нуждается

Cudnn64_7.dll

на самом деле вам просто нужно заменить 8 на 7! ;) Это была единственная сложная часть, и я полагал, что это связано с процессом cmake.

Еще раз спасибо, Гарри.

person Panda50    schedule 29.08.2020

Кажется, все немного изменилось с тех пор, как этот вопрос был задан изначально:

Из https://github.com/opencv/opencv-python

Вариант 1 - Пакет основных модулей: pip install opencv-python

Вариант 2 — Полный пакет (содержит как основные модули, так и дополнительные/дополнительные модули): pip install opencv-contrib-python (см. список дополнительных/дополнительных модулей в документации OpenCV) ==› https://docs.opencv.org/master/

К сожалению, не все из перечисленных выше модулей доступны в полном пакете, например. cudaфильтры. Если кто-то знает лучше, я, например, был бы очень благодарен узнать больше.

person RJJ    schedule 14.04.2021