Changeset 111 for foam/trunk/faceident


Ignore:
Timestamp:
08/06/2009 11:30:26 AM (11 years ago)
Author:
dave
Message:

benchmarking in faceident

Location:
foam/trunk/faceident
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • foam/trunk/faceident/Makefile

    r94 r111  
    1111 
    1212# for the minute, go out and up to link to the vision lib 
    13 CCFLAGS = `pkg-config --cflags opencv` -ggdb -Wall -O3 -ffast-math -Wno-unused -DTIXML_USE_STL  
    14 LDFLAGS =  
    15 LIBS    = `pkg-config --libs opencv` -lYARP_dev -lYARP_sig -lYARP_OS -lACE  
     13CCFLAGS = -I../vision/src `pkg-config --cflags opencv` -ggdb -Wall -O3 -ffast-math -Wno-unused -DTIXML_USE_STL  
     14LDFLAGS = -L../vision/ 
     15LIBS    = `pkg-config --libs opencv` -lYARP_dev -lYARP_sig -lYARP_OS -lACE -lvision  
    1616 
    1717CC = g++ 
  • foam/trunk/faceident/src/main.cpp

    r91 r111  
    3434#include "ImageUtils.h" 
    3535#include "SceneState.h" 
     36#include "Image.h" 
     37#include "FileTools.h" 
    3638 
    3739using namespace std; 
     
    7981int framenum=0; 
    8082 
     83map<int,string> m_DebugNames; 
     84 
    8185BufferedPort<Bottle> ctrlport;    
     86 
     87void Benchmark(const string &test); 
    8288 
    8389////////////////////////////////////////////////////////// 
     
    165171        if( capture ) 
    166172        { 
     173            Benchmark("yale"); 
     174 
     175         
     176         
    167177                for(;;) 
    168178                { 
     
    225235} 
    226236 
    227 void detect_and_draw( IplImage* img ) 
     237static CvScalar colors[] =  
    228238{ 
    229         static CvScalar colors[] =  
    230         { 
    231239                {{0,0,255}}, 
    232240                {{0,128,255}}, 
     
    237245                {{255,0,0}}, 
    238246                {{255,0,255}} 
    239         }; 
    240  
    241         IplImage *small_img; 
    242         int j; 
    243  
    244         small_img = cvCreateImage( cvSize( cvRound (img->width/scale), 
    245                 cvRound (img->height/scale)), 8, 3 ); 
    246         CvSize imgsize = cvGetSize(small_img); 
    247         cvResize( img, small_img, CV_INTER_LINEAR ); 
    248         cvClearMemStorage( storage ); 
     247}; 
     248 
     249 
     250 
     251void Update( Image &img ) 
     252{ 
     253 
     254        CvSize imgsize = cvGetSize(img.m_Image); 
    249255 
    250256        CvFont font; 
     
    257263        cvInitFont( &helpfont, CV_FONT_HERSHEY_PLAIN, 0.5, 0.5, 0, 1, CV_AA ); 
    258264 
     265        CvFont largefont; 
     266        cvInitFont( &largefont, CV_FONT_HERSHEY_PLAIN, 25, 25, 0, 10, CV_AA ); 
     267 
    259268        if( cascade ) 
    260269        { 
    261270                double t = (double)cvGetTickCount(); 
    262                 CvSeq* faces = cvHaarDetectObjects( small_img, cascade, storage, 
     271                CvSeq* faces = cvHaarDetectObjects( img.m_Image, cascade, storage, 
    263272                        1.1, 2, 0 
    264273                        //|CV_HAAR_FIND_BIGGEST_OBJECT 
     
    362371                                float confidence=0; 
    363372                                // get the face area as a sub image 
    364                                 IplImage *face = SubImage(small_img, *r); 
     373                                IplImage *face = SubImage(img.m_Image, *r); 
    365374                                // pass it into the face bank  
    366375                                if (learn) 
     
    381390                                { 
    382391                                        char s[32]; 
    383                                         sprintf(s,"%d %0.2f",ID,confidence); 
    384                                         cvPutText(small_img, s, cvPoint(r->x,r->y+r->height-5), &font, color); 
     392                                        sprintf(s,"%d",ID); 
     393                                        cvPutText(img.m_Image, s, cvPoint(r->x,r->y+r->height-5), &largefont, color); 
    385394                                        int x=(facebank.GetFaceWidth()+8)*ID; 
    386395                                        int y=imgsize.height-facebank.GetFaceHeight(); 
     
    388397                                        y-=5*imagenum; 
    389398                                         
    390                                         cvLine(small_img, cvPoint(r->x+r->width/2,r->y+r->height/2), 
     399                                        cvLine(img.m_Image, cvPoint(r->x+r->width/2,r->y+r->height/2), 
    391400                                                cvPoint(x+facebank.GetFaceWidth()/2,y+facebank.GetFaceHeight()/2), color); 
    392401 
    393                                         cvRectangle(small_img,cvPoint(x-1,y-1),cvPoint(x+facebank.GetFaceWidth(),y+facebank.GetFaceHeight()), color); 
     402                                        cvRectangle(img.m_Image,cvPoint(x-1,y-1),cvPoint(x+facebank.GetFaceWidth(),y+facebank.GetFaceHeight()), color); 
    394403 
    395404                                        if (imagenum>=0) 
    396405                                        { 
    397                                                 BlitImageAlpha(facebank.GetFaceMap()[ID]->m_ImageVec[imagenum],small_img,cvPoint(r->x,r->y),0.75); 
     406                                                BlitImageAlpha(facebank.GetFaceMap()[ID]->m_ImageVec[imagenum],img.m_Image,cvPoint(r->x,r->y),0.75); 
    398407                                        } 
    399408 
     
    404413                                } 
    405414 
    406                                 cvRectangle(small_img, cvPoint(r->x,r->y), cvPoint(r->x+r->width,r->y+r->height), color); 
     415                                cvRectangle(img.m_Image, cvPoint(r->x,r->y), cvPoint(r->x+r->width,r->y+r->height), color); 
    407416                        } 
    408417                } 
     
    429438                snprintf(info,256,"detecting faces"); 
    430439        } 
    431         cvPutText(small_img, info, cvPoint(20,30), &infofont, CV_RGB(0,0,0)); 
     440        cvPutText(img.m_Image, info, cvPoint(20,30), &infofont, CV_RGB(0,0,0)); 
    432441 
    433442        snprintf(info,256,"keys:"); 
    434         cvPutText(small_img, info, cvPoint(20,50), &helpfont, CV_RGB(0,0,0)); 
     443        cvPutText(img.m_Image, info, cvPoint(20,50), &helpfont, CV_RGB(0,0,0)); 
    435444        snprintf(info,256,"number key 0-9 : learn face"); 
    436         cvPutText(small_img, info, cvPoint(20,60), &helpfont, CV_RGB(0,0,0)); 
     445        cvPutText(img.m_Image, info, cvPoint(20,60), &helpfont, CV_RGB(0,0,0)); 
    437446        snprintf(info,256,"'d' : face detect mode"); 
    438         cvPutText(small_img, info, cvPoint(20,70), &helpfont, CV_RGB(0,0,0)); 
     447        cvPutText(img.m_Image, info, cvPoint(20,70), &helpfont, CV_RGB(0,0,0)); 
    439448        snprintf(info,256,"'c' : clear all faces"); 
    440         cvPutText(small_img, info, cvPoint(20,80), &helpfont, CV_RGB(0,0,0)); 
     449        cvPutText(img.m_Image, info, cvPoint(20,80), &helpfont, CV_RGB(0,0,0)); 
    441450 
    442451#ifdef SHOW_FACES 
     
    450459                { 
    451460                        //BlitImage(*im,small_img,cvPoint(x,y)); 
    452                         BlitImage(*im,small_img,cvPoint(x,y)); 
     461                        BlitImage(*im,img.m_Image,cvPoint(x,y)); 
    453462                        //y-=facebank.GetFaceHeight()+2; 
    454463                        y-=5; 
     
    456465        } 
    457466#endif 
    458  
    459  
    460         cvShowImage( "result", small_img ); 
     467} 
     468 
     469void detect_and_draw( IplImage* img ) 
     470{ 
     471        IplImage *small_img; 
     472        int j; 
     473 
     474        small_img = cvCreateImage( cvSize( cvRound (img->width/scale), 
     475                cvRound (img->height/scale)), 8, 3 ); 
     476        CvSize imgsize = cvGetSize(small_img); 
     477        cvResize( img, small_img, CV_INTER_LINEAR ); 
     478        cvClearMemStorage( storage ); 
     479         
     480        Image img2(small_img); 
     481        Update(img2); 
     482 
     483        cvShowImage( "result", img2.m_Image ); 
    461484        framenum++; 
    462485#ifdef SAVE_FRAMES 
     
    464487        sprintf(name,"out-%0.4d.jpg",framenum); 
    465488        cerr<<"saving "<<name<<endl; 
    466         cvSaveImage(name,small_img); 
     489        cvSaveImage(name,img2.m_Image); 
    467490#endif 
    468491 
    469492        cvReleaseImage( &small_img ); 
    470493} 
     494 
     495 
     496void Benchmark(const string &test) 
     497{ 
     498        cerr<<"Running benchmark test"<<endl; 
     499        string path(string("../data/benchmark/")+test); 
     500        vector<string> people=Glob(path+string("/training/*")); 
     501        int ID=0; 
     502        learn=true; 
     503         
     504        for(vector<string>::iterator pi=people.begin(); pi!=people.end(); ++pi) 
     505        { 
     506                m_DebugNames[ID]=pi->substr(pi->find_last_of("/")+1,pi->length()); 
     507                vector<string> images=Glob(*pi+"/*.jpg"); 
     508                cerr<<*pi<<endl; 
     509                for(vector<string>::iterator ii=images.begin(); ii!=images.end(); ++ii) 
     510                { 
     511                        cerr<<ID<<" "<<*ii<<endl; 
     512                        facenum=ID; 
     513                        Image image(*ii); 
     514                        Update(image); 
     515                        string fn=*ii+"-out.png"; 
     516                        cvSaveImage(fn.c_str(),image.m_Image); 
     517                } 
     518                ID++; 
     519        } 
     520         
     521        learn=false; 
     522         
     523        /*vector<string> images=Glob(path+string("/control/*.jpg")); 
     524        for(vector<string>::iterator ti=images.begin(); ti!=images.end(); ++ti) 
     525        {        
     526                cerr<<*ti<<endl; 
     527                Image test(*ti);         
     528                Update(test); 
     529                string fn=*ti+"-out.png"; 
     530                cvSaveImage(fn.c_str(),test.m_Image); 
     531        }*/ 
     532 
     533        int imgw=1024; 
     534        int imgh=768; 
     535        Image out(imgw,imgh,8,3); 
     536        int across=13; 
     537        int down=13; 
     538        int w=imgw/across; 
     539        int h=imgh/down; 
     540 
     541        int i=0; 
     542        vector<string> images=Glob(path+string("/test/*.jpg")); 
     543        for(vector<string>::iterator ti=images.begin(); ti!=images.end(); ++ti) 
     544        {        
     545                cerr<<*ti<<endl; 
     546                Image test(*ti);         
     547                Update(test); 
     548                int x=i%across; 
     549                int y=i/across; 
     550                out.Blit(test.Scale(w,h),x*w,y*h); 
     551                cerr<<x*w<<" "<<y*h<<endl; 
     552                i++; 
     553        } 
     554         
     555        char fn[256]; 
     556        snprintf(fn,256,"%s/out.jpg",path.c_str()); 
     557        cvSaveImage(fn,out.m_Image); 
     558} 
Note: See TracChangeset for help on using the changeset viewer.