Saturday, December 25, 2010

Viola and Jones Face identification

Check your Opencv2.2/data/haarcascades folder for a list of XML files you can use to identify human faces, bodies, nose, mouth, eyes and so on... just replace the xml file in the code with your desired data.

NOTE: when you run this file in VisualStudio 2010, it will output an error. make sure you run the EXE file from the command prompt and place that XML file in the same directory as the EXE


#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <string.h>
#include<opencv2\opencv.hpp>
#include <opencv2\highgui\highgui.hpp>

CvHaarClassifierCascade *cascade;
CvMemStorage *storage;

void detectFaces( IplImage *img );
int main( int argc, char** argv )

{
CvCapture *capture;
IplImage *frame;
int key =0;

cascade = ( CvHaarClassifierCascade* )cvLoad("haarcascade_mcs_nose.xml", 0, 0, 0 );
storage = cvCreateMemStorage( 0 );
capture = cvCaptureFromCAM( 0 );

assert( cascade && storage && capture );

cvNamedWindow( "video", 1 );
while( key != 'q' ) {
frame = cvQueryFrame( capture );

if( !frame ) {
printf( "Cannot query frame!\n" );
break;
}

frame->origin = 0;
detectFaces( frame );

key = cvWaitKey( 10 );
}
cvReleaseCapture( &capture );
cvDestroyWindow( "video" );
cvReleaseHaarClassifierCascade( &cascade );
cvReleaseMemStorage( &storage );
return 0;
}



void detectFaces( IplImage *img )
{
int i;
CvSeq *faces = cvHaarDetectObjects(
img,
cascade,
storage,
1.1,
3,
0,
cvSize( 40, 40 ) );

for( i = 0 ; i < ( faces ? faces->total : 0 ) ; i++ ) {
CvRect *r = ( CvRect* )cvGetSeqElem( faces, i );
cvRectangle( img,
cvPoint( r->x, r->y ),
cvPoint( r->x + r->width, r->y + r->height ),
CV_RGB( 255, 0, 0 ), 1, 8, 0 );
}
cvShowImage( "video", img );
}





---------------------------------------

//try on an image
int main( int argc, char** argv )
{
CvCapture *capture;
IplImage *img;
int key;
cascade = (CvHaarClassifierCascade*)cvLoad( "haarcascade_frontalface_alt.xml", 0, 0, 0 );
storage = cvCreateMemStorage( 0 );
img = cvLoadImage( "aresh.jpg", 1 );
assert( cascade && storage && img );
cvNamedWindow( "video", 1 );
detectFaces( img );
cvWaitKey( 0 );
cvDestroyWindow( "video" );
cvReleaseImage( &img );
cvReleaseHaarClassifierCascade( &cascade );
cvReleaseMemStorage( &storage );
return 0;
}

No comments:

Post a Comment