如何使用CUDA GPU支持从源代码构建OpenCV?

磐创AI
关注

验证OpenCV正确构建

假设构建正确完成,我们可以验证OpenCV现在可以正常工作了。你将要打开另一个“命令提示符”实例,并cd到你的OpenCV_Build文件夹。进入该文件夹后,你需要在命令提示符下输入以下几行:call set_env_paths.batset path=%openCvBuild%installd c16in;%path%ipython然后将下一位复制粘贴到命令窗口中。import numpy as np
import cv2 as cv
npTmp = np.random.random((1024, 1024)).astype(np.float32)
npMat1 = npMat2 = npMat3 = npDst = np.stack([npTmp,npTmp],axis=2)
cuMat1 = cuMat2 = cuMat3 = cuDst = cv.cuda_GpuMat(npMat1)
%timeit cv.cuda.gemm(cuMat1, cuMat2,1,cuMat3,1,cuDst,1)
完成此操作后,按Enter键,你应该会看到以下内容:2.79 ms ± 63.8 ?s per loop (mean ± std. dev. of 7 runs, 1 loop each)好的,很酷。因此,现在我们知道可以使用Python来访问OpenCV模块了。接下来,让我们确保它在我们的Conda环境里。在同一窗口中,粘贴:dir "%USERPROFILE%Anaconda3envspy38Libsite-packagescv2*"

这个输出应该是:05/15/2021 | 12:26 PM | 9,133,056 | cv2.cp38-win_amd64.pyd如果不是,请在命令提示符下键入:dir "%openCvBuild%libpython3cv2.cp38-win_amd64.pyd"以检查我们的Python绑定。它应该定位到文件。如果找到该文件,则需要确保env的conda site-packages文件夹中包含该cv2.cp38-win_amd64.pyd文件。

如果不是,你可以:1.从以下位置手动复制/粘贴文件:OpenCV_Buildopencv-4.5.2uildlibpython3并将其粘贴到conda文件夹位置:C:UsersYOUR_NAMEnaconda3envsYOUR_ENV_NAMELibsite-packages。然后重新运行dir "%USERPROFILE%Anaconda3envspy38Libsite-packagescv2*"命令。2.使用以下cmd:copy "%openCvBuild%/lib/python3/cv2.cp38-win_amd64.pyd" "%USERPROFILE%/Anaconda3/envs/py38/Lib/site-packages/cv2.cp38-win_amd64.pyd"

测试OpenCV版本

在同一cmd提示符下,键入:set path=%openCvBuild%installd c16in;%path%
python -c "import cv2; print(f'OpenCV: {cv2.__version__} for python installed and working')"
它应该输出类似以下内容:OpenCV: 4.5.2 for python installed and working。

确认CUDA配置正确

最后,如果其他所有方法都获得成功,则还应确认CUDA的配置正确:"%openCvBuild%installd c16inopencv_perf_cudaarithm.exe" --gtest_filter=Sz_Type_Flags_GEMM.GEMM/29
在输出的底部,你应该看到绿色的内容:[ PASSED ] 1 test.如果仍然遇到麻烦,请查看下面的“Credits”部分,并查看JamesBowley的文章。在故障排除方面,他比我更深入。

PyCharm故障排除

如果你像我一样使用PyCharm,你会发现,尽管OpenCV现在可以在PyCharm之外运行,但在PyCharm中打开项目时却无法使用。造成这种情况的原因有很多,但是我发现实际可行的解决方案是Stackoverflow和Github问题跟踪器提供的答案的组合。

1.将OpenCV_Build添加到你的环境路径

按下Windows键,然后键入env,会弹出一个选项来编辑系统环境变量。打开窗口,单击右下角的“环境变量”。该窗口有两个部分。一个标题为“用户名的用户变量”,另一个标题为“系统变量”。在“用户名的用户变量”部分中,双击名为“ Path”的变量。然后单击“新建”以添加新条目。然后复制并粘贴opencv-4.5.2uildinstalld c16in文件夹位置。它应该位于你的OpenCV_Build文件夹中。与以前不同,请确保在此处使用反斜杠(“ ”)而不是斜杠(“ /”)。在“系统变量”部分中执行相同的操作。检查PyCharm现在是否可以运行,如果没有,请继续下一步。

2.将anaconda symlink文件夹添加到Anaconda3

这显然不是必需的步骤,但PyCharm仍然存在一些错误,它寻找一个不存在的文件夹anaconda而不是anaconda3,所以我们将继续将它们符号链接。mklink /D C:UsersBengenaconda C:UsersBengeAnaconda3

仔细检查PyCharm(可能仍然无法使用)。如果没有,请继续下一步。

3.将构建文件夹SymLink添加到Conda站点包

你将要创建另一个符号链接,但不是anaconda,而是要将opencv-4.5.2uildinstalld c16in文件夹链接到anaconda3 site-packages文件夹。mklink /D E:OpenCV_Buildopencv-4.5.2uildinstalld c16in C:UsersBengenaconda3envspy38libsite-packages
很明显,把它改成你的conda env的名字和位置,而不是像我给它取名叫做py38。PyCharm警告

你的项目应该可以在启用了自定义CUDA的OpenCV上正常运行,但是你可能会注意到PyCharm在该行下仍然显示红色的import cv2。我不知道为什么它坚持认为尽管存在该软件包并且它可以正确运行,但仍然找不到该软件包。这只是PyCharm中的一个烦人的bug,我发现没有什么东西可以修复它。

Credits:之所以能够启动并运行OpenCV,很大一部分原因是依赖了JameBowley的指南。

JameBowley的指南:https://jamesbowley.co.uk/accelerate-opencv-4-4-0-build-with-cuda-and-python-bindings/#troubleshooting它非常有用,但我发现它有点混乱并且没有包括我发现的一些步骤,这些步骤对于在PyCharm的Conda env内构建和运行OpenCV是必需的。

向M. Haroon Shakeel欢呼,以获取有关使用CUDA构建OpenCV的简明指南(但不幸的是,尚未完成)。他是第一本深入探讨在Windows上构建OpenCV的实际指南,而不仅仅是说要使用Linux。

M. Haroon Shakeel:https://haroonshakeel.medium.com/build-opencv-4-4-0-with-cuda-gpu-support-on-windows-10-without-tears-aa85d470bcd0

感谢Stackoverflow的Miki帮了我的忙,并最终指引我查看 JameBowley 的指南。

Miki:https://stackoverflow.com/questions/67537383/how-do-i-access-opencv-source-compiled-package-from-my-python-project-venv-on-wi?noredirect=1#comment119377208_67537383

声明: 本文由入驻OFweek维科号的作者撰写,观点仅代表作者本人,不代表OFweek立场。如有侵权或其他问题,请联系举报。
侵权投诉

下载OFweek,一手掌握高科技全行业资讯

还不是OFweek会员,马上注册
打开app,查看更多精彩资讯 >
  • 长按识别二维码
  • 进入OFweek阅读全文
长按图片进行保存