訂閱
糾錯(cuò)
加入自媒體

機(jī)器學(xué)習(xí):如何編譯OpenCV以包括CUDA GPU支持?

set_env_paths.bat

右鍵單擊OpenCV_Build文件夾,然后創(chuàng)建一個(gè)名為set_env_paths.bat的新文本文件。完成此操作后,需要編輯以下示例以包含文件夾位置:ECHO -- Set these variables below --
set "openCvSource=E:/OpenCV_Build/opencv-4.5.2"
set "openCVExtraModules=E:/OpenCV_Build/opencv_contrib-4.5.2/modules"
set "openCvBuild=%openCvSource%/build"
set "toolkitRoot=C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v11.0"
ECHO -- Set this to the location of your Conda Env
set "pathToAnaconda=C:/Users/Benge/anaconda3/envs/py38"
ECHO -- Leave these variables alone --
set "buildType=Release"
set "generator=Ninja"
set "pyVer=38"

同樣要記住的重要一點(diǎn)是,所有文件夾路徑都不應(yīng)包含反斜杠(“ ”),而應(yīng)替換為正斜杠(“ /”)。我發(fā)現(xiàn)這是一個(gè)奇怪的CMake操作,不幸的是,這是確保在構(gòu)建過程中不會(huì)失敗的唯一方法。

configure_and_build_opencv.bat

這是我們配置和構(gòu)建OpenCV道路上的必經(jīng)之路。從本質(zhì)上講,這只是一堆鏈接在一起的命令提示符,從而使整個(gè)過程變得更加容易。它實(shí)際上是初始化VS2019構(gòu)建批處理文件,調(diào)用我們在set_env_paths中設(shè)置的環(huán)境變量,調(diào)用CMake以使用GPU加速的CUDA及其各種設(shè)置來生成我們的配置(在我看來,這比在CMake中單獨(dú)執(zhí)行更容易)。包括Anaconda build env Python綁定,以便我們實(shí)際上可以在我們的項(xiàng)目中導(dǎo)入和利用新構(gòu)建的模塊,然后開始構(gòu)建OpenCV的過程。ECHO -- Starting OpenCV Configuration --
ECHO ---- Opening Visual Studio builder ----
call "C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Auxiliary/Build/vcvars64.bat"
ECHO ---- Setting up environment variables ----
call set_env_paths.bat
ECHO ---- Running CMake Commands ----
call "C:/Program Files/CMake/bin/cmake.exe" -B"%openCvBuild%/" -H"%openCvSource%/" -G"%generator%" -DCMAKE_BUILD_TYPE=%buildType% -DOPENCV_EXTRA_M(jìn)ODULES_PATH="%openCVExtraModules%/" ^
-DINSTALL_TESTS=ON -DINSTALL_C_EXAMPLES=ON -DBUILD_EXAMPLES=ON ^
-DBUILD_opencv_world=ON ^
-DWITH_CUDA=ON -DCUDA_TOOLKIT_ROOT_DIR="%toolkitRoot%" -DCUDA_FAST_M(jìn)ATH=ON -DWITH_CUBLAS=ON -DCUDA_ARCH_BIN=7.5 -DWITH_NVCUVID=ON ^
-DWITH_OPENGL=ON -DENABLE_FAST_M(jìn)ATH=ON ^
-DWITH_M(jìn)FX=ON ^
-DBUILD_opencv_python3=ON -DPYTHON3_INCLUDE_DIR=%pathToAnaconda%/include -DPYTHON3_LIBRARY=%pathToAnaconda%/libs/python%pyVer%.lib -DPYTHON3_EXECUTABLE=%pathToAnaconda%/python.exe -DPYTHON3_NUMPY_INCLUDE_DIRS=%pathToAnaconda%/lib/site-packages/numpy/core/include -DPYTHON3_PACKAGES_PATH=%pathToAnaconda%/Lib/site-packages/ -DOPENCV_SKIP_PYTHON_LOADER=ON
ECHO -- OpenCV Configuration has finished, proceeding to build phase --
call "C:Program FilesCMakeincmake.exe" --build %openCvBuild% --target install
:End
PAUSE
運(yùn)行configure_and_build_opencv.bat文件

雙擊我們的文件,然后運(yùn)行該進(jìn)程。視你的系統(tǒng)而定,如果沒有出現(xiàn)任何錯(cuò)誤,它可能需要15分鐘到一個(gè)小時(shí)。

有時(shí),你會(huì)看到它停止打印到命令提示符。這是Windows 10 命令提示符的一個(gè)已知問題,因此只需在窗口中單擊并按Enter,它就會(huì)恢復(fù)運(yùn)行。

如果不繼續(xù),則可能只是在處理一些較大的內(nèi)容,可能需要一分鐘才能完成。讓它繼續(xù)運(yùn)行幾分鐘,如果在此之后沒有繼續(xù)運(yùn)行,請關(guān)閉窗口,然后重新運(yùn)行bat文件。CMake在windows上很奇怪,我真的不知道為什么,它有時(shí)還會(huì)凍結(jié)。

完成后,它應(yīng)該暫停并要求你按Enter鍵以關(guān)閉命令提示符。這樣做只是為了確保一切都正確構(gòu)建。如果超時(shí),它也可能在構(gòu)建后自動(dòng)關(guān)閉自己。

驗(yàn)證OpenCV正確構(gòu)建

假設(shè)構(gòu)建正確完成,我們可以驗(yàn)證OpenCV現(xiàn)在可以正常工作了。你將要打開另一個(gè)“命令提示符”實(shí)例,并cd到你的OpenCV_Build文件夾。進(jìn)入該文件夾后,你需要在命令提示符下輸入以下幾行:call set_env_paths.batset path=%openCvBuild%installd c16in;%path%ipython然后將下一位復(fù)制粘貼到命令窗口中。import numpy as np
import cv2 as cv
npTmp = np.random.random((1024, 1024)).a(chǎn)stype(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鍵,你應(yīng)該會(huì)看到以下內(nèi)容:2.79 ms ± 63.8 ?s per loop (mean ± std. dev. of 7 runs, 1 loop each)好的,很酷。因此,現(xiàn)在我們知道可以使用Python來訪問OpenCV模塊了。接下來,讓我們確保它在我們的Conda環(huán)境里。在同一窗口中,粘貼:dir "%USERPROFILE%Anaconda3envspy38Libsite-packagescv2*"

這個(gè)輸出應(yīng)該是:05/15/2021 | 12:26 PM | 9,133,056 | cv2.cp38-win_amd64.pyd如果不是,請?jiān)诿钐崾痉骆I入:dir "%openCvBuild%libpython3cv2.cp38-win_amd64.pyd"以檢查我們的Python綁定。它應(yīng)該定位到文件。如果找到該文件,則需要確保env的conda site-packages文件夾中包含該cv2.cp38-win_amd64.pyd文件。

如果不是,你可以:1.從以下位置手動(dòng)復(fù)制/粘貼文件:OpenCV_Buildopencv-4.5.2uildlibpython3并將其粘貼到conda文件夾位置:C:UsersYOUR_NAMEnaconda3envsYOUR_ENV_NAMELibsite-packages。然后重新運(yùn)行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')"
它應(yīng)該輸出類似以下內(nèi)容:OpenCV: 4.5.2 for python installed and working。

確認(rèn)CUDA配置正確

最后,如果其他所有方法都獲得成功,則還應(yīng)確認(rèn)CUDA的配置正確:"%openCvBuild%installd c16inopencv_perf_cudaarithm.exe" --gtest_filter=Sz_Type_Flags_GEMM.GEMM/29
在輸出的底部,你應(yīng)該看到綠色的內(nèi)容:[ PASSED ] 1 test.如果仍然遇到麻煩,請查看下面的“Credits”部分,并查看JamesBowley的文章。在故障排除方面,他比我更深入。

PyCharm故障排除

如果你像我一樣使用PyCharm,你會(huì)發(fā)現(xiàn),盡管OpenCV現(xiàn)在可以在PyCharm之外運(yùn)行,但在PyCharm中打開項(xiàng)目時(shí)卻無法使用。造成這種情況的原因有很多,但是我發(fā)現(xiàn)實(shí)際可行的解決方案是Stackoverflow和Github問題跟蹤器提供的答案的組合。

1.將OpenCV_Build添加到你的環(huán)境路徑

按下Windows鍵,然后鍵入env,會(huì)彈出一個(gè)選項(xiàng)來編輯系統(tǒng)環(huán)境變量。打開窗口,單擊右下角的“環(huán)境變量”。該窗口有兩個(gè)部分。一個(gè)標(biāo)題為“用戶名的用戶變量”,另一個(gè)標(biāo)題為“系統(tǒng)變量”。在“用戶名的用戶變量”部分中,雙擊名為“ Path”的變量。然后單擊“新建”以添加新條目。然后復(fù)制并粘貼opencv-4.5.2uildinstalld c16in文件夾位置。它應(yīng)該位于你的OpenCV_Build文件夾中。與以前不同,請確保在此處使用反斜杠(“ ”)而不是斜杠(“ /”)。在“系統(tǒng)變量”部分中執(zhí)行相同的操作。檢查PyCharm現(xiàn)在是否可以運(yùn)行,如果沒有,請繼續(xù)下一步。

2.將anaconda symlink文件夾添加到Anaconda3

這顯然不是必需的步驟,但PyCharm仍然存在一些錯(cuò)誤,它尋找一個(gè)不存在的文件夾anaconda而不是anaconda3,所以我們將繼續(xù)將它們符號鏈接。mklink /D C:UsersBengenaconda C:UsersBengeAnaconda3

仔細(xì)檢查PyCharm(可能仍然無法使用)。如果沒有,請繼續(xù)下一步。

3.將構(gòu)建文件夾SymLink添加到Conda站點(diǎn)包

你將要?jiǎng)?chuàng)建另一個(gè)符號鏈接,但不是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警告

你的項(xiàng)目應(yīng)該可以在啟用了自定義CUDA的OpenCV上正常運(yùn)行,但是你可能會(huì)注意到PyCharm在該行下仍然顯示紅色的import cv2。我不知道為什么它堅(jiān)持認(rèn)為盡管存在該軟件包并且它可以正確運(yùn)行,但仍然找不到該軟件包。這只是PyCharm中的一個(gè)煩人的bug,我發(fā)現(xiàn)沒有什么東西可以修復(fù)它。

Credits:之所以能夠啟動(dòng)并運(yùn)行OpenCV,很大一部分原因是依賴了JameBowley的指南。

JameBowley的指南:https://jamesbowley.co.uk/accelerate-opencv-4-4-0-build-with-cuda-and-python-bindings/#troubleshooting它非常有用,但我發(fā)現(xiàn)它有點(diǎn)混亂并且沒有包括我發(fā)現(xiàn)的一些步驟,這些步驟對于在PyCharm的Conda env內(nèi)構(gòu)建和運(yùn)行OpenCV是必需的。

向M. Haroon Shakeel歡呼,以獲取有關(guān)使用CUDA構(gòu)建OpenCV的簡明指南(但不幸的是,尚未完成)。他是第一本深入探討在Windows上構(gòu)建OpenCV的實(shí)際指南,而不僅僅是說要使用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

<上一頁  1  2  
聲明: 本文由入駐維科號的作者撰寫,觀點(diǎn)僅代表作者本人,不代表OFweek立場。如有侵權(quán)或其他問題,請聯(lián)系舉報(bào)。

發(fā)表評論

0條評論,0人參與

請輸入評論內(nèi)容...

請輸入評論/評論長度6~500個(gè)字

您提交的評論過于頻繁,請輸入驗(yàn)證碼繼續(xù)

  • 看不清,點(diǎn)擊換一張  刷新

暫無評論

暫無評論

人工智能 獵頭職位 更多
掃碼關(guān)注公眾號
OFweek人工智能網(wǎng)
獲取更多精彩內(nèi)容
文章糾錯(cuò)
x
*文字標(biāo)題:
*糾錯(cuò)內(nèi)容:
聯(lián)系郵箱:
*驗(yàn) 證 碼:

粵公網(wǎng)安備 44030502002758號