opencv下haarclassifiercascade加上LBPHFaceRecognizer实现人脸识别
来源:互联网 发布:手机网络哪家好 编辑:程序博客网 时间:2024/06/05 21:08
(源代码下载:http://download.csdn.net/detail/csdfhj2011/7356491)
上一篇文章中已经用haarclassifiercascade级联分类器将人脸检测出来,那如何从这些人脸中识别出来谁是谁呢?
opencv较新版本中(我使用的是2.4.8)提供了一个FaceRecognizer类,里面有相关的一些人脸识别的算法及函数接口,其中包括三种人脸识别算法:
1.eigenface
2.fisherface
3.LBPHFaceRecognizer
本文实验室用的是第三种。LBP是一种特征提取方式,能提取出图像的局部的纹理特征,最开始的LBP算子是在3X3窗口中,取中心像素的像素值为阀值,与其周围八个像素点的像素值比较,若像素点的像素值大于阀值,则此像素点被标记为1,否则标记为0。这样就能得到一个八位二进制的码,转换为十进制即LBP码,于是得到了这个窗口的LBP值,用这个值来反映这个窗口内的纹理信息。
LBPH是在原始LBP上的一个改进,在opencv支持下我们可以直接调用函数直接创建一个LBPH人脸识别的模型(eigenface和fisherface类似):
Ptr<FaceRecognizer> model = createLBPHFaceRecognizer();创建完模型之后开始训练样本
void FaceRecognizer::train(InputArrayOfArrays src, InputArray labels) = 0
这是FaceRecognizer类提供的训练函数,src要求格式是vector<Mat>,labels要求格式是vector<int>
对样本图片的处理我写在一个函数内:
void initRecognizer(const int num_trainingImages,const string image_Path){vector<Mat> images;vector<int> labels;for(int i=0;i < num_trainingImages;i++){strstream ss;string s;ss << i;ss >> s;string filename;filename = image_Path;filename+= s;filename= filename+".jpg";images.push_back(imread(filename,CV_LOAD_IMAGE_GRAYSCALE));labels.push_back(i);}model->train(images,labels);}
const int num_trainingImages,const string image_Path两个参数分别是要训练的样本的数量和图片文件夹的路径。
opencv中还提供了一个update函数用来对模型进行升级,避免全部重新训练。
void FaceRecognizer::update(InputArrayOfArrays src, InputArray labels)
训练完之后就是对测试图片的predict了。
int FaceRecognizer::predict(InputArraysrc) const = 0
返回预测到的样本对应的label。我们可以根据对应的label输出样本图片人的名字:
string predictedString(const Mat faceMat){string str1 = "wanghuafeng";string str2 = "huangjiang";string str3 = "women";int predicted = model->predict(faceMat);if(predicted<=3) return str1;else if(predicted<=6) return str2;else if(predicted<=8) return str3;}返回预测到的样本对应人的名字。
参考资料:http://docs.opencv.org/modules/contrib/doc/facerec/facerec_api.html
(源代码下载:http://download.csdn.net/detail/csdfhj2011/7356491)
- opencv下haarclassifiercascade加上LBPHFaceRecognizer实现人脸识别
- opencv下HaarClassifierCascade的简单人脸检测
- 使用Opencv实现IOS平台下的人脸识别
- 利用OpenCV实现人脸识别
- OpenCV+JavaCV实现人脸识别
- OpenCV + MFC 实现简单人脸识别
- Python调用OpenCV实现人脸识别
- OpenCV + Python 实现人脸识别
- OpenCV人脸识别
- opencv人脸识别
- openCV人脸识别
- Opencv 人脸识别
- opencv人脸识别
- Opencv 人脸识别
- opencv 人脸识别
- OpenCv人脸识别
- openCV人脸识别
- OpenCV人脸识别
- PAT A 1039. Course List for Student (25)
- MySQL数据库的用户管理相关配置
- Java打成可执行jar过程中需要注意的一些问题
- 访问控制符
- 人一旦选择活下去,就必须为了生活起早贪黑,四处奔波
- opencv下haarclassifiercascade加上LBPHFaceRecognizer实现人脸识别
- 稀疏矩阵的转置
- zxcvbn: realistic password strength estimation
- JDK1.7中引用sun.management.ManagementFactory
- 各大主要组织
- 一次学习成绩的考差,并不能否定每次都考不好
- web应用的数据传输格式
- android 蓝牙各种UUID
- jQuery学习笔记之Ajax在jQuery中的应用