基于OpenCV的EigenFace FisherFace LBPHFace人脸识别的实现

阅读: 评论:0

基于OpenCV的EigenFace FisherFace LBPHFace人脸识别的实现

基于OpenCV的EigenFace FisherFace LBPHFace人脸识别的实现

OpenCV自带了丰富的人脸识别库,本文通过阅读OpenCV文档,实现了人脸识别的三种经典算法:PCA(特征脸方法),LDA(线性判别分析),以及LBP(Local Binary Patterns,局部二值模式)方法。人脸数据集采用的是Yale的人脸数据库和att_faces人脸库,下载链接 
下面附上代码:

/*2015.12.31,by xdzzju*/
/*改程序的功能是利用opencv的人脸识别库,训练及测试yale人脸库和att_faces人脸库,可选用三种训练模型,eigenface,fisherface及LBP*/
/*编程环境为vs2012+opencv2.4.9*/#include "iostream"
#include "stdlib.h"
#include "vector"#include "opencv2/core/core.hpp"
#include "opencv2/contrib/contrib.hpp"
#include "opencv2/highgui/highgui.hpp"using namespace std;
using namespace cv;int main()
{vector<Mat> images;vector<int> labels;cout<<"choose dataset:"<<endl;int datasetChoose;cin>>datasetChoose;                                 //选择数据集if(datasetChoose==1){string* fileName=new string[166];for(int i=1;i<=165;i++)                         //将文件名编号放入string数组,从1开始{char* temp=new char[3];itoa(i,temp,10);fileName[i]="yaleFaceDataset/s";fileName[i]+=temp;fileName[i]+=".bmp";}// load imagesfor(int i=1;i<=165;i++){if(i%11)                                    //将每组人脸的前十张用于训练,最后一张用于测试{images.push_back(imread(fileName[i], CV_LOAD_IMAGE_GRAYSCALE));labels.push_back(i/11+1);}}int modelChoose;Ptr<FaceRecognizer> model;while(1){cout<<"choose model:"<<endl;cout<<"1 EigenFace"<<endl;cout<<"2 Fisher"<<endl;cout<<"3 LBPH"<<endl;cin>>modelChoose;switch(modelChoose){case 1:model =  createEigenFaceRecognizer();break;case 2:model =  createFisherFaceRecognizer();break;case 3:model =  createLBPHFaceRecognizer();break;default:model =  createLBPHFaceRecognizer();break;}model->train(images,labels);for(int i=11;i<=165;i+=11){Mat image=imread(fileName[i], CV_LOAD_IMAGE_GRAYSCALE);int predict=model->predict(image);cout<<predict<<endl;}}}else if(datasetChoose==2){int predictRight=0,predictWrong=0;string fileName;char* tempdir=new char[3];char* tempFilename=new char[3];for(int i=1;i<=40;i++)                      //导入图片,每组前9张作为训练集,最后一张用来测试{for(int j=1;j<=9;j++){fileName="att_faces/";itoa(i,tempdir,10);fileName+="s";fileName+=tempdir;fileName+="/";itoa(j,tempFilename,10);fileName+=tempFilename;fileName+=".bmp";Mat tempImage=imread(fileName, CV_LOAD_IMAGE_GRAYSCALE);images.push_back(tempImage);labels.push_back(i);}}int modelChoose;Ptr<FaceRecognizer> model;while(1){predictRight=0;predictWrong=lease();cout<<"choose model:"<<endl;cout<<"1 EigenFace"<<endl;cout<<"2 Fisher"<<endl;cout<<"3 LBPH"<<endl;cin>>modelChoose;switch(modelChoose){case 1:model =  createEigenFaceRecognizer();break;case 2:model =  createFisherFaceRecognizer();break;case 3:model =  createLBPHFaceRecognizer();break;default:model =  createLBPHFaceRecognizer();break;}model->train(images,labels);for(int i=1;i<=40;i++){fileName="att_faces/";itoa(i,tempdir,10);fileName+="s";fileName+=tempdir;fileName+="/";fileName+="10.bmp";cout<<fileName<<endl;Mat image=imread(fileName, CV_LOAD_IMAGE_GRAYSCALE);int predict=model->predict(image);if(predict==i)predictRight++;else predictWrong++;cout<<predict<<endl;}cout<<"right:"<<predictRight<<endl;cout<<"wrong:"<<predictWrong<<endl;}}return 0;
}

本文发布于:2024-02-02 13:16:57,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170685101644053.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:EigenFace   OpenCV   LBPHFace   FisherFace
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23