您的位置:首页 > 其它

FaceRecognizer

2015-06-25 20:36 357 查看
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库。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: