SeetaFace開源庫由FaceDetection、FaceAlignment、FaceIdentification三部分組成。FaceDetection是在一副圖片中檢測出人臉區域,以一個方形區域表示。FaceAlignment利用FaceDetection中檢測出的方框,進一步檢測出人臉的5個關鍵點(兩眼中心,鼻尖和兩個嘴角)。最后,FaceIdentification利用FaceAlignment中檢測出的關鍵點,提取出單個人臉的特征。
使用SeetaFace首先需要把原始的文件進行編譯,本文先介紹SeetaFace在Visual Studio中三個部分的編譯過程,然后再簡要介紹如何配置Visual Studio中的SeetaFace開發環境。
注意:
-
SeetaFace需要Opencv環境,要先安裝好。
-
SeetaFace使用了一些C++ 11的新特性,因此最好在VS2013中編譯。(詳見:這個平台怎么在Visual studio2010上搭建(電腦是Windows8.1,64位的) · Issue #33 · seetaface/SeetaFaceEngine · GitHub)。本文是在VS2012環境下編譯的,因此會出現一些問題,但通過修改源碼這些問題都解決了。如果編譯環境不是VS2013的,可以參考這篇文章解決一下相應的編譯問題。
一、編譯FaceDetection部分
FaceDetection在目錄SeetaFaceEngine\FaceDetection下。
按照官方的步驟安裝:
-
在其他地方創建一個空DLL工程: New Project -> Visual C++ -> Win32 Console Application -> DLL.
-
(Optional) Create and switch to x64 platform.
-
添加include目錄:(Project) Properities -> Configuration Properties -> C/C++ -> General -> Additional Include Directories.。加入SeetaFaceEngine\FaceDetection\include目錄。
-
添加cpp文件: 拷貝 SeetaFaceEngine\FaceDetection\src中的文件到項目文件夾,src/test文件夾中的東西不復制。在解決方案資源管理器中選擇顯示所有文件,然后右鍵選擇包括在項目中,把文件都包含進來。
-
Define SEETA_EXPORTS macro: (Project) Properities -> Configuration Properties -> C/C++ -> Preprocessor -> Preprocessor Definitions.
-
(Optional) Switch to Intel C++ (for better code optimization).
-
(Optional) Enable OpenMP support: (Project) Properities -> Configuration Properties -> C/C++ -> Language -> Open MP Support (or ... C/C++ -> Language [Intel C++] -> OpenMP Support). Define USE_OPENMP macro if necessary.
-
F7 編譯
遇到的問題:kStdDevThresh初始化方法不對。
解決方法:把原來的初始化去掉,只留聲明。在類的構造函數的地方初始化:LABBoostedClassifier() : use_std_dev_(true),kStdDevThresh(10.0f)
編譯后可得到FaceDetection.lib和FaceDetection.dll。
二、編譯FaceAlignment部分
FaceAlignment在目錄SeetaFaceEngine\FaceAlignment下。
同樣安裝官方的步驟。包含.h和.cpp的方法和上面一樣。
-
Create a dll project: New Project -> Visual C++ -> Win32 Console Application -> DLL.
-
(Optional) Create and switch to x64 platform.
-
Add header files: all *.h files in include.
-
Add source files: all *.cpp files in src except for those in src/test.
-
Define SEETA_EXPORTS macro: (Project) Properities -> Configuration Properties -> C/C++ -> Preprocessor -> Preprocessor Definitions.
-
Build.
遇到的問題1:min,max函數模板函數重載無法確定。
解決方法:在引用函數的地方,把兩個參數都加入強制類型轉換double()
遇到的問題2:沒有isnan函數
解決方法:自行定義
#ifndef isnan
#define isnan(x) ((x)!=(x))
#endif
編譯成功后可得到FaceAlignment.dll和FaceAlignment.lib
三、編譯FaceIdentification 部分
這個模塊的編譯不需要創建工程。
直接打開打開SeetaFaceEngine\FaceIdentification\examples中的VS解決方案文件examples.sln。這個文件中有兩個工程Identification和Tester。
先編譯Identification工程就可以得到Identification.dll和Identification.lib了。
這里編譯時,如果v120的工具集不對,可以調成你的VS版本,這里我是VS2012所以調成v110
四、搭建獨立項目環境
上面都編譯好后,就可以搭建新的獨立項目的環境了。
首先新建一個空的項目。
將上面得到的6個文件FaceAlignment.dll、FaceAlignment.lib、FaceDetection.lib、FaceDetection.dll、Identification.dll和Identification.lib拷貝到項目根目錄下。
在項目屬性 -> VC++ -> 包含目錄中加入3個include路徑,寫你自己的SeetaFace所在地址,我這里是:D:\SeetaFaceEngine\FaceIdentification\include、D:\SeetaFaceEngine\FaceAlignment\include、D:\SeetaFaceEngine\FaceDetection\include。
在項目屬性 -> 連接器 -> 輸入 -> 附加依賴項加入Identification.lib、FaceAlignment.lib、FaceDetection.lib:
這樣環境就搭建好了。我們可以新建一個cpp,把SeetaFaceEngine\FaceIdentification\src\test\test_face_recognizer.cpp中的內容都拷貝進來,應該就編譯成功了。
不過此時運行會出現“../../model/seeta_fr_v1.0.bin not exist!”錯誤:
其實是因為SeetaFace需要它提前訓練好的model文件,除此之外,還需要data文件。model文件在SeetaFaceEngine\FaceIdentification\model下,把它解壓好,data文件在SeetaFaceEngine\FaceIdentification\data中。
我們把程序中的定義model和data的地方改到自己電腦的對應位置:
(也可以把文件復制過來,然后改為相對目錄)
這樣運行,就可以了:
以上轉自https://zhuanlan.zhihu.com/p/22604228
最后提及一下自己遇到的問題,系統win7,vc2013,運行程序遇到0xc000007b問題,坑爹啊!!!!!!網上百度多種方法:
1.DirectX修復,無效
2.2013運行庫重裝,無效
3.vs2013修復,無效
最后!!!用管理員權限打開VS2013解決!!!