如何在pythonWindows的openCV dnn模块上使用GPU加速?

问题描述

我想使用opencv-python4.4对YOlov3进行推断。但是认情况下使用cpu。我已阅读此说明here,说新版本opencv4.2.0支持GPU。但是该指令仅适用于Ubuntu,而我的指令是Windows10

我试图请您逐步指导我如何在Wondows10中实现此功能,python?当我直接使用它时,发生了错误

cv::dnn::dnn4_v20191202::Net::Impl::setUpNet DNN module was not built with CUDA backend; switching to cpu

似乎我必须手动编译opencv,但是不是Cpp吗?但是我只想在python上实现它。有人可以给我一些指示吗?

解决方法

您确实需要自己构建OpenCV。

在将Python绑定用于OpenCV时,OpenCV库本身是用C ++而不是Python编写的。这也说明了OpenCV如何使用CUDA(另一个C ++库)来访问NVidia GPU。

您链接的说明来自与OpenCV无关的人员,该人员承认存在Windows偏见。这意味着这些说明对您没有用。

These instructions确实涵盖了Windows版本。

摘要:

  • 使用Visual Studio 2019(Microsoft最新的C ++编译器)和CMake
  • 下载并安装OpenCV
  • 下载并安装CUDA和cuDNN
  • 下载并安装Anaconda3,并将其用作默认Python
  • 设置环境变量,以便CMake可以找到您已安装的库
  • 设置环境变量和选项,以便CMake知道您还需要OpenCV的Python绑定
  • 使用CMake为Visual Studio创建.sln文件
  • 在Visual Studio中打开.sln并进行构建。
  • 这会生成您需要的cv2.cp37-win_amd64.pyd文件。
,

我想通了...两个

const filterItemsFlat = (items,results = []) => {
    items.forEach(item => {
        if (item.items) filterItemsFlat(item.items,results)
        if (item.visible) results.push(item)
    })

    results.forEach(r => delete r.items)

    return results
}

console.log(filterItemsFlat(
    [
        { id: 'a',visible: 1 },{ id: 'b',visible: 0 },{
            id: 'c',visible: 0,items: [
                { id: 'd',{ id: 'e',visible: 0 }
            ]
        },{ id: 'f',visible: 1,items: [{ id: 'g',visible: 0 }] },{ id: 'h',items: [{ id: 'i',]
))

必须指定,否则-DBUILD_opencv_python3=ON -DBUILD_opencv_python2=OFF 将完全不包含任何python模块。