pca svm识别人脸

void SVMTRAINCLASS::OnBnClickedButtonsvmtrain()
{
	// TODO: Add your control notification handler code here
char filename[100];  
 static 	 CvSVM svm ; 
static  int isflag=0;
	vector<Mat> images; //This variable will be loaded with a set of images to perform PCA on.  
 int nEigens;
 vector<FILELABEL> faceBank;
 vector<CString> nonFaceBank;
 int num = 0;  
 Mat src;   
 //vector<FILELABEL> faceBank;
 //vector<CString> nonFaceBank;
 CString pospath,negpath;
 GetDlgItemText(IDC_EDITSAMPLEFILE,pospath);
 GetDlgItemText(IDC_EDITSAMPLEFILE2,negpath);
 if(strlen(pospath)==0||strlen(negpath)==0)return;
 GetSubDirFiles(pospath,faceBank,0);
 GetDirFiles(negpath,nonFaceBank);
 int div =0;
 div=GetDlgItemInt(IDC_COMBOTEZHENGFANGFA);
 int imageFaceNum = faceBank.size()/div;  
 int imageNonFaceNum = nonFaceBank.size()/div; 
 Mat values(imageFaceNum+imageNonFaceNum, 1, CV_32SC1); //Values are the corresponding values to each of my images.  
 print("load face");
  int r=GetDlgItemInt(IDC_EDIT6);
 int w=GetDlgItemInt(IDC_EDIT7);
 for(int i=1; i<=imageFaceNum; i++) {  
  //sprintf(filename,"C:/img/face/MIT/MIT/faces/%d.bmp",i);  
  values.at<int>(i-1,0) = faceBank[i-1].label;  
  src=cvLoadImage(faceBank[i-1].name,0);  
  resize(src,src,Size(r,w));
  images.push_back(src);  
  num++;  
 }   

 print("load unface");
 for(int i=1; i<=imageNonFaceNum; i++) {  
  //sprintf(filename,"C:/img/face/MIT/MIT/nonfaces/%d.bmp",i);  
  values.at<int>(imageFaceNum+i-1,0) = -1;  
  src=cvLoadImage(nonFaceBank[i-1],0);  
  resize(src,src,Size(r,w));
  images.push_back(src);  
  num++;  
 }  
    nEigens = images.size() - 1; //Number of Eigen Vectors.   

 //Load the images into a Matrix   
 Mat desc_mat(images.size(), images[0].rows * images[0].cols, CV_8UC1);   
 print("merge mat");
 for (int i=0; i<images.size(); i++) {   
   desc_mat.row(i) = images[i].reshape(1, 1) + 0;   
 }   
 Mat average;   
 static  PCA pca(desc_mat, average, CV_PCA_DATA_AS_ROW, nEigens);   
 Mat data(desc_mat.rows, nEigens, CV_32FC1); //This Mat will contain all the Eigenfaces that will be used later with SVM for detection  
 //Project the images onto the PCA subspace   
 if(isflag==0){
 print("do pca");
 for(int i=0; i<images.size(); i++) {   
   Mat projectedMat(1, nEigens, CV_32FC1);   
   pca.project(desc_mat.row(i), projectedMat);   
   normalize(projectedMat,projectedMat,1.0);
   data.row(i) = projectedMat.row(0) + 0;   
 }   
 }
    
 CvMat d1 = (CvMat)data;   
 CvMat d2 = (CvMat)values;   
 if(isflag==0){
	 CvSVMParams param;      
	 CvTermCriteria criteria;      
	 criteria = cvTermCriteria( CV_TERMCRIT_EPS, 1000, FLT_EPSILON );      
	 param = CvSVMParams( CvSVM::C_SVC, CvSVM::RBF, 10.0, 0.09, 1.0, 10.0, 0.5, 1.0, NULL, criteria );           
	 //☆☆☆☆☆☆☆☆☆(5)SVM学习☆☆☆☆☆☆☆☆☆☆☆☆ 

	 print("begin train....");
	 svm.train( &d1, &d2, NULL, NULL, param ); 
	 print("done");
	 isflag=1;
}
 Mat cs;  
// Mat cs1(1,400,CV_32FC1);  
 
 CString chessimg;
 GetDlgItemText(IDC_EDITPREDICTFILE,chessimg);
     
   src=cvLoadImage(chessimg,0);  
  Mat src0=cvLoadImage(faceBank[0].name,0); 
  cv::resize(src,src,Size(images[0].rows,images[0].cols));
 
  cs = src.reshape(1, 1) + 0;    
  Mat projectedMat(1, nEigens, CV_32FC1);   
  pca.project(cs, projectedMat);   
  Mat mat=projectedMat+0;
  //CvMat d3 = (CvMat)projectedMat; 
  normalize(projectedMat,projectedMat,1.0);
  int ret = svm.predict(projectedMat);  
  print("%d",ret);  
  
 //for(int i=0; i<imageFaceNum; i++) {  
 // //sprintf(filename,"C:/img/face/MIT/MIT/faces/%d.bmp",i);  
 // src=cvLoadImage(faceBank[i],0);  
 // cs = src.reshape(1, 1) + 0;    
 // Mat projectedMat(1, nEigens, CV_32FC1);   
 // pca.project(cs, projectedMat);   
 // Mat mat=projectedMat+0;
 // //CvMat d3 = (CvMat)projectedMat; 
 // normalize(projectedMat,projectedMat,1.0);
 // int ret = svm.predict(projectedMat);  
 // print("%d",ret);  
 //}  
 
 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值