在cmake构建后,在Python的site-package文件夹中找不到 cv2



我试图在Python 3.9.6上用CUDA函数构建opencv
我设置了与Python3相关的路径,没有Python3_LIBRARY_DEBUG,并检查它们是否正确使用cmake。
opencv的构建(与CUDA的功能)没有错误。

cmake --build "fullpath to build folder" --target INSTALL --config Release

但"cv2"在cmake build和"install"之后,在Python的site-package文件夹中找不到文件夹在构建文件夹(设置为"在哪里构建二进制文件")中找不到文件夹。cmake)


PYTHON3_EXECUTABLE C:/Users/user/AppData/Local/Programs/Python/Python39/python.exe
PYTHON3_INCLUDE_DIR C:/Users/user/AppData/Local/Programs/Python/Python39/include
PYTHON3_LIBRARY C:/Users/user/AppData/Local/Programs/Python/Python39/libs/python39.lib
PYTHON3_NUMPY_INCLUDE_DIRS C:/Users/user/AppData/Local/Programs/Python/Python39/lib/site-packages/numpy/core/include
PYTHON3_PACKAGES_PATH C:/Users/user/AppData/Local/Programs/Python/Python39/Lib/site-packages
CMAKE_PREFIX_INSTALL C:/Users/user/Desktop/build_4.5.0-2/install

cmake build后的build文件夹

├3rdparty/
├apps/
├bin/
├CmakeFiles/
├configured/
├data/
├doc/
├downloads/
├include/
├lib/
├modules/
├opencv2/
├python_loader/
├testdata/
├test-reports/
├tmp/
├win-install/
·操作系统:Windows 10 Pro for Workstation
·Python:3.9.6
·Cmake(GUI):3.20.5,生成器:Visual Studio 16 2019
·opencv: 4.5.3, opencv_contrib:4.5.3

步骤0:前提条件

  • 下载并安装CUDA和cuDNN。
  • 下载并安装CmakeGUI下载并安装Visual Studio Community Edition。
  • 下载OpenCV源代码
  • 下载OpenCV贡献确保版本与OpenCV。
  • 解压OpenCV和OpenCV贡献zip文件
  • 创建一个名为build的空文件夹。

步骤1:使用CMake GUI构建OpenCV

  • 打开CMake GUI并浏览OpenCV源文件夹
  • 浏览创建文件夹,然后打开OpenCV。使用Visual Studio创建sln文件。
  • 点击Configure,选择X64平台,点击Finish。
  • 新选项将以红色显示在CMake中。勾选这些复选框这里:WITH_CUDA, OPENCV_DNN_CUDA, ENABLE_FAST_MATH
  • 在同一窗口中,转到OPENCV_EXTRA_MODULES_PATH并浏览OpenCV的贡献目录并指向modules子文件夹。
  • 再次点击Configure。您将看到红色的新选项。蜱虫CUDA_FAST_MATH复选框。从CUDA_ARCH_BIN属性,删除任何您的nVidia GPU型号不支持的计算架构。您可以为您的产品找到兼容的计算体系结构列表
  • 点击Configure,然后Generate。

步骤2:使用Visual Studio制作OpenCV

  • 进入构建文件夹并打开OpenCV。
  • 打开后,将Debug从顶部改为Release。
  • 在右侧面板上,展开Cmake Targets.
  • 右键单击ALL_BUILD并单击build。
  • 完成后,右键单击Install,然后单击build。

验证GPU计算加速

下面是一个小代码,使用NumPy在CPU上执行简单的矩阵乘法,使用OpenCV在GPU上执行。

import numpy as np
import cv2 as cv
npTmp = np.random.random((1024, 1024)).astype(np.float32)
npMat1 = np.stack([npTmp,npTmp],axis=2)
npMat2 = npMat1
cuMat1 = cv.cuda_GpuMat()
cuMat2 = cv.cuda_GpuMat()
cuMat1.upload(npMat1)
cuMat2.upload(npMat2)
print(%timeit cv.cuda.gemm(cuMat1, cuMat2,1,None,0,None,1))
print(%timeit cv.gemm(npMat1,npMat2,1,None,0,None,1))

最新更新