源地址:http://blog.csdn.net/sunshine_in_moon/article/details/49838245/
3000FPS是人臉對齊算法,特點是速度快!我利用的是thinkface上一位大牛提供的代碼http://www.thinkface.cn/thread-3136-1-1.html這里面提供了C++版代碼,人臉數據庫及大牛訓練好的模型的連接,大家可以自行下載。下面介紹具體的配置過程以及遇到的問題和其解決方法。
安裝分為4個步驟:
1.下載人臉數據庫,獲取Path_Images.txt。
AFW人臉數據庫:http://www.thinkface.cn/thread-1029-1-1.html
LFPW人臉數據庫:http://www.thinkface.cn/thread-1032-1-1.html
Helen人臉數據庫:http://www.thinkface.cn/thread-1030-1-1.html
IBUG人臉數據庫:http://www.thinkface.cn/thread-1031-1-1.html
我使用的是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