Changeset 62


Ignore:
Timestamp:
04/15/2009 05:27:42 PM (11 years ago)
Author:
dave
Message:

added idle mode

Location:
foam/trunk/simple-faceident
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • foam/trunk/simple-faceident/README

    r59 r62  
    2424Input port      Bottle contents                 Meaning 
    2525/faceident-ctrl "train" ID                      Train for this user 
    26 /faceident-ctrl "detect"                        Switch out of training mode 
     26/faceident-ctrl "detect"                        Switch to detection mode 
    2727/faceident-ctrl "save" sessionname              Save the detected faces  
    2828/faceident-ctrl "load" sessionname              Load previously detected faces  
    2929/faceident-ctrl "clear"                         Clears all faces 
     30/faceident-ctrl "idle"                          Switch to idle mode, mostly frees up cpu 
    3031 
    3132Faces are saved in png format along with a text file to map them to id numbers. The sessionname  
  • foam/trunk/simple-faceident/src/main.cpp

    r59 r62  
    3030#include <time.h> 
    3131#include <ctype.h> 
     32#include <unistd.h> 
    3233 
    3334#include "FaceBank.h" 
     
    6768 
    6869// globals 
    69 bool learn=true; 
     70bool learn=false; 
     71bool idle=false; 
    7072int facenum=0; 
    7173int framenum=0; 
     
    301303                                facenum=b->get(1).asInt(); 
    302304                                learn=true; 
     305                                idle=false; 
     306                        } 
     307                        if (b->get(0).asString()=="idle") 
     308                        { 
     309                                facenum=b->get(1).asInt(); 
     310                                idle=true; 
    303311                        } 
    304312                        else if (b->get(0).asString()=="clear") 
     
    309317                        { 
    310318                                learn=false; 
     319                                idle=false; 
    311320                        } 
    312321                        else if (b->get(0).asString()=="load") 
     
    322331                /////////////////////////////////// 
    323332 
    324         for(int i = 0; i < (faces ? faces->total : 0); i++ ) 
    325         { 
    326             CvRect* r = (CvRect*)cvGetSeqElem( faces, i ); 
    327             CvMat small_img_roi; 
    328                          
    329                         unsigned int ID=999; 
    330                         float confidence=0; 
    331                         // get the face area as a sub image 
    332                         IplImage *face = SubImage(small_img, *r); 
    333                         // pass it into the face bank  
    334                         if (learn) 
    335                         { 
    336                                 confidence=facebank.Suggest(face,facenum); 
    337                                 ID=facenum; 
    338                         } 
    339                         else 
    340                         {        
    341                                 confidence=facebank.Identify(face,ID); 
    342                         } 
    343                          
    344                         cvReleaseImage(&face); 
    345                         CvScalar color = colors[ID%8]; 
    346  
    347                         // if it's recognised the face (should really check the confidence) 
    348                         if (ID!=999) 
    349                         { 
    350                                 char s[32]; 
    351                                 sprintf(s,"%d %0.2f",ID,confidence); 
    352                                 cvPutText(small_img, s, cvPoint(r->x,r->y+25), &font, color); 
    353                                 int x=(facebank.GetFaceWidth()+1)*ID; 
    354                                 int y=imgsize.height-facebank.GetFaceHeight(); 
    355                                 cvLine(small_img, cvPoint(r->x+r->width/2,r->y+r->height/2), 
    356                                         cvPoint(x+facebank.GetFaceWidth()/2,y), color);                  
    357  
    358                                 if (!learn) 
     333                if (!idle) 
     334                { 
     335                for(int i = 0; i < (faces ? faces->total : 0); i++ ) 
     336                { 
     337                CvRect* r = (CvRect*)cvGetSeqElem( faces, i ); 
     338                CvMat small_img_roi; 
     339 
     340                                unsigned int ID=999; 
     341                                float confidence=0; 
     342                                // get the face area as a sub image 
     343                                IplImage *face = SubImage(small_img, *r); 
     344                                // pass it into the face bank  
     345                                if (learn) 
    359346                                { 
    360                                         scenestate.AddPresent(ID, SceneState::User(confidence)); 
     347                                        confidence=facebank.Suggest(face,facenum); 
     348                                        ID=facenum; 
    361349                                } 
    362                         } 
    363  
    364                         cvRectangle(small_img, cvPoint(r->x,r->y), cvPoint(r->x+r->width,r->y+r->height), color); 
    365         } 
     350                                else 
     351                                {        
     352                                        confidence=facebank.Identify(face,ID); 
     353                                } 
     354 
     355                                cvReleaseImage(&face); 
     356                                CvScalar color = colors[ID%8]; 
     357 
     358                                // if it's recognised the face (should really check the confidence) 
     359                                if (ID!=999) 
     360                                { 
     361                                        char s[32]; 
     362                                        sprintf(s,"%d %0.2f",ID,confidence); 
     363                                        cvPutText(small_img, s, cvPoint(r->x,r->y+25), &font, color); 
     364                                        int x=(facebank.GetFaceWidth()+1)*ID; 
     365                                        int y=imgsize.height-facebank.GetFaceHeight(); 
     366                                        cvLine(small_img, cvPoint(r->x+r->width/2,r->y+r->height/2), 
     367                                                cvPoint(x+facebank.GetFaceWidth()/2,y), color);                  
     368 
     369                                        if (!learn) 
     370                                        { 
     371                                                scenestate.AddPresent(ID, SceneState::User(confidence)); 
     372                                        } 
     373                                } 
     374 
     375                                cvRectangle(small_img, cvPoint(r->x,r->y), cvPoint(r->x+r->width,r->y+r->height), color); 
     376                } 
     377                } 
     378                else 
     379                { 
     380                        // idling, so free up some cpu 
     381                        usleep(200000); 
     382                } 
    366383    } 
    367384 
Note: See TracChangeset for help on using the changeset viewer.