FaceRecognizer

1. 總體工作流程

         1.1 主要成員及作用

         FaceTrackertrain_face_tracker;  // FaceTracker類,在訓練階段跟蹤人臉,採集樣本

         FaceTrackerpredict_face_tracker; // FaceTracker類,在識別階段跟蹤人臉,採集樣本

         FaceRecognizerface_recognizer; // FaceRecognizer類,負責樣本的訓練和識別

         1.2 工作流程

                  

 

2. 類功能說明

         2.1人臉跟蹤相關類

         ClassFaceTracker;

         ClassFaceTrack;

 

         2.1.1)FaceTrack類

         屬於同一個人(subject)的多幀人臉構成一個FaceTrack,FaceTrack即爲將被訓練的樣本數據。

         2.1.1.1)主要成員變量:

         vector<Mat>m_vecFaces;// 屬於同一個人(subject)的多幀人臉圖像

         Pointm_ptCenter;       //  最後一幀人臉的中心位置

         boolm_bAssigned;       // 最後一幀人臉是否是當前幀

         intm_iMissNum;         // 丟失的人臉幀數

         2.1.1.2)主要成員函數:

         voidAssignFace(Mat& face, Point pt) //將當前幀人臉加入到FaceTrack中,並更新人臉中心位置

voidUnassignFace() //當前幀沒有跟蹤到人臉時,更新m_bAssigned和m_iMissNum值

 

2.1.2)FaceTracker類

對OpenCV檢測到的人臉進行跟蹤,並存儲到相應的FaceTrack中。跟蹤標準是位置和大小,位置和大小最接近的人臉認爲屬於同一個人(subject).

2.1.2.1)主要成員變量

list<FaceTrack>m_lstFaceTracks; // 跟蹤到的不同人(subject)的人臉構成的FaceTrack集合

2.1.2.2)主要成員函數

voidTrack(vector<Mat>& faces, vector<Point>& centers); //  對OpenCV檢測的人臉和中心位置與現有的FaceTrack的人臉和中心位置進行比較,大小和中心位置最接近的人臉認爲是屬於同一個人(subject)的,將剛檢測到的人臉存入響應的FaceTrack; 如果沒有接近的,建立新的FaceTrack,將檢測到的人臉存入其中。

 

 

2.2) 人臉訓練和識別相關類

Class FaceRecognizer;//人臉訓練和識別類

Class MyAbstractLBPH;Class MyLBPH; LBP_Core;   // LBP feature相關類,來自OpenCV

Class LANDMARK_Model;//檢測人臉特徵點的類,來自http://cmp.felk.cvut.cz/~uricamic/flandmark/

 

2.2.1) LBPfeature相關類

這裏的人臉訓練和識別採用的是LBPfeature,相關類是Class MyAbstractLBPH; Class MyLBPH; LBP_Core,代碼來自OpenCV.

 

2.2.2) LANDMARK_Model類

LANDMARK_Model類是用來檢測人臉特徵點的,相關文件是flandmark_detector.h和flandmark_detector.cpp,來源是http://cmp.felk.cvut.cz/~uricamic/flandmark/

 

2.2.3) FaceRecognizer類

FaceRecognizer類用來訓練和識別人臉

2.2.3.1)主要成員變量

MyLBPH m_lbph;// LBP feature類,用來生成LBP feature

boolm_bTrained; // 標記是否有人臉已經被訓練過

FLANDMARK_Model*m_flandmarkModel; // 用來檢測人臉特徵點的類

double*m_pLandmarks; // 檢測到的人臉特徵點位置

boolm_bHighDimensionLbp; //標記是否要採用高維LBP,如果採用高維LBP,在每個人臉特徵點處的局部圖都要生成LBP feature,最終組成高維LBP feature;如果不採用高維LBP,只對全臉生成LBP feature

vector<vector<Mat>>m_trainImages; //訓練出的LBP feature

vector<int>m_trainLabels; //各個人(subject)的標記

2.2.3.2) 主要成員函數

boolTrain(list<FaceTrack>& face_tracks); // 檢查檢測到的人臉是否達到註冊人數,如果達到開始對採集到的人臉樣本進行訓練

boolPredict(list<FaceTrack>& face_tracks,

                   vector<int>&predict_labels, vector<double>& predict_dists);//對檢測到的人臉樣本進行預測

void_prepareTrainData(list<FaceTrack>& face_tracks); //準備訓練數據,包括resize人臉大小,根據標記檢測人臉特徵點

 

3. 文件結構說明

 

MyFaceRecognizer

         Include// 頭文件

         Src    // 源文件

         MyLBPH// 來自OpenCV的LBP feature文件

         flandmark_src// 來http://cmp.felk.cvut.cz/~uricamic/flandmark/的人臉特徵點檢測文件

         test// 測試用例文件

         data// 數據文件,包含OpenCV人臉檢測要使用的庫文件、人臉特徵點檢測要使用的庫文件以及測試視頻

         doc// 說明文檔

 

 

4. 使用說明

         打開工程文件,及工程文件中的main.cpp文件,在main.cpp中可以指定讀取視頻或是攝像頭,並設定OpenCV人臉檢測要使用的庫文件、人臉特徵點檢測要使用的庫文件以及測試視頻的路徑,編譯工程,執行。默認會輸出debug信息,可以關閉。

         注意:

         1)保證OpenCV人臉檢測要使用的庫文件、人臉特徵點檢測要使用的庫文件存在並且路徑正確;

         2)保證工程能鏈接到OpenCV庫,目前代碼中使用的是OpenCV2.x庫。

發佈了140 篇原創文章 · 獲贊 18 · 訪問量 79萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章