Ignore:
Timestamp:
07/29/2009 03:49:34 PM (10 years ago)
Author:
dave
Message:

Benchmark testing added for the eigen face recognition

File:
1 edited

Legend:

Unmodified
Added
Removed
  • foam/trunk/faceclassifier/src/App.cpp

    r95 r96  
    1818#include "App.h" 
    1919#include "PCAClassifier.h" 
     20#include "FileTools.h" 
    2021 
    2122//#define SAVE_FRAMES 
    2223 
    2324using namespace std; 
     25 
     26//int w=50; 
     27//int h=80; 
    2428 
    2529int w=20; 
     
    5963        pca.Load(f); 
    6064        fclose(f); 
    61         pca.Compress(3,30); 
     65        pca.Compress(20,300); 
    6266         
    6367        m_Classifier = new PCAClassifier(pca); 
    64         m_FaceBank = new FaceBank(w,h,0.2,0.1,m_Classifier); 
     68        m_FaceBank = new FaceBank(w,h,0.4,0.1,m_Classifier); 
    6569        cvInitFont( &m_Font, CV_FONT_HERSHEY_PLAIN, 0.5, 0.5, 0, 1, CV_AA ); 
    6670     
    6771        cvNamedWindow( "face classifier", 1 ); 
     72         
     73        Benchmark(); 
    6874} 
    6975 
     
    7581    { 
    7682        {{255,255,255}}, 
     83        {{0,0,0}}, 
    7784        {{0,128,255}}, 
    7885        {{0,255,255}}, 
     
    8491    }; 
    8592 
    86 void App::Update() 
    87 {        
     93void App::Run() 
     94{ 
    8895        frame = cvQueryFrame( m_Capture ); 
    8996    if( !frame )  
     
    93100        } 
    94101         
    95     if( !frame_copy ) 
     102        if( !frame_copy ) 
    96103        frame_copy = cvCreateImage( cvSize(frame->width,frame->height), 
    97104                                    IPL_DEPTH_8U, frame->nChannels ); 
     
    101108        cvFlip( frame, frame_copy, 0 ); 
    102109         
    103         ///////////////////////// 
    104          
    105110        Image camera(frame_copy); 
    106          
     111        Update(camera); 
     112         
     113        m_FrameNum++; 
     114#ifdef SAVE_FRAMES 
     115        char name[256]; 
     116        sprintf(name,"out-%0.4d.jpg",m_FrameNum); 
     117        cerr<<"saving "<<name<<endl; 
     118        cvSaveImage(name,camera.m_Image); 
     119#endif 
     120 
     121        cvShowImage("face classifier", camera.m_Image); 
     122} 
     123 
     124void App::Update(Image &camera) 
     125{        
    107126        cvClearMemStorage(m_Storage); 
    108127 
     128        int flags=0; 
     129        if (m_Learn) flags|=CV_HAAR_FIND_BIGGEST_OBJECT; 
     130 
    109131        CvSeq* faces = cvHaarDetectObjects( camera.m_Image, m_Cascade, m_Storage, 
    110                         1.1, 2, 0 
     132                        1.1, 2, flags 
    111133                        //|CV_HAAR_FIND_BIGGEST_OBJECT 
    112134                        //|CV_HAAR_DO_ROUGH_SEARCH 
     
    166188                { 
    167189                        char s[32]; 
    168                         sprintf(s,"%d %0.2f",ID,confidence); 
     190                        map<int,string>::iterator d = m_DebugNames.find(ID); 
     191                        if (d!=m_DebugNames.end()) 
     192                        { 
     193                                sprintf(s,"%s %0.2f",d->second.c_str(),confidence); 
     194                        } 
     195                        else 
     196                        { 
     197                                sprintf(s,"%d %0.2f",ID,confidence); 
     198                        } 
     199                         
    169200                        cvPutText(camera.m_Image, s, cvPoint(r->x,r->y+r->height-5), &m_Font, colors[0]); 
    170201 
     
    200231 
    201232        m_SceneState.Update(); 
    202          
    203     m_FrameNum++; 
    204 #ifdef SAVE_FRAMES 
    205         char name[256]; 
    206         sprintf(name,"out-%0.4d.jpg",m_FrameNum); 
    207         cerr<<"saving "<<name<<endl; 
    208         cvSaveImage(name,camera.m_Image); 
    209 #endif 
    210  
    211         cvShowImage("face classifier", camera.m_Image); 
    212  
    213 } 
    214  
     233 
     234} 
     235 
     236void App::Benchmark() 
     237{ 
     238        cerr<<"Running benchmark test"<<endl; 
     239        vector<string> people=Glob("../data/benchmark/trek/training/*"); 
     240        int ID=0; 
     241        m_Learn=true; 
     242         
     243        for(vector<string>::iterator pi=people.begin(); pi!=people.end(); ++pi) 
     244        { 
     245                m_DebugNames[ID]=pi->substr(pi->find_last_of("/")+1,pi->length()); 
     246                vector<string> images=Glob(*pi+"/*.jpg"); 
     247                for(vector<string>::iterator ii=images.begin(); ii!=images.end(); ++ii) 
     248                { 
     249                        cerr<<ID<<" "<<*ii<<endl; 
     250                        m_FaceNum=ID; 
     251                        Image image(*ii); 
     252                        Update(image); 
     253                        string fn=*ii+"-out.png"; 
     254                        cvSaveImage(fn.c_str(),image.m_Image); 
     255                } 
     256                ID++; 
     257        } 
     258         
     259        m_Learn=false; 
     260         
     261        vector<string> images=Glob("../data/benchmark/trek/control/*.jpg"); 
     262        for(vector<string>::iterator ti=images.begin(); ti!=images.end(); ++ti) 
     263        {        
     264                cerr<<*ti<<endl; 
     265                Image test(*ti);         
     266                Update(test); 
     267                string fn=*ti+"-out.png"; 
     268                cvSaveImage(fn.c_str(),test.m_Image); 
     269        } 
     270 
     271        images=Glob("../data/benchmark/trek/test/*.jpg"); 
     272        for(vector<string>::iterator ti=images.begin(); ti!=images.end(); ++ti) 
     273        {        
     274                cerr<<*ti<<endl; 
     275                Image test(*ti);         
     276                Update(test); 
     277                string fn=*ti+"-out.png"; 
     278                cvSaveImage(fn.c_str(),test.m_Image); 
     279        } 
     280} 
Note: See TracChangeset for help on using the changeset viewer.