Dlib在VS2015上的編譯和配置(人臉檢測人臉識別比OpenCV更好用)

Dlib在VS2015上的編譯和配置(人臉檢測人臉識別比OpenCV更好用)

這是一篇以前的博客,但是沒有發在新的平台上,有些人可能沒看到,所以重新整理下。看過的就可以跳過了。

一、Dlib簡介

Dlib是基於現代C++的一個跨平台通用的框架,作者非常厲害而且非常勤奮,一直在保持更新。最近作者忙於更新dnn方面的內容,雖然我覺得dnn的介面非常不友好。Dlib內容非常豐富,包括但不僅限於機器學習、圖像處理、數值演算法、數據壓縮等等,更重要的是,Dlib的文檔非常完善,例子非常豐富。

Dlib提供的人臉檢測比OpenCV的人臉檢測模型更好用。而且Dlib提供了OpenCV沒有的人臉關鍵點檢測方法(現在有了,剛出現在contrib模塊里)和基於深度學習的人臉識別工具。而且提供了比OpenCV更加完善的機器學習和深度學習的模塊。而且可以和OpenCV結合使用,二者的圖像可以方便地轉換。我曾基於dlib嘗試過很多關於人臉的程序:人臉檢測、人臉關鍵點提取、顏值預測、換臉演算法和人臉識別。

二、編譯Dlib

之前也曾介紹過Python下dlib的編譯安裝方法,但是用Python調用dlib需要先編譯boost。非常麻煩,還是用C++更簡單一些。但是雖說簡單,如果沒有找對教程的話,也許會更加麻煩。我當初找到的dlib的配置方法,Visual studio配置dlib太複雜了。打開個JPG或者PNG圖片就得把整整三個文件夾的內容(包括上百個文件)添加到項目里。簡直不能忍。就是下面這三個。大部分的教程都是這麼說的。官網也有提到這這種方法。

dlibexternallibjpegndlibexternallibpngndlibexternalzlibn

不知道大家是怎麼認為的,反正我覺得這樣很反人類。當年我的習慣是遇到問題問度娘,然後看一些中文的解決方案。現在的習慣慢慢變成了去官網,看官方文檔。今天按照官方文檔重新配置了一下。感覺利索多了。而且用cmake的命令行簡直比GUI爽太多了。

有興趣的可以直接去官網看官方的教程:How to compile。我這裡記錄一下我自己的配置過程。大致跟官方介紹一樣。

首先還是要有cmake,而且要添加到環境變數。這一步如果沒有camke,需要去官網下一個。最好下載安裝版的而不是壓縮版的,安裝版的安裝的時候會讓你選擇是否添加環境變數,選擇添加。不然下載壓縮版的還得自己手動添加環境變數然後重啟電腦才能用。

  1. 然後在dlib-版本號文件夾(比如dlib-19.7)下打開命令提示符(shift加右鍵),用下面的命令,相對於官方的略有改動:

mkdir buildncd buildncmake -G "Visual Studio 14 2015 Win64" ..ncmake --build . --config Releasen

這裡有兩點注意事項

(1)一定要vs 2015或者更高的版本,據說之前的版本對於C++11的支持不夠好。

(2)build的時候一定要是Release模式。因為Debug模式超級!超級!慢!親測。參考:Why is dlib slow?

build完成之後會在dlib-19.7builddlibRelease文件夾下生成dlib.lib。至此編譯完成。比用cmake-gui簡單多了!

三、Visual Studio配置Dlib

配置visual studio 2015,新建一個項目,我這裡命名為dlib_01。

(1)打開項目屬性,配置包含目錄,直接上圖(用的當年的老圖):

(2)配置連接器——輸入——附加依賴項:

(3)為了打開jpg圖片還要加上DLIB_JPEG_SUPPORT,後面那個是為了加速。同樣的,如果要打開png圖片,還得加一個 DLIB_PNG_SUPPORT

上面三項配置之後就完成了,就可以自己寫程序或者運行dlib自帶的examples程序了。但是官方自帶的程序都是命令行運行的,如果要在vs中運行需要稍作修改,把命令行參數修改為具體的文件名或者路徑。試了一個人臉檢測和人臉關鍵點檢測的例子。效果還行。


推薦閱讀:

c++里,函數返回一個局部數組名可以嗎?
一段程序在gcc 5.4下編譯後,執行發生段錯誤,在gcc 4.4.7下編譯後,執行正常,什麼原因?
C++標準庫中有哪些危險函數?
彩程「又」招暑期實習生啦

TAG:人脸识别 | CC | OpenCV |