Straight to business - Click here to download the cascade( haarcascade_eye.xml)  



I wanted to create a software eye-tracker for my research that is both robust and doesn't cost right arm and left testicle. So I set my sights on OpenCV and have been playing around with it for two weeks. I realized from day one that I will have to develop a cascade for detecting eyes - so I set about "harvesting" images from the web. Some of them are from freely available databases.


Some of them had the eye positions already marked so it was easier to extract. But for most of them - I had to manually select the eye area. I also "extracted" images from Google TM Images ( ) - I wrote a simple vc++ program (an ugly hack really) to grab images from the web or clipboard and then extract eye areas based on mouse selection. I used these images (20x20) to train a classifier -  haarcascade_eye.xml . The training is based on the OpenCV methods "createsamples" and "haartraining". My experience with it so far is very encouraging - i grab frames from an webcam and use that image to find face and eyes. The code is very simple -

Main code

IplImage *frame=cvQueryFrame(capture);

if (frame)







if (img)

if( cascade_face ) or eye


      IplImage* gray = cvCreateImage( cvSize(img->width,img->height), 8, 1 );

      cvCvtColor( img, gray, CV_BGR2GRAY );

      cvFlip( gray, gray, 0 );

      double scale = 1.3;

      IplImage* small_img = cvCreateImage( cvSize( cvRound (img->width/scale),cvRound (img->height/scale)),8, 1 );

      cvResize( gray, small_img, CV_INTER_LINEAR );

      cvEqualizeHist( small_img, small_img );

      cvClearMemStorage( storage );

      CvSeq* faces or eyes= cvHaarDetectObjects( small_img, cascade_face or eye, storage, 1.1, 2, 0, cvSize(30, 30) );

      if (faces or eyes)


            for( int i = 0; i < (faces or eyes ? faces or eyes->total : 0); i++ )


                  CvRect *r = (CvRect*)cvGetSeqElem( faces or eyes, i );

                  cvRectangle( cpy, cvPoint(...), cvPoint(..), CV_RGB(255,0,0), 1, 8, 0 );







Back to my Home Page