问题描述
我想使用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模块。