面的系列文章中,我們使用C++和Opencv來實現了一個簡單的5層卷積神經網絡,并使用其對手寫數字圖像進行訓練和識別。通過這一系列的學習和總結,讓我對深度學習的基礎知識有了更加深刻的理解。接下來,邊學習邊總結,請跟著我一起進入深度學習框架的學習旅程吧~首先解釋一下什么是深度學習框架,我們可以把其理解成一個工具,該工具包含了神經網絡、卷積神經網絡中各個模塊的實現代碼,使用該工具可以方便地搭建自己想要的深度學習網絡。就比如搭積木一樣,各個積木模塊是別人已經做好的,我們只需要使用這些做好的模塊來搭建自己想要的形狀和結構即可。
目前流行的深度學習框架有Tensorflow、Caffe、Keras、Mxnet、Pytorch等,這些框架有各自的優缺點。至于我們為什么要選擇libtorch呢,主要原因如下:
1. 其實libtorch就是在Pytorch的基礎上封裝的一個C++庫,提供了C++ API接口,在windows系統的VS C++環境可以很方便地調用這些API接口來搭建自己想要的網絡。
2. 搭建libtorch開發環境比較方便,因為該框架沒有那么多依賴庫,甚至官方已經編譯并打包好了各個版本地庫,我們只需要去官網下載相對應的庫來使用即可。
3. libtorch支持CUDA并行加速,速度相當快,利于后期的工程應用。
Opencv是一個圖像處理算法的開源庫,使用這個庫可以方便地對圖像進行一些基本操作,很多深度學習框架對Opencv庫具有依賴性。Opencv官方編譯好了一些常用版本的庫供我們使用,非常方便,不過有時候我們開發環境對應的庫版本并沒有現成的,這時候就需要我們自己使用cmake工具來編譯Opencv源碼獲取我們想要的庫版本了,本文主要講的就是這個。
1. 本人的開發環境
Win10 64位系統
Geforce RTX 3080顯卡
VS2017
Opencv3.4.1
2. Opencv源碼下載
去Opencv官網下載源碼:
https://opencv.org/opencv-3-4-1/
需要注意的是,Opencv3.4.1除了主模塊的源碼,還包括了一個contrib源碼模塊,該模塊中包含了另外的一些算法實現,編譯Opencv源碼時contrib時可選編譯的。我們選擇把contrib源碼一起編譯,因此我們需要把兩個源碼包一起下載下來:
3. cmake編譯工具下載
同樣去cmake官網下載cmake工具:
https://cmake.org/download/
根據本人的開發環境,我使用的cmake版本為cmake-3.19.7-win64-x64。
4. 新建一個編譯文件夾
在某個目錄(空間要足夠大,編譯出來的文件有8G左右)新建一個build文件夾,用于存放編譯時生成的文件,為了方便區分,我把該文件命名為opencv-3.4.1-vs2017-build:
5. Configure配置
(1) 雙擊cmake-3.19.7-win64-x64\bin目錄下的cmake-gui.exe文件,打開cmake工具:
(2) 選擇源碼路徑和編譯路徑。源碼路徑就是我們下載下來的opencv-3.4.1文件夾的路徑,編譯路徑也即上個步驟中我們新建文件夾的路徑,在我的電腦上它們的路徑分別如下,讀者需要根據自己電腦上的實際路徑來選擇:
源碼路徑:E:\opencv\opencv-3.4.1
編譯路徑:E:\opencv\opencv-3.4.1-vs2017-build
(3) 點擊上圖中的configure按鈕,開始初步配置。
在這里我選擇的是VS2017和x64選項,因為我要編譯64位庫,如果讀者想編譯32位庫則需要選擇Win32。還需要注意在彈出窗口的下方選擇“Use default native compilers”的選項。
按照上方配置好以后,點擊Finish按鈕開始配置,等待一會兒配置完成之后,出現如下界面:
(4) 修改配置選項,進一步配置。
首先需要修改的配置項如下:
a. 把BUILD_opencv_world選項勾選上
b. 在OPENCV_EXTRA_MODULES_PATH配置項選擇contrib源碼的路徑,注意要精確到contrib源碼文件夾下面的modules文件夾:
c. 如果我們的電腦上事先安裝了CUDA,cmake會默認把CUDA相關的配置項勾選上,這表示要編譯CUDA版本的Opencv,如果要編譯成功需要踩過很多坑才行(本人親自踩過,過程很是糾結),所以此處我們就不編譯CUDA版本了,我們把CUDA相關配置項的打勾取消掉:
按照上述修改配置之后,再重新點擊Configure按鈕進行配置:
等一會兒配置結束之后,我們發現窗口還是紅色的,那么我們需要繼續點擊Configure按鈕進行配置,直到窗口的背景由紅色變為白色為止:
到這里,我們完成了配置。
(5) 生成VS2017工程。
點擊窗口的Generate按鈕,生成VS2017工程,當顯示如下界面時表示生成成功:
6. 使用VS2017編譯Opencv源碼
點擊cmake工具界面的Open Project按鈕,它會自動使用VS 2017來打開我們生成的Opencv源碼工程:
打開的VS 2017工程如下,接下來我們需要編譯該工程:
通常Opencv庫分為Release版本和Debug版本,所以我們需要分別編譯兩個版本。這里需要注意,由于cmake生成工程的時候,我們選擇的x64,所以在VS 2017界面我們也需要選擇對應的x64選項,也即編譯64位庫,否則會編譯出錯。
首先,我們編譯Release版本的庫,在VS 2017界面設置如下圖所示:
然后在解決方案資源管理器的cMakeTargets文件夾下面的INSTALL選項點擊右鍵,再左鍵點擊生成即可:
接下來就是漫長的等待了,祈禱順利編譯通過吧(通常不會出現什么問題~)。當出現以下提示的時候,就代表我們成功啦,耶~
這時候,我們去看看編譯目錄,如果出現以下文件,說明成功編譯生成了我們想要的庫和頭文件:
(1) 在E:\opencv\opencv-3.4.1-vs2017-build\install\include目錄生成了相關頭文件。
(2) 在E:\opencv\opencv-3.4.1-vs2017-build\install\x64\vc15\lib目錄生成了相關lib文件。
接著,是編譯Debug版本的庫,與編譯Release版本庫的步驟大同小異,只不過在開始編譯之前需要把版本設置為Debug版本而已:
同樣在解決方案資源管理器的cMakeTargets文件夾下面的INSTALL選項點擊右鍵,再左鍵點擊生成,然后又是漫長地等待^^
等到編譯結束之后,我們會發現E:\opencv\opencv-3.4.1-vs2017-build\install\x64\vc15\lib目錄下面又多出了兩個lib文件,這就是debug版本地庫:
至此,Opencv3.4.1+contrib的VS2017_x64_release_debug版本庫編譯完成。
7. VS2017+Opencv3.4.1環境配置
要在VS2017的C/C++代碼中正常調用Opencv的函數,我們還需要做如下設置:
(1) 設置環境變量
右鍵“此電腦”,選擇“屬性”,進入系統界面:
點擊進入高級系統設置,然后點擊環境變量選項:
編輯系統變量的Path變量:
在編輯界面點擊“新建”,并輸入剛才編譯生成的bin文件夾目錄,本人的目錄如下,讀者需要輸入自己電腦實際的目錄,然后點擊確認保存。
E:\opencv\opencv-3.4.1-vs2017-build\install\x64\vc15\bin
(2) 配置VS2017工程的頭文件目錄、庫目錄、附加依賴庫
假設我們新建一個VS2017的x64/Release版本的控制臺空項目,添加一個main文件,如下圖所示:
為了在main函數中可以調用Opencv的函數,首先我們需要做以下設置:
a. 項目-->屬性,打開屬性頁:
b. VC++目錄-->包含目錄-->選擇我們編譯生成的頭文件目錄,本人的頭文件目錄如下,讀者需要輸入自己電腦實際的目錄:
E:\opencv\opencv-3.4.1-vs2017-build\install\include
c. VC++目錄-->庫目錄-->選擇我們編譯生成的lib文件目錄,本人的lib文件目錄如下,讀者需要輸入自己電腦實際的目錄:
E:\opencv\opencv-3.4.1-vs2017-build\install\x64\vc15\lib
d. 連接器-->輸入-->附加依賴項-->添加依賴庫。
如果是Release版程序,需要添加的庫為:
opencv_img_hash341.lib
opencv_world341.lib
如果是Debug版程序,需要添加的庫為:
opencv_img_hash341d.lib
opencv_world341d.lib
假設為Release版本的程序,添加依賴庫如下圖所示:
e. 在main函數添加測試代碼。
#include <opencv2/opencv.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/xfeatures2d.hpp>
using namespace cv;
int main(void)
{
Mat img = imread("lena.jpg", CV_LOAD_IMAGE_GRAYSCALE);
imshow("img", img);
waitKey();
return 0;
}
編譯、運行,如果能正確讀取和顯示Lena圖像,如下圖所示,是說明VS2017+Opencv3.4.1的環境配置成功了:
如:
吃雞缺少msvcp140解決
吃雞缺少msvcp140dll
吃雞提示缺少msvcp140
玩吃雞缺少msvcp140.dll
此文件本質上是運行庫的一部分,丟失、缺失此類文件都是運行庫的問題,而不是游戲本身的問題。所以重新下游戲肯定是沒有用的。 并且,有些人建議的重裝系統大法也是沒用的(指原版系統,換系統除外)。因為這些所謂的dll丟失,絕大部分都并不是真的“丟失”,而是原版系統本身確實就沒有自帶。
丟失d3、x3d開頭的dll是DX的問題 丟失msvcr、msvcp之類的是VC++的問題 丟失xlive是沒裝Games for Windows LIVE 丟失physxloader是沒裝英偉達PhysX物理加速驅動
很顯然 你的DX運行庫有問題 用修復工具進行一鍵修復即可 輕松搞定
打開電腦瀏覽器后在頂部網站輸入欄目輸入:dll修復精靈.site【按下鍵盤上的回車鍵打開】,搜索對應的dll文件下載;
下載好了以后是壓縮文件,需要先把壓縮文件解壓才能打開;
解壓好了以后雙擊進入文件夾,在修復文件上方右鍵,選擇以管理員身份運行打開;
打開修復工具以后,選擇“我接受”按鈕,然后下一步;
再點擊下方的修復按鈕,開始修復電腦缺失的dll文件;
等待修復完成以后,點擊完成按鈕退出就可以;
安裝修復好了以后,電腦桌面是沒有圖標的,修復的文件主要是在電腦C盤的Windows文件夾中;
修復完成以后就可以正常打開軟件。如果還不行就重啟一下電腦就可以;
可以修復Windows7-win10-win11系統缺失dll文件;
在處理DLL文件問題時,推薦使用DLL修復工具,這款專業的電腦運行庫檢測工具具有自動搜索、替換缺失或損壞的DLL文件的功能,能夠為您提供便捷、快速的解決方案。