验证OpenCV正确构建
假设构建正确完成,我们可以验证OpenCV现在可以正常工作了。你将要打开另一个“命令提示符”实例,并cd到你的OpenCV_Build文件夹。进入该文件夹后,你需要在命令提示符下输入以下几行:call set_env_paths.batset path=%openCvBuild%installdc16in;%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%installdc16in;%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%installdc16inopencv_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.2uildinstalldc16in文件夹位置。它应该位于你的OpenCV_Build文件夹中。与以前不同,请确保在此处使用反斜杠(“ ”)而不是斜杠(“ /”)。在“系统变量”部分中执行相同的操作。检查PyCharm现在是否可以运行,如果没有,请继续下一步。
2.将anaconda symlink文件夹添加到Anaconda3
这显然不是必需的步骤,但PyCharm仍然存在一些错误,它寻找一个不存在的文件夹anaconda而不是anaconda3,所以我们将继续将它们符号链接。mklink /D C:UsersBengenaconda C:UsersBengeAnaconda3
仔细检查PyCharm(可能仍然无法使用)。如果没有,请继续下一步。
3.将构建文件夹SymLink添加到Conda站点包
你将要创建另一个符号链接,但不是anaconda,而是要将opencv-4.5.2uildinstalldc16in文件夹链接到anaconda3 site-packages文件夹。mklink /D E:OpenCV_Buildopencv-4.5.2uildinstalldc16in 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