SeetaFace教程(一) 在 VS 中的編譯安裝和環境配置


SeetaFace開源庫由FaceDetection、FaceAlignment、FaceIdentification三部分組成。FaceDetection是在一副圖片中檢測出人臉區域,以一個方形區域表示。FaceAlignment利用FaceDetection中檢測出的方框,進一步檢測出人臉的5個關鍵點(兩眼中心,鼻尖和兩個嘴角)。最后,FaceIdentification利用FaceAlignment中檢測出的關鍵點,提取出單個人臉的特征。

使用SeetaFace首先需要把原始的文件進行編譯,本文先介紹SeetaFace在Visual Studio中三個部分的編譯過程,然后再簡要介紹如何配置Visual Studio中的SeetaFace開發環境。

注意:

  1. SeetaFace需要Opencv環境,要先安裝好。

  2. SeetaFace使用了一些C++ 11的新特性,因此最好在VS2013中編譯。(詳見:這個平台怎么在Visual studio2010上搭建(電腦是Windows8.1,64位的) · Issue #33 · seetaface/SeetaFaceEngine · GitHub)。本文是在VS2012環境下編譯的,因此會出現一些問題,但通過修改源碼這些問題都解決了。如果編譯環境不是VS2013的,可以參考這篇文章解決一下相應的編譯問題。

一、編譯FaceDetection部分

FaceDetection在目錄SeetaFaceEngine\FaceDetection下。

按照官方的步驟安裝:

  1. 在其他地方創建一個空DLL工程: New Project -> Visual C++ -> Win32 Console Application -> DLL.

  2. (Optional) Create and switch to x64 platform.

  3. 添加include目錄:(Project) Properities -> Configuration Properties -> C/C++ -> General -> Additional Include Directories.。加入SeetaFaceEngine\FaceDetection\include目錄。

  4. 添加cpp文件: 拷貝 SeetaFaceEngine\FaceDetection\src中的文件到項目文件夾,src/test文件夾中的東西不復制。在解決方案資源管理器中選擇顯示所有文件,然后右鍵選擇包括在項目中,把文件都包含進來。

  5. Define SEETA_EXPORTS macro: (Project) Properities -> Configuration Properties -> C/C++ -> Preprocessor -> Preprocessor Definitions.

  6. (Optional) Switch to Intel C++ (for better code optimization).

  7. (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.

  8. F7 編譯

 

遇到的問題:kStdDevThresh初始化方法不對。

解決方法:把原來的初始化去掉,只留聲明。在類的構造函數的地方初始化:LABBoostedClassifier() : use_std_dev_(true),kStdDevThresh(10.0f)

 

編譯后可得到FaceDetection.lib和FaceDetection.dll。

二、編譯FaceAlignment部分

FaceAlignment在目錄SeetaFaceEngine\FaceAlignment下。

同樣安裝官方的步驟。包含.h和.cpp的方法和上面一樣。

  1. Create a dll project: New Project -> Visual C++ -> Win32 Console Application -> DLL.

  2. (Optional) Create and switch to x64 platform.

  3. Add header files: all *.h files in include.

  4. Add source files: all *.cpp files in src except for those in src/test.

  5. Define SEETA_EXPORTS macro: (Project) Properities -> Configuration Properties -> C/C++ -> Preprocessor -> Preprocessor Definitions.

  6. 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解決!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM