【OpenCV】 OpenCV 源码编译并实现 CUDA 加速 (Windows)
-
1. 環境準備
- 1.1 軟件環境
- 1. 2 源碼下載
-
2. CMake編譯項目
- 2.1 創建cmake項目
- 2.2 設置編譯配置
-
2.3 解決異常
- 2.3.1 文件下載異常
- 2.3.2 解決CUDA版本異常
- 2.4 編譯項目
- 3. Visual Studio 編譯項目
- 4. 項目測試
- 5. 總結
? OpenCV是一個基于Apache2.0許可(開源)發行的跨平臺計算機視覺和機器學習軟件庫,可以運行在Linux、Windows、Android和Mac OS操作系統上。項目源碼由一系列 C 函數和少量 C++ 類構成,同時提供了Python、Ruby、MATLAB等語言的接口,實現了圖像處理和計算機視覺方面的很多通用算法。
? 但在實際使用中,如果是對處理時間要求比較高的場景,使用OpenCV處理圖片數據很難滿足要求,不過OpenCV支持使用CUDA進行加速,不過支持CUDA加速的依賴包需要我們自行編譯才可使用,因此在本次文章中,我們將演示如何使用OpenCV源碼自行編譯代碼文件,來實現CUDA加速。
1. 環境準備
1.1 軟件環境
? 本次編譯平臺使用的是 Windows 11 系統,使用CMake-gui + VS2022進行源碼編譯,為了大家更好的復現該項目,此處羅列一下本文所使用的環境:
- CUDA: 12.2, cudnn: 8.9.3
- Cmake: 3.28.0
- Visual Studio 2022
關于以上環境的安裝,大家可以查看網上相關文檔自行安裝即可。
1. 2 源碼下載
? 接下來需要下載OpenCV源碼,此處需要下載兩個源碼,分別是opencv和opencv_contrib。下載鏈接為
opencv:
https://github.com/opencv/opencv/archive/4.8.0.zip
opencv_contrib:
https://github.com/opencv/opencv_contrib/tags
? 不過在下載時要注意一點,就是要保證opencv和opencv_contrib下載的版本要一致,此處我們下載的版本為:4.8.0。下載完成后,將兩個文件解壓到同一個文件夾中,如下圖所示。
2. CMake編譯項目
2.1 創建cmake項目
? 打開CMake軟件,設置項目源碼路徑,并在源碼路徑下創建一個build文件夾,并設置編譯文件夾,如下圖所示:
? 接下來點擊Configure,進行第一次配置,然后回彈出編譯平臺選擇,此處根據自己電腦的編譯軟件進行選擇,在本文中我們使用的是Visual Studio 2022,然后選擇編譯平臺為x64。
? 第一次配置生成后,輸出如下所示:
2.2 設置編譯配置
? 首先添加opencv_contrib模塊的引用,在OPENCV_EXTRA_MODULES_PATH條目中添加該模塊的路徑,然后選擇OPENCV_ENABLE_NONFREE,如下圖所示:
? 接下來添加CUDA的設置,首先選擇WITH_CUDA,如下圖所示:
? 然后選擇OPENCV_DNN_CUDA,此處還可以選擇OPENCV_DNN_OPENVINO等不同的模型部署,如下圖所示:
? 最后選擇ENABLE_FAST_MATH
? 此處為了讓生成的依賴庫文件都集成在一個文件中,方便后面使用,所以此處可以選擇BUILD_opencv_world,如果不選擇,生成的 文件將會被拆散成多個文件。
? 第二次Configure后,下一步就是需要檢查一下其過程是否有異常拋出
2.3 解決異常
2.3.1 文件下載異常
? 首先查看一下配置輸出框是否拋出警告,如果有的話,一定要解決一下,不然后續編譯會出錯。
? 當出現上圖所示的異常后,就需要手動解決一下該問題,首先找到build\CMakeDownloadLog.txt文件,然后打開后,查看一下是否有下圖所示的文件確實異常。如果有,請自行下載,下載鏈接如下圖所示標注位置,下載后將文件放置在下圖所示缺失文件路徑,并按照要求修改名稱。
2.3.2 解決CUDA版本異常
? 該異常會在最后編譯過程中出現,主要是當CUDA>=12.2時會出現該問題,因此需要檢查一下自己的CUDA版本是否大于12.2.查看CUDA版本方式如下圖所示。
? 如果你的CUDA版本大于12.2,就要根據官方的要求進行修改,官方提供的解決方式鏈接為:cuda: fix for compatibility with CUDA Toolkit >= 12.2.0 by cudawarped · Pull Request #24104 · opencv/opencv (github.com)。
其主要修改內容如下圖所示。
2.4 編譯項目
? 解決完上述異常后,就可以進行項目編譯了,點擊Generate,就可以自動生成項目了。
3. Visual Studio 編譯項目
? 首先我們打開build\文件夾,可以看到生成的OpenCV.sln解決方案文件,使用Visual Studio打開該項目。
? 然后運行ALL_BUILD項目即可,此處運行時間會比較長,尤其是再加入CUDA支持后,編譯時間會更久。
? 編譯完成后,可以獲得下面文件夾內容,此處主要是兩個有用的文件夾,一個是install文件夾,這個文件夾主要是包含的時項目運行的依賴項,包括include/文件夾以及 .lib 、 .dll等文件;第二個是python_loader文件夾,主要是python運行所需的依賴項。
4. 項目測試
? 項目編譯完成后,最后我們查看一下項目是否編譯成功,此處使用cv2.cuda.getCudaEnabledDeviceCount()接口方法檢查一下是否存在在線的CUDA設備,如果存在CUDA設備,將返回設備數量,如果沒有,將返回0。如下圖所示,在運行后,輸出為1,本機設備只存在一個顯卡,所以索命該項目已經編譯好了。
5. 總結
? 在本文中,我們實現了OpenCV源碼編譯,并結合本機安裝的CUDA版本,實現了CUDA版本的OpenCV編譯,并實現了Python API 以及C++ API 的使用。后續我們將會結合所編譯的庫進行項目開發以及與普通版本進行對比。
總結
以上是生活随笔為你收集整理的【OpenCV】 OpenCV 源码编译并实现 CUDA 加速 (Windows)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 文心一言 VS 讯飞星火 VS chat
- 下一篇: 自定义md-loader来简单高效的维护