将 GPU 与 opencv-python 一起使用

Posted

技术标签:

【中文标题】将 GPU 与 opencv-python 一起使用【英文标题】:Use GPU with opencv-python 【发布时间】:2020-12-15 11:41:06 【问题描述】:

我正在尝试在 Windows 10 上将 opencv-python 与 GPU 一起使用。

我使用 pip 安装了 opencv-contrib-python,它是 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

但是当我尝试使用我的 GPU 分析图像时,会发生以下情况:

[ 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

有没有办法在不使用 cmake 安装 opencv 的情况下解决这个问题?窗户上一团糟……

【问题讨论】:

【参考方案1】:

这里的问题是与您的系统(在本例中为 Windows)一起分发的 opencv 版本没有在 Cuda 支持下编译。因此,您不能在此构建中使用任何与 cuda 相关的功能。

如果你想拥有一个支持 cuda 的 opencv,你将不得不自己编译它(这在 Windows 上可能很乏味)或者在某个地方找到一个预编译的。如果您想选择第一个解决方案,这里有一个链接可以帮助您完成此过程:https://programming.vip/docs/compile-opencv-with-cuda-support-on-windows-10.html。请记住,这将需要您在此过程中安装一堆 SDK

【讨论】:

非常感谢您的回答。我使用 pip(和 contrib 之一)安装了 opencv-python,没有办法用 pip 编译 Cuda?因为我不想用 Cmake... 对延迟的anwnser 感到抱歉。不幸的是,pip 只是一个包管理器,用于在用户之间分发包。我怀疑有一个带有 cuda 支持的 python-opencv 版本,不幸的是,它既不是由 opencv 团队计划的。主要问题是运行 cuda 程序所隐含的运行时依赖关系,可能还有一些许可证问题。 不过,我建议你不要害怕,通过cmake 编译它。几个月前我不得不这样做(但是在 Linux 上),即使安装了最先进的 gcccuda,这个过程也非常简单。对于这样的大型项目,情况并非总是如此。 是的,我明白了,您确实需要至少 cudnn 的帐户。所以我用 Cmake 来做,它比我上次尝试的要容易一些,但它起作用了(预计当我打开 GPU 时,但它是,我认为,因为我使用 cuda 10.1 和 cudnn 8.something,我在做它与 Cuda 10.2 和相同版本的 cudnn 一起看看会发生什么)。非常感谢你回答哈利,祝你有美好的一天。【参考方案2】:

对于那些可能遇到相同问题的人。正如 Harry 所提到的,不能将 GPU 与 pip 的 opencv 一起使用,您必须使用 Cmake(对于 windows)“手动”构建它。

这有点棘手,但这里有很多教程可以帮助您。 我花了两天时间试图让 cvlib 工作,这就是为什么:Nvidia 网站上当前提供的 cudnn.dll 之一被命名为:

Cudnn64_8.dll

和opencv(或者更准确地说是tensorflow)需要

Cudnn64_7.dll

实际上,您只需将 8 替换为 7 ! ;) 这是唯一困难的部分,我相信它来自 cmake 过程。

再次感谢哈利。

【讨论】:

【参考方案3】:

自从最初提出这个问题以来,情况似乎发生了一些变化:

来自https://github.com/opencv/opencv-python

选项 1 - 主要模块包:pip install opencv-python

选项 2 - 完整包(包含主模块和 contrib/extra 模块):pip install opencv-contrib-python(检查 OpenCV 文档中的 contrib/extra 模块列表)==> @987654322 @

遗憾的是,并非上面列出的所有模块似乎都在“完整包”中可用,例如。库达过滤器。如果有人知道更多,我将非常感谢了解更多信息。

【讨论】:

以上是关于将 GPU 与 opencv-python 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

将 Tensorflow 与 GPU 一起使用时出错

无法将 GPU 与 Tensorflow 一起使用

使用 GPU 的犰狳 (+BLAS)

FAISS-GPU 不能与 GPU 版本 30xx 一起使用

opencv系列之基于NVIDIA显卡的opencv-python硬解方案

opencv系列之基于NVIDIA显卡的opencv-python硬解方案