[常用工具] dlib编译调用指南
dlib是一個C++工具包(dLIB中也有Python接口,但是主要編程語言為C++),包含絕大多數常用的機器學習算法,許多圖像處理算法和深度學習算法,被工業界和學術界廣泛應用于機器人、嵌入式設備、移動電話和大型高性能計算環境等領域。dlib的開源許可允許您在任何應用程序中免費使用它。在工程實踐中,dlib通常和OpenCV結合使用,OpenCV提供圖像處理算法,dlib提供機器學習算法。對于從事計算機視覺行業的人,非常推薦學習使用dlib。本文主要講述dlib在Windows(win10)和linux(ubuntu18.04)下面向C++的編譯安裝調用。dlib具體介紹見其官網dlib官網。
文章目錄
- 1 資源
- 2 Windows下C++編譯安裝調用dlib
- 2.1 編譯
- 2.2 配置與使用
- 3 Ubuntu下C++編譯安裝調用dlib
- 3.1 編譯
- 3.2 配置與使用
- 4 Python安裝調用dlib
- 5 參考
1 資源
在dlib的github倉庫下載對應版本文件。鏈接地址為:dlib。此外,在使用dlib中需要使用dlib提供的模型,下載地址見dlib-models。如果網速太慢,可以看看gitee備份。地址為:dlib-gitee和dlib-models-gitee。
本文判斷dlib是否成功編譯的示例代碼為dlib\examples目錄下的3d_point_cloud_ex.cpp。調用該示例代碼后會可視化一個簡單的3維點云數據。
代碼如下:
2 Windows下C++編譯安裝調用dlib
Windows下的編譯使用很簡單,不需要其他的額外安裝庫,直接拉取dlib的倉庫就行了。本文將dlib倉庫放在D:\packages\dlib路徑下,然后通過cmake和vs2017編譯使用dlib。這一部分參考文章【C++】VS2019+Dlib安裝及整合詳細步驟。
2.1 編譯
step1
在D:\packages\dlib路徑下創建build文件夾和install文件夾,build文件夾用于存放相關編譯數據,install保存最后需要調用的生成文件。文件結構如下圖所示:
step2
打開cmake-gui,配置dlib庫。cmake安裝地址為:cmake。打開cmake-gui后設置源代碼目錄地址和生成文件地址,點擊configure。如圖所示:
然后配置編譯器,選擇對應的編譯器版本,再選擇編譯平臺版本x64。最后點擊finish,cmake將會自動編譯文件。
在編譯過程會出現找不到cuda的情況,忽視就行了。然后注意將指定的安裝目錄CMAKE_INSTALL_PREFIX這一項改為D:\packages\dlib\install。然后再點擊configure,如果沒有標紅,點擊generate。
step3
生成相關文件,generate成功后打開OpenProject即可,這樣就會打開vs2017。 如下圖所示:
打開后的vs2017界面如下圖所示,確定編譯平臺為debug/x64,然后點擊生成-生成解決方法即可,如下圖所示。這樣的好處是知道哪些模塊生成失敗。如果有生成譯錯誤,檢查即可。這一過程約3分鐘,不同機器時間不一樣。
生成成功后,如下圖所示。可以有生成跳過,但是不能有生成失敗。
如果生成后沒有失敗的,選擇解決方案-INSTALL-僅用于項目-僅生成INSTALL,如下圖所示:
此外以上操作只能生成dlib Debug版本。Release版本需要修改配置平臺,重復以上操作。如下圖所示:
最后如果install文件夾中有include文件夾和lib文件夾,表明編譯過程成功。如下圖所示:
在windows平臺下,某些情況下dlib會使用libjpeg,libpng模塊,可能會出現鏈接libjpeg錯誤的情況。如果你使用的是anaconda,dlib會自動鏈接anconda的libjpeg,libpng模塊。這些模塊是32位的,你只能用x86的dlib版本,否則出錯。如果是想用x64平臺,需要自己編譯第三方模塊的x64版本,比如libpng,libjpeg,zlib。github搜索這些模塊,然后編譯后。用visual studio的命令行開發工具,進入build目錄,自行指定libjpeg等鏈接文件,再進行編譯。其中dlib要鏈接的第三方庫自行指定目錄(目前看來這一種解決辦法),具體命令如下:
# Visual Studio 15 2017指vs2017,vs2015用Visual Studio 14 2015,vs2019用Visual Studio 16 2019 # -DCMAKE_INSTALL_PREFIX=../instal 編譯文件安裝目錄 cmake -G "Visual Studio 15 2017" -DJPEG_INCLUDE_DIR=..\dlib\external\libjpeg -DJPEG_LIBRARY=..\dlib\external\jpeg.lib -DPNG_PNG_INCLUDE_DIR=..\dlib\external\libpng -DPNG_LIBRARY_RELEASE=..\dlib\external\libpng.lib -DZLIB_INCLUDE_DIR=..\dlib\external\zlib -DZLIB_LIBRARY_RELEASE=..\dlib\external\z.lib -DDLIB_GIF_SUPPORT=OFF -DCMAKE_INSTALL_PREFIX=../install -DCMAKE_GENERATOR_PLATFORM=x64 ..# 編譯debug版本 cmake --build . --target INSTALL# 編譯release版本 cmake --build . --config Release --target INSTALL2.2 配置與使用
新建vs2017項目,然后選擇屬性管理器,新建屬性列表dlib如下圖所示。這樣該dlib屬性列表以后可以重復導入使用,不需要每次新建工程都配置。
修改Release|X64模式下的dlib屬性,修改VC++目錄下的可執行目錄,庫目錄。如下圖所示:
包含目錄設置如下,添加頭文件:
D:\packages\dlib\install\include
庫目錄設置如下:
D:\packages\dlib\install\lib
然后修改鏈接器-輸入-附加依賴項,如下圖所示:
附加依賴項設置如下。注意不同版本dlib編譯生成的lib不一樣,注意區分,如果是debug就調用相應的debug版本,都在install\lib目錄下。
dlib19.22.99_release_64bit_msvc1916.lib
然后調用本文在第一節提到的示例代碼3d_point_cloud_ex.cpp文件,結果如下圖所示,就是一個展示3維點云的代碼,可以拖動或放大縮小圖形。
3 Ubuntu下C++編譯安裝調用dlib
3.1 編譯
ubuntu下編譯使用dlib比windows下稍微復雜,因為ubuntu缺少一些dlib所需要的庫,有時會出現莫名其妙的錯誤,一般來說都是缺少圖形顯示庫,比如linux下dlib需要x11圖像化界面(windows不需要,其他系統圖像化界面可能不一樣),所以先安裝x11。如果不安裝可能會出現X11相關錯誤。這一部分參考文章ubuntu下使用 dlib和cmake-cant-find-x11
sudo apt-get install libx11-dev
然后進入dlib根目錄,輸入以下命令:
mkdir build; cd build; cmake … -DUSE_AVX_INSTRUCTIONS=1; make -j12
上述命令會編譯AVX,來加速CPU運行,如果出現錯誤使用以下命令編譯:
mkdir build; cd build; cmake …; make -j12
3.2 配置與使用
新建一個文件夾dlib-test,將3d_point_cloud_ex.cpp復制到該文件夾。進入該文件夾,新建CMakeList.txt文件,CMakeList.txt內容如下。注意CMake文件鏈接dlib庫的路徑地址
cmake_minimum_required(VERSION 2.8.12) # 工程名 project(dlib_test)SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -O2 -DDLIB_JPEG_SUPPORT")IF(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Weverything") ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra") ENDIF()# 包含OpenCV find_package(OpenCV REQUIRED) if (OpenCV_FOUND)include_directories(${OpenCV_INCLUDE_DIRS})message("OpenCV found") endif()# 包含X11 find_package(X11 REQUIRED) if (X11_FOUND)include_directories(${X11_INCLUDE_DIR})message("X11 found") endif()# 添加dlib include_directories(/home/{yourpath}/dlib) link_directories(/home/{yourpath}/dlib/build/dlib/)# 添加代碼 add_executable(dlib_test 3d_point_cloud_ex.cpp) # 鏈接庫 # libdlib.a - lpthread - lX11分別表示鏈接dlib,多線程,X11 target_link_libraries(dlib_test ${OpenCV_INCLUDE_LIBS} ${X11_LIBRARIES} libdlib.a -lpthread -lX11)然后輸入以下命令,即可編譯運行示例代碼:
mkdir build; cd build; cmake …; make -j12; ./dlib_test
如果出現第二節的三維點云圖形,表明dlib安裝成功。
4 Python安裝調用dlib
通常直接用pip install dlib會出錯,所以需要安裝一系列的庫,主要是cmake、Boost。具體如下:
windows:
如果發現編譯失敗,看看python–3.8安裝dlib,直接通過whl包安裝dlib也行
linux:
sudo apt-get install libx11-dev sudo apt-get install libboost-all-dev sudo apt-get install cmake python3 -m pip install dlib安裝成功后,在python環境import dlib即表明安裝成功,當然也可以編譯安裝,具體步驟見官方倉庫文檔。
5 參考
- dlib官網
- dlib
- dlib-models
- dlib-gitee
- dlib-models-gitee
- 【C++】VS2019+Dlib安裝及整合詳細步驟
- ubuntu下使用 dlib
- cmake-cant-find-x11
總結
以上是生活随笔為你收集整理的[常用工具] dlib编译调用指南的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 产品需求规格说明书写法
- 下一篇: 【推荐】javaweb JAVA JSP