资源简介

在vs2010+opencv2.4.9运行环境,通过特征脸、PCA、LBPH三种方法分别训练生成了三个分类器,有训练源代码(加详细注释)和含有400张92*112人脸的数据库!

资源截图

代码片段和文件信息

//#include “stdafx.h“  
#include   
#include   
#include   
#include   
#include   
  
using namespace cv;  
using namespace std;  
 
static Mat norm_0_255(InputArray _src) {  
   Mat src = _src.getMat();  
    // 创建和返回一个归一化后的图像矩阵:  
    Mat dst;  
    switch (src.channels()) {  
    case1:  
        cv::normalize(_src dst 0 255 NORM_MINMAX CV_8UC1);  
       break;  
    case3:  
       cv::normalize(_src dst 0 255 NORM_MINMAX CV_8UC3);  
        break;  
    default:  
        src.copyTo(dst);  
      break;  
    }  
   return dst;  
}  

//使用CSV文件去读图像和标签,主要使用stringstream和getline方法  
static void read_csv(const string& filename vector& images vector& labels char separator = ‘;‘) {  
    std::ifstream file(filename.c_str() ifstream::in);  
    if (!file) {  
        string error_message = “No valid input file was given please check the given filename.“;  
        CV_Error(CV_StsBadArg error_message);  
    }  
    string line path classlabel;  
   while (getline(file line)) {  
        stringstream liness(line);  
        getline(liness path separator);  
       getline(liness classlabel);  
        if (!path.empty() && !classlabel.empty()) {  
           images.push_back(imread(path 0));  
           labels.push_back(atoi(classlabel.c_str()));  
        }  
   }  
}  
  
 
int main()   
{  
  
   //读取你的CSV文件路径.  
    //string fn_csv = string(argv[1]);  
   string fn_csv = “at.txt“;  
 
   // 2个容器来存放图像数据和对应的标签  
   vector images;  
    vector labels;  
   // 读取数据. 如果文件不合法就会出错  
   // 输入的文件名已经有了.  
    try  
  {  
        read_csv(fn_csv images labels);  
    }  
    catch (cv::Exception& e)  
    {  
        cerr << “Error opening file \““ << fn_csv << “\“. Reason: “ << e.msg << endl;  
       // 文件有问题,我们啥也做不了了,退出了  
        exit(1);  
   }  
    // 如果没有读取到足够图片,也退出.  
    if (images.size() <= 1) {  
       string error_message = “This demo needs at least 2 images to work. Please add more images to your data set!“;  
        CV_Error(CV_StsError error_message);  
    }  
  
    // 下面的几行代码仅仅是从你的数据集中移除最后一张图片  
   //[gm:自然这里需要根据自己的需要修改,他这里简化了很多问题]  
    Mat testSample = images[images.size() - 1];  
    int testLabel = labels[labels.size() - 1];  
    images.pop_back();  
  labels.pop_back();  
    // 下面几行创建了一个特征脸模型用于人脸识别,  
   // 通过CSV文件读取的图像和标签训练它。  
    // T这里是一个完整的PCA变换  
    //如果你只想保留10个主成分,使用如下代码  
    //      cv::createEigenFaceRecognizer(10);  
    //  
   // 如果你还希望使用置信度阈值来初始化,使用以下语句:  
   //      cv::createEigenFaceRecognizer(10 123.0);  
   //  
    // 如果你使用所有特征并且使用一个阈值,使用以下语句:  
   //      cv::createEigenFaceRecognizer(0 123.0);  
     
    Ptr model = createEigenFaceRecognizer();  
  //Ptr model = createEigenFaceRecognizer(); 

    model->train(images labels);  
    model->save(“MyFacePCAModel.xml“);  

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     125440  2018-03-22 10:22  训练模型\Debug\训练模型.exe

     文件     815336  2018-03-22 10:22  训练模型\Debug\训练模型.ilk

     文件    1608704  2018-03-22 10:22  训练模型\Debug\训练模型.pdb

     文件   57671680  2018-05-30 23:41  训练模型\ipch\训练模型-f1021360\训练模型-96bc5428.ipch

     文件      15039  2018-03-15 20:16  训练模型\训练模型\at.txt

     文件        690  2018-03-22 10:22  训练模型\训练模型\Debug\cl.command.1.tlog

     文件      18564  2018-03-22 10:22  训练模型\训练模型\Debug\CL.read.1.tlog

     文件        396  2018-03-22 10:22  训练模型\训练模型\Debug\CL.write.1.tlog

     文件          2  2018-03-22 10:22  训练模型\训练模型\Debug\link-cvtres.read.1.tlog

     文件          2  2018-03-22 10:22  训练模型\训练模型\Debug\link-cvtres.write.1.tlog

     文件          2  2018-03-22 10:22  训练模型\训练模型\Debug\link.11580-cvtres.read.1.tlog

     文件          2  2018-03-22 10:22  训练模型\训练模型\Debug\link.11580-cvtres.write.1.tlog

     文件          2  2018-03-22 10:22  训练模型\训练模型\Debug\link.11580.read.1.tlog

     文件          2  2018-03-22 10:22  训练模型\训练模型\Debug\link.11580.write.1.tlog

     文件       3198  2018-03-22 10:22  训练模型\训练模型\Debug\link.command.1.tlog

     文件       9984  2018-03-22 10:22  训练模型\训练模型\Debug\link.read.1.tlog

     文件        858  2018-03-22 10:22  训练模型\训练模型\Debug\link.write.1.tlog

     文件     424217  2018-03-22 10:22  训练模型\训练模型\Debug\mian.obj

     文件        390  2018-03-22 10:22  训练模型\训练模型\Debug\mt.command.1.tlog

     文件        450  2018-03-22 10:22  训练模型\训练模型\Debug\mt.read.1.tlog

     文件        346  2018-03-22 10:22  训练模型\训练模型\Debug\mt.write.1.tlog

     文件        542  2018-03-22 10:22  训练模型\训练模型\Debug\rc.command.1.tlog

     文件        422  2018-03-22 10:22  训练模型\训练模型\Debug\rc.read.1.tlog

     文件        326  2018-03-22 10:22  训练模型\训练模型\Debug\rc.write.1.tlog

     文件     478208  2018-03-22 10:22  训练模型\训练模型\Debug\vc100.idb

     文件     978944  2018-03-22 10:22  训练模型\训练模型\Debug\vc100.pdb

     文件       2604  2018-03-22 10:21  训练模型\训练模型\Debug\训练模型.Build.CppClean.log

     文件        406  2018-03-22 10:22  训练模型\训练模型\Debug\训练模型.exe.embed.manifest

     文件        472  2018-03-22 10:22  训练模型\训练模型\Debug\训练模型.exe.embed.manifest.res

     文件        381  2018-03-22 10:22  训练模型\训练模型\Debug\训练模型.exe.intermediate.manifest

............此处省略465个文件信息

评论

共有 条评论