1. 程式人生 > >Face Alignment at 3000FPS(C++版)工程配置

Face Alignment at 3000FPS(C++版)工程配置

3000FPS是人臉對齊演算法,特點是速度快!我利用的是thinkface上一位大牛提供的程式碼http://www.thinkface.cn/thread-3136-1-1.html這裡面提供了C++版程式碼,人臉資料庫及大牛訓練好的模型的連線,大家可以自行下載。下面介紹具體的配置過程以及遇到的問題和其解決方法。

安裝分為4個步驟:

我使用的是lfpw庫,裡面已經提供了Path_iamges.txt檔案,如果你下載的庫沒有提供這個.txt檔案,可以用下面的方法生成。比如我現在將AFW與LFPW作為訓練樣本的集合,那麼先解壓然後儲存到D:\Projects_Face_Detection\Datasets資料夾中,這是因為工程中train_model.m檔案下第40行中定義的,也可以自己做修改.因為train_model.m檔案中40行表示讀入訓練樣本的資料的檔案是Path_Images.txt,所以

進入控制檯先轉到目錄D:\Projects_Face_Detection\Datasets\afw,然後輸入命令dir /b/s/p/w *.jpg>Path_Images.txt,這是將所有jpg的檔案的檔名都輸入到Path_Images.txt檔案中,同樣轉到目錄D:\Projects_Face_Detection\Datasets\lfpw資料夾中輸入命令dir /b/s/p/w *.png>Path_Images.txt,因為lfpw的資料都是png檔案。

其中資料庫要根據你自己的資料庫以及資料庫的位置進行調整。

2、

下載liblinear庫,編譯獲取blas庫(liblinear/blas/blas.a

)。你需要將你的blas.a替代build目錄下的blas.a。

注意:新版本的程式這個步驟可以省略,作者已經把其整合到了工程裡。

新版本連結:https://github.com/yulequan/face-alignment-in-3000fps

不過你用的是老版本,那首先是下載liblinear,我的百度連結:http://pan.baidu.com/s/1gdruGuf

liblinear庫的安裝與使用可參考http://blog.csdn.net/zouxy09/article/details/10947323/

本人在此宣告,我沒有編譯成功,如果有編譯成功的朋友,麻煩留言,簡單講述下方法,在此感謝!

3、進入build資料夾

,編譯該程式。
cmake  make

說明:我用的是CMake介面版,在編譯時出現裡個問題,提示要不到opencv庫,錯誤提示為:

CMake Error at CMakeLists.txt:6 (find_package):

By not providing "FindOpenCV.cmake" in CMAKE_MODULE_PATH this project has

asked CMake to find a package configuration file provided by "OpenCV", but

CMake did not find one

出現這個問題是因為CMake配置OpenCV時出錯,解決方法很簡單新增一個環境變數就好具體步驟:我的電腦右擊->屬性->高階系統設定->環境變數->新建,變數名:OpenCV_DIR(注意大小寫,不能出錯)變數值:D:\Program Files\opencv\build重新啟動電腦(很重要!!)再用CMake進行configure和generate,然後開啟解決方案***.sln,進入VS,編譯,執行。這個問題的具體原因及解決方案請參考:http://m.blog.csdn.net/blog/ZHUQIBING/17184939

4、模型的訓練:在LBF.cpp檔案中設定全域性引數,在TrainDemo.cpp中設定資料庫。採用“LBF.out TrainModel”進行編譯。

具體設定:1)LBF.cpp檔案修改、

modelPath:訓練模型儲存的路徑,也是test階段模型載入的路徑

dataPath:資料庫圖片載入資料路徑,這裡要注意,還記得第一步中的Path_images.txt檔案嗎,這個檔案裡儲存的就是圖片路徑,這個檔案裡的路徑就是D:/Projects_Face_Detection/Datasets/,如果你沒有自己生成Path_images.txt檔案,而是使用官方提供的檔案,那你的資料庫資料夾就要放在這個路徑下,也就是說你要在D盤下新建這個檔案,否則你就好修改dataPath(不推薦,太麻煩,而且容易出錯)

cascadeName:這個引數不用修改,但是要把這個檔案放到工程下如:

下面是選擇使用訓練資料庫:


選擇要訓練模型使用的庫,把不用的庫,直接註釋掉就可以了

下面是選擇測試資料庫:


與上面一樣,選擇你的資料庫即可,我這裡是個錯誤,測試時的資料庫不應該與訓練資料庫相同。

2)TrainModel.cpp檔案修改:

首先,把第一步生成的Path_Images.txt檔案放到trainset檔案下(很重要,我在廢了很長時間,才找到是這的問題

3)TestModel.cpp檔案修改

由於照片不能正常上傳,需要注意的地方與TrainModel,cpp一樣把Path_Image.txt放到testset檔案下,否則找不到照片,就無法進行人臉檢測函式LoadOpencvBbxData(path, test_images, test_ground_truth_shapes, test_bounding_boxs);報錯!!!

5、編譯工程,編譯時提示錯誤:無法啟動程式 無法找到檔案e:\projects_pcl\pcl_filters\bilateral_filter\build\x64\Debug\ALL_BUILD  

這是因為用CMake生成工程檔案是包含了ALL_BUILD、ZERO_CHECK兩個工程檔案,直接把它們移除就OK!

具體請參考:http://blog.csdn.net/david_xtd/article/details/38381787

6、編譯成功後,就可以執行程式了。在資料庫上進行測試:在TestDemo.cpp檔案中設定測試資料庫,使用“LBF.out TestModel”進行編譯。這是在命令列下執行的。如果你不想使用這種方式,我們可以使用下面的方法:

工程檔案右擊->屬性->通用屬性->除錯->命令引數(TrainModel:訓練模型,TestModel:測試)

如果想用我編譯好的工程可以給我留言!

參考連結:

http://blog.csdn.net/wangjian8006/article/details/42004717

http://www.thinkface.cn/thread-3136-1-1.html

http://blog.csdn.net/zouxy09/article/details/10947323/

http://m.blog.csdn.net/blog/ZHUQIBING/17184939

http://blog.csdn.net/david_xtd/article/details/38381787