如何做班級網(wǎng)站長沙seo排名公司
【opencv】windows10下opencv4.8.0-cuda Python版本源碼編譯教程
提示:博主取舍了很多大佬的博文并親測有效,分享筆記邀大家共同學習討論
文章目錄
- 【opencv】windows10下opencv4.8.0-cuda Python版本源碼編譯教程
- 前言
- 準備工具
- anaconda/cuda/cudnn
- anaconda創(chuàng)建環(huán)境(選做)
- 安裝原生python(選做)
- cmake
- opencv4.8.0
- opencv_contrib
- CMake編譯
- VS2019編譯
- 可能出現(xiàn)的問題
- cmake編譯過程中可能出現(xiàn)的問題
- VS2019編譯過程中可能出現(xiàn)的問題
- 測試使用GPU
- 總結(jié)
前言
OpenCV是一個開源的計算機視覺庫,包含了核心模塊和擴展模塊,提供了基礎的圖像處理和計算機視覺算法,以及一些機器學習工具。而OpenCV Contrib是OpenCV社區(qū)貢獻的一組擴展模塊之一,包含了一些較為新穎和實用的算法和工具函數(shù),提供了一些高級的圖像處理和計算機視覺算法。這些功能和算法可能不適合所有用戶或者還處于實驗性階段。OpenCV Contrib模塊中的代碼由社區(qū)貢獻者開發(fā)和維護,它們提供了一些在OpenCV核心庫中尚未包含的新特性和實驗性功能。
準備工具
cmake、vs2019、opencv4.8.0、opencv_contrib-4.8.0、anaconda、cuda、cudnn
anaconda/cuda/cudnn
安裝cuda、cudnn可以參考此前博主的【深度學習windows10環(huán)境配置詳細教程】,因為對于新手來說,需要注意的細節(jié)比較多,這里不浪費篇幅重復講述了。
anaconda創(chuàng)建環(huán)境(選做)
為了將CUDA版本的opencv安裝到虛擬環(huán)境中,安裝到默認環(huán)境(base)不需要執(zhí)行此步驟。
# 搭建opencv環(huán)境
conda create -n opencv_onnx_gpu python=3.10.9 -y
# 激活環(huán)境
activate opencv_onnx_gpu
虛擬環(huán)境中需要安裝numpy,后續(xù)的編譯過程中需要。
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple numpy
安裝原生python(選做)
在使用 CMake 為 Anaconda 新建的虛擬環(huán)境安裝 OpenCV 時,需要在主機上安裝一個與虛擬環(huán)境中的 Python 版本一致的原生環(huán)境,這是由于CMake 需要在構(gòu)建過程中使用與虛擬環(huán)境中的 Python 版本一致的 Python 解釋器來生成適用于該版本的 Python 綁定。
博主在anaconda創(chuàng)建的虛擬環(huán)境python為3.10,因此需要安裝了python3.10原生版本,否則即使通過編譯但始終無法使用opencv-python。
原生python官網(wǎng)下載地址,選擇Windows版本。
這里通過激活虛擬環(huán)境查看安裝對應的版本,博主不確定這種微小版本的差異會不會影響后續(xù)編譯測試,所以最好都保持一致。
勾選加入系統(tǒng)環(huán)境后直接安裝。
配置環(huán)境變量,這里可能出現(xiàn)cmd使用的python版本還是使用anaconda的base環(huán)境的情況,這是因為在環(huán)境變量Path中anaconda的順序排在原生Python的前面,調(diào)整原生python的路徑在anaconda的base之前即可。
cmake
CMake官方下載地址,下載cmake-3.27.7-windows-x86_64.msi。
添加到環(huán)境和安裝路徑博主根據(jù)自身情況作出了修改,其他都是默認安裝。
出現(xiàn)以下界面安裝成功。
opencv4.8.0
Opencv官方下載地址,下載OpenCV – 4.8.0 Sources,下載解壓opencv-4.8.0.zip。
opencv_contrib
opencv_contrib官方下載地址,選擇opencv對應的contrib版本,例如opencv4.8.0對應就是opencv_contrib-4.8.0.zip。下載后直接解壓。
CMake編譯
- 打開CMake,where is the source code是Opencv sources(博主是opencv-4.8.0)的文件夾位置,where to build the binaries是編譯opencv保存的文件夾位置(自定義),在左下角第一次點擊Configure。
- 選擇對應vs的版本(博主是vs2019),系統(tǒng)選擇x64,最后點右下角Finish,顯示Configuring done。
- 安裝到默認環(huán)境(base)不需要執(zhí)行此步驟,該步驟步驟的目的是安裝cuda版本opencv到用戶自定義的虛擬環(huán)境中,分別將路徑指向自定義虛擬環(huán)境的對應位置 : PYTHON3_EXECUTABLE、PYTHON3_INCLUDE_DIR、PYTHON3_LIBRARY、PYTHON3_NUMPY_INCLUDE_DIRS(需要安裝numpy)、PYTHON3_PACKAGES_PATH。
4.在Search搜索框搜索帶cuda的關(guān)鍵字,全部勾選。
- Search搜索框搜索OPENCV_EXTRA_MODULES_PATH,添加解壓的opencv_contrib中的modules的路徑,再搜索并勾選OPENCV_ENABLE_NONFREE選項。
- 將build_opencv_world選上,這可以將所有opencv的庫都編譯在一起,不需要自己手動選擇添加每個小模塊,但是具體的工程又不建議這種全家桶。
- 對于java、js、tests相關(guān)選項的選擇,用Search搜索框分別搜索“java”,“js”,“tests”,根據(jù)需要選中和取消相關(guān)選項,默認都是選中,博主都取消了,必須勾選BUILD_opencv_python3,決定了能否在python中使用GPU加速,第二次點擊Configure。
- 顯示Configuring done后,將CUDA_ARCH_BIN顯卡算力內(nèi)容改成自己顯卡的算力。官網(wǎng)查看顯卡算力地址,刪除小于自己顯卡算力的部分,再搜索并勾選ENABLE_FAST_MATH選項,第三次點擊Configure。
- 顯示Configuring done后,點擊generate,顯示generating done,成功完成cmake編譯,在輸出的opencv保存文件夾位置中存在就生成了OpenCV.sln文件。
cmake編譯過程是會從githup上下載數(shù)據(jù),但是一般都會出現(xiàn)下載失敗的情況,這里建議讀者先跳到【可能出現(xiàn)的問題】這一小節(jié),來確認是不是自己也出現(xiàn)了下載失敗的情況。
VS2019編譯
- 確保在解決方案的bindings這個目錄下有opencv_python3,否則即使編譯成功仍然不能使用CUDA加速。
- 使用VS2019 (以管理員方式運行) 打開剛剛編譯工程OpenCV.sln,在release|x64模式下,在解決方案資源管理器—>CMakeTargets—>右鍵點擊ALL_BUILD–>生成。
- 同樣在release|x64模式下,在解決方案資源管理器—>CMakeTargets—>右鍵點擊INSTALL–>生成。
沒有任何報錯信息就是編譯完成,在XXX\lib\python3\Release文件夾下可以看到cv2.cpxxx-win_amd64.pyd文件。
XXX是編譯opencv保存的文件夾位置(博主是opencv-4.8.0-vs2019-64),cpxx是python版本(博主是cp310)
同時,在虛擬環(huán)境中,可以在路徑Lib\site-packages下看到cv2文件夾
進入cv2目錄打開config.py可以看到虛擬環(huán)境opencv_onnx_gpu依賴于cmake編譯的opencv(where to build the binaries)。
博主將依賴的opencv拷貝到了虛擬環(huán)境中,并修改了依賴的路基。
可能出現(xiàn)的問題
cmake編譯過程中可能出現(xiàn)的問題
cmake編譯出現(xiàn)Download failed的問題。
在where to build the binaries位置里面有個CMakeDownloadLog.txt,將里面下載鏈接復制到瀏覽器進行下載,
將其和where is the source code里面的.cache文件夾里面內(nèi)容相對應,下圖是下載失敗時候,文件大小是0KB,手動下載完成后進行替換。
注意用來替換的文件的名稱要與對應空文件的名稱保持一致。
對于部分文件則需要將網(wǎng)頁以另存為的方式進行替換,注意一定不要以復制網(wǎng)頁內(nèi)容粘貼到空文件的方式進行替換,這是無效的的。
將整個.cache都用同樣的方式進行處理。
強調(diào)一點,出現(xiàn)這種問題,可以暫時先走完CMake編譯過程,因為每一次Configuring都會有新的下載內(nèi)容,然后再一次性將.cache的內(nèi)容進行完整的替換,最后進行Configuring和Generate。
VS2019編譯過程中可能出現(xiàn)的問題
通常是對于部分資源,vs2019沒有管理員操作權(quán)限,因此只需要用管理員身份重新打開進行操作即可。
測試使用GPU
這里用一段簡單的python代碼驗證安裝完成的opencv是否支持gpu設備。
import cv2
# 檢查是否支持CUDA
if cv2.cuda.getCudaEnabledDeviceCount():print("檢測到支持CUDA的設備數(shù)量:", cv2.cuda.getCudaEnabledDeviceCount())
else:print("未檢測到支持CUDA的設備")
驗證成功,oepncv-cuda版本源碼編譯成功。
總結(jié)
盡可能簡單、詳細的介紹windows10下Python版本opencv4.8.0-cuda版本用源碼進行編譯的詳細流程。