Eye Detection Using Open CV(Should be run on a system with Open CV library)

Dependencies:   mbed

Committer:
pramodnataraja
Date:
Wed Dec 14 04:51:31 2011 +0000
Revision:
0:728af114b613
Version 1.0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pramodnataraja 0:728af114b613 1 /* This code should be compiled on a system with Open CV library installed and run from Visual Studio if running from Windows platform*/
pramodnataraja 0:728af114b613 2
pramodnataraja 0:728af114b613 3 #include "stdafx.h"
pramodnataraja 0:728af114b613 4 #include "cv.h"
pramodnataraja 0:728af114b613 5 #include "highgui.h"
pramodnataraja 0:728af114b613 6
pramodnataraja 0:728af114b613 7 #include <iostream>
pramodnataraja 0:728af114b613 8 #include <conio.h>
pramodnataraja 0:728af114b613 9 #include <string.h>
pramodnataraja 0:728af114b613 10 #include <time.h>
pramodnataraja 0:728af114b613 11 #include <stdio.h>
pramodnataraja 0:728af114b613 12 #include <windows.h>
pramodnataraja 0:728af114b613 13
pramodnataraja 0:728af114b613 14
pramodnataraja 0:728af114b613 15 using namespace std;
pramodnataraja 0:728af114b613 16 using namespace cv;
pramodnataraja 0:728af114b613 17
pramodnataraja 0:728af114b613 18 #define SCALE 1
pramodnataraja 0:728af114b613 19
pramodnataraja 0:728af114b613 20 #define SCALING_FACTOR_FACE 1.1
pramodnataraja 0:728af114b613 21 #define MIN_SIZE_FACE 30
pramodnataraja 0:728af114b613 22 #define FLAGS_FACE CV_HAAR_FIND_BIGGEST_OBJECT
pramodnataraja 0:728af114b613 23 #define COLOR_FACE CV_RGB(255, 0, 0)
pramodnataraja 0:728af114b613 24 #define FEATURE_FACE "C:/OpenCV2.0/data/haarcascades/haarcascade_frontalface_alt.xml" //You need to put the correct path to your templates
pramodnataraja 0:728af114b613 25
pramodnataraja 0:728af114b613 26 #define EYE
pramodnataraja 0:728af114b613 27 #define SCALING_FACTOR_EYE 1.1
pramodnataraja 0:728af114b613 28 #define MIN_SIZE_EYE 20
pramodnataraja 0:728af114b613 29 #define FLAGS_EYE CV_HAAR_FIND_BIGGEST_OBJECT | CV_HAAR_DO_ROUGH_SEARCH | CV_HAAR_SCALE_IMAGE | CV_HAAR_DO_CANNY_PRUNING
pramodnataraja 0:728af114b613 30 #define COLOR_EYE CV_RGB(0, 255, 0)
pramodnataraja 0:728af114b613 31 #define FEATURE_EYE "C:/OpenCV2.0/data/haarcascades/haarcascade_mcs_eyepair_small.xml"
pramodnataraja 0:728af114b613 32
pramodnataraja 0:728af114b613 33 //#define NOSE
pramodnataraja 0:728af114b613 34 #define SCALING_FACTOR_NOSE 1.1
pramodnataraja 0:728af114b613 35 #define MIN_SIZE_NOSE 20
pramodnataraja 0:728af114b613 36 #define FLAGS_NOSE CV_HAAR_DO_CANNY_PRUNING
pramodnataraja 0:728af114b613 37 #define COLOR_NOSE CV_RGB(0, 0, 255)
pramodnataraja 0:728af114b613 38 #define FEATURE_NOSE "C:/OpenCV2.0/data/haarcascades/haarcascade_mcs_nose.xml"
pramodnataraja 0:728af114b613 39
pramodnataraja 0:728af114b613 40 #define THRESHOLD_X 10
pramodnataraja 0:728af114b613 41 #define THRESHOLD_Y 13
pramodnataraja 0:728af114b613 42
pramodnataraja 0:728af114b613 43 #define DISCARD_VALUE 10
pramodnataraja 0:728af114b613 44
pramodnataraja 0:728af114b613 45 #define strlen(cBufferOut) 1
pramodnataraja 0:728af114b613 46
pramodnataraja 0:728af114b613 47 int detect_faces(Mat& img);
pramodnataraja 0:728af114b613 48
pramodnataraja 0:728af114b613 49 CascadeClassifier cascade;
pramodnataraja 0:728af114b613 50 CascadeClassifier cascade_eye;
pramodnataraja 0:728af114b613 51 CascadeClassifier cascade_nose;
pramodnataraja 0:728af114b613 52 CvMemStorage* storage = (CvMemStorage*)NULL;
pramodnataraja 0:728af114b613 53
pramodnataraja 0:728af114b613 54 int disp_x = 0;
pramodnataraja 0:728af114b613 55 int disp_y = 0;
pramodnataraja 0:728af114b613 56 int prev_disp_x = 0;
pramodnataraja 0:728af114b613 57 int prev_disp_y = 0;
pramodnataraja 0:728af114b613 58 int prev_pos_x = 0;
pramodnataraja 0:728af114b613 59 int prev_pos_y = 0;
pramodnataraja 0:728af114b613 60 int cur_pos_x = 0;
pramodnataraja 0:728af114b613 61 int cur_pos_y = 0;
pramodnataraja 0:728af114b613 62
pramodnataraja 0:728af114b613 63 HANDLE hSerial;
pramodnataraja 0:728af114b613 64 DCB dcb;
pramodnataraja 0:728af114b613 65
pramodnataraja 0:728af114b613 66 // A Simple Camera Capture Framework
pramodnataraja 0:728af114b613 67 int main()
pramodnataraja 0:728af114b613 68 {
pramodnataraja 0:728af114b613 69 /******************************************************* SETUP SERIAL COM PORT *********************************************/
pramodnataraja 0:728af114b613 70 DWORD cBytesOut, cBytesIn;
pramodnataraja 0:728af114b613 71 DWORD dwMask;
pramodnataraja 0:728af114b613 72
pramodnataraja 0:728af114b613 73 char* cBufferOut;
pramodnataraja 0:728af114b613 74 char front = '1';//"front";
pramodnataraja 0:728af114b613 75 char back = '2';//"back";
pramodnataraja 0:728af114b613 76 char left = '3';//"left";
pramodnataraja 0:728af114b613 77 char right = '4';//"right";
pramodnataraja 0:728af114b613 78 char half_front_right = '5';//"half_front_right";
pramodnataraja 0:728af114b613 79 char half_front_left = '6';//"half_front_left";
pramodnataraja 0:728af114b613 80 char half_back_right = '7';//"half_back_right";
pramodnataraja 0:728af114b613 81 char half_back_left = '8';//"half_back_left";
pramodnataraja 0:728af114b613 82 char onOff = '0';//"onOff";
pramodnataraja 0:728af114b613 83
pramodnataraja 0:728af114b613 84 int valid = 0;
pramodnataraja 0:728af114b613 85 int discard = 0;
pramodnataraja 0:728af114b613 86 int firstValue = 1;
pramodnataraja 0:728af114b613 87
pramodnataraja 0:728af114b613 88 hSerial = CreateFile(_T("COM2"), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
pramodnataraja 0:728af114b613 89
pramodnataraja 0:728af114b613 90 if(hSerial == INVALID_HANDLE_VALUE)
pramodnataraja 0:728af114b613 91 {
pramodnataraja 0:728af114b613 92 printf("Failure\n");
pramodnataraja 0:728af114b613 93 printf("%d\n",hSerial);
pramodnataraja 0:728af114b613 94 printf("%d\n",GetLastError());
pramodnataraja 0:728af114b613 95 }
pramodnataraja 0:728af114b613 96
pramodnataraja 0:728af114b613 97 GetCommState(hSerial, &dcb);
pramodnataraja 0:728af114b613 98 dcb.BaudRate = 9600;
pramodnataraja 0:728af114b613 99 dcb.ByteSize = 8;
pramodnataraja 0:728af114b613 100 dcb.Parity = NOPARITY;
pramodnataraja 0:728af114b613 101 dcb.StopBits = ONESTOPBIT;
pramodnataraja 0:728af114b613 102 SetCommState(hSerial, &dcb);
pramodnataraja 0:728af114b613 103 /*************************************************************************************************************/
pramodnataraja 0:728af114b613 104
pramodnataraja 0:728af114b613 105 double t;
pramodnataraja 0:728af114b613 106
pramodnataraja 0:728af114b613 107 CvCapture* capture = cvCaptureFromCAM( CV_CAP_ANY );
pramodnataraja 0:728af114b613 108
pramodnataraja 0:728af114b613 109 if ( !capture )
pramodnataraja 0:728af114b613 110 {
pramodnataraja 0:728af114b613 111 fprintf( stderr, "ERROR: capture is NULL \n" );
pramodnataraja 0:728af114b613 112 getchar();
pramodnataraja 0:728af114b613 113 return -1;
pramodnataraja 0:728af114b613 114 }
pramodnataraja 0:728af114b613 115
pramodnataraja 0:728af114b613 116 // Create a window in which the captured images will be presented
pramodnataraja 0:728af114b613 117 cvNamedWindow( "mywindow", CV_WINDOW_AUTOSIZE );
pramodnataraja 0:728af114b613 118
pramodnataraja 0:728af114b613 119 // Show the image captured from the camera in the window and repeat
pramodnataraja 0:728af114b613 120 while ( 1 )
pramodnataraja 0:728af114b613 121 {
pramodnataraja 0:728af114b613 122 // Get one frame
pramodnataraja 0:728af114b613 123 IplImage* iplImg = cvQueryFrame( capture );
pramodnataraja 0:728af114b613 124 Mat frame, frameCopy;
pramodnataraja 0:728af114b613 125
pramodnataraja 0:728af114b613 126 frame = iplImg;
pramodnataraja 0:728af114b613 127 if( frame.empty() )
pramodnataraja 0:728af114b613 128 break;
pramodnataraja 0:728af114b613 129 if( iplImg->origin == IPL_ORIGIN_TL )
pramodnataraja 0:728af114b613 130 frame.copyTo( frameCopy );
pramodnataraja 0:728af114b613 131 else
pramodnataraja 0:728af114b613 132 flip( frame, frameCopy, 0 );
pramodnataraja 0:728af114b613 133
pramodnataraja 0:728af114b613 134 if (frameCopy.empty())
pramodnataraja 0:728af114b613 135 {
pramodnataraja 0:728af114b613 136 fprintf( stderr, "ERROR: frame is null...\n" );
pramodnataraja 0:728af114b613 137 getchar();
pramodnataraja 0:728af114b613 138 break;
pramodnataraja 0:728af114b613 139 }
pramodnataraja 0:728af114b613 140
pramodnataraja 0:728af114b613 141 if(discard <= 0)
pramodnataraja 0:728af114b613 142 {
pramodnataraja 0:728af114b613 143 prev_pos_x = cur_pos_x;
pramodnataraja 0:728af114b613 144 prev_pos_y = cur_pos_y;
pramodnataraja 0:728af114b613 145
pramodnataraja 0:728af114b613 146 prev_disp_x = disp_x;
pramodnataraja 0:728af114b613 147 prev_disp_y = disp_y;
pramodnataraja 0:728af114b613 148
pramodnataraja 0:728af114b613 149 t = (double)cvGetTickCount();
pramodnataraja 0:728af114b613 150 detect_faces(frameCopy);
pramodnataraja 0:728af114b613 151 t = (double)cvGetTickCount() - t;
pramodnataraja 0:728af114b613 152
pramodnataraja 0:728af114b613 153 disp_x = cur_pos_x - prev_pos_x;
pramodnataraja 0:728af114b613 154 disp_y = cur_pos_y - prev_pos_y;
pramodnataraja 0:728af114b613 155
pramodnataraja 0:728af114b613 156 if(((disp_x < THRESHOLD_X) && (disp_x > (-1 * THRESHOLD_X))) || (firstValue == 1))
pramodnataraja 0:728af114b613 157 disp_x = 0;
pramodnataraja 0:728af114b613 158
pramodnataraja 0:728af114b613 159 if(((disp_y < THRESHOLD_Y) && (disp_y > (-1 * THRESHOLD_Y))) || (firstValue == 1))
pramodnataraja 0:728af114b613 160 disp_y = 0;
pramodnataraja 0:728af114b613 161
pramodnataraja 0:728af114b613 162 if(firstValue == 1)
pramodnataraja 0:728af114b613 163 firstValue = 0;
pramodnataraja 0:728af114b613 164
pramodnataraja 0:728af114b613 165 /* if((disp_x != 0) && (prev_disp_x == 0))
pramodnataraja 0:728af114b613 166 {
pramodnataraja 0:728af114b613 167 printf("disp_x = %d\n", disp_x);
pramodnataraja 0:728af114b613 168 }
pramodnataraja 0:728af114b613 169 if((disp_y != 0) && (prev_disp_y == 0))
pramodnataraja 0:728af114b613 170 {
pramodnataraja 0:728af114b613 171 printf("\tdisp_y = %d\n", disp_y);
pramodnataraja 0:728af114b613 172 }*/
pramodnataraja 0:728af114b613 173
pramodnataraja 0:728af114b613 174 valid = 1;
pramodnataraja 0:728af114b613 175
pramodnataraja 0:728af114b613 176 if((disp_x == 0) && (disp_y < 0) && (prev_disp_y == 0))
pramodnataraja 0:728af114b613 177 {
pramodnataraja 0:728af114b613 178 printf("front");
pramodnataraja 0:728af114b613 179 cBufferOut = &front;
pramodnataraja 0:728af114b613 180 }
pramodnataraja 0:728af114b613 181 else if((disp_x == 0) && (disp_y > 0) && (prev_disp_y == 0))
pramodnataraja 0:728af114b613 182 {
pramodnataraja 0:728af114b613 183 printf("back");
pramodnataraja 0:728af114b613 184 cBufferOut = &back;
pramodnataraja 0:728af114b613 185 }
pramodnataraja 0:728af114b613 186 else if((disp_x < 0) && (disp_y == 0) && (prev_disp_x == 0))
pramodnataraja 0:728af114b613 187 {
pramodnataraja 0:728af114b613 188 printf("right");
pramodnataraja 0:728af114b613 189 cBufferOut = &right;
pramodnataraja 0:728af114b613 190 }
pramodnataraja 0:728af114b613 191 else if((disp_x > 0) && (disp_y == 0) && (prev_disp_x == 0))
pramodnataraja 0:728af114b613 192 {
pramodnataraja 0:728af114b613 193 printf("left");
pramodnataraja 0:728af114b613 194 cBufferOut = &left;
pramodnataraja 0:728af114b613 195 }
pramodnataraja 0:728af114b613 196 else if((disp_x < 0) && (prev_disp_x == 0) && (disp_y < 0) && (prev_disp_y == 0))
pramodnataraja 0:728af114b613 197 {
pramodnataraja 0:728af114b613 198 printf("half_front_right");
pramodnataraja 0:728af114b613 199 cBufferOut = &half_front_right;
pramodnataraja 0:728af114b613 200 }
pramodnataraja 0:728af114b613 201 else if((disp_x > 0) && (prev_disp_x == 0) && (disp_y < 0) && (prev_disp_y == 0))
pramodnataraja 0:728af114b613 202 {
pramodnataraja 0:728af114b613 203 printf("half_front_left");
pramodnataraja 0:728af114b613 204 cBufferOut = &half_front_left;
pramodnataraja 0:728af114b613 205 }
pramodnataraja 0:728af114b613 206 else if((disp_x < 0) && (prev_disp_x == 0) && (disp_y > 0) && (prev_disp_y == 0))
pramodnataraja 0:728af114b613 207 {
pramodnataraja 0:728af114b613 208 printf("half_back_right");
pramodnataraja 0:728af114b613 209 cBufferOut = &half_back_right;
pramodnataraja 0:728af114b613 210 }
pramodnataraja 0:728af114b613 211 else if((disp_x > 0) && (prev_disp_x == 0) && (disp_y > 0) && (prev_disp_y == 0))
pramodnataraja 0:728af114b613 212 {
pramodnataraja 0:728af114b613 213 printf("half_back_left");
pramodnataraja 0:728af114b613 214 cBufferOut = &half_back_left;
pramodnataraja 0:728af114b613 215 }
pramodnataraja 0:728af114b613 216 else
pramodnataraja 0:728af114b613 217 {
pramodnataraja 0:728af114b613 218 valid = 0;
pramodnataraja 0:728af114b613 219 }
pramodnataraja 0:728af114b613 220
pramodnataraja 0:728af114b613 221 if(valid != 0)
pramodnataraja 0:728af114b613 222 {
pramodnataraja 0:728af114b613 223 printf("\n");
pramodnataraja 0:728af114b613 224 //printf("output = %c \n",*cBufferOut);
pramodnataraja 0:728af114b613 225
pramodnataraja 0:728af114b613 226 if(!WriteFile(hSerial, cBufferOut, 1, &cBytesOut, NULL))
pramodnataraja 0:728af114b613 227 {
pramodnataraja 0:728af114b613 228 printf("File write error\n");
pramodnataraja 0:728af114b613 229 }
pramodnataraja 0:728af114b613 230
pramodnataraja 0:728af114b613 231 discard = DISCARD_VALUE;
pramodnataraja 0:728af114b613 232 }
pramodnataraja 0:728af114b613 233 }
pramodnataraja 0:728af114b613 234 else
pramodnataraja 0:728af114b613 235 {
pramodnataraja 0:728af114b613 236 detect_faces(frameCopy);
pramodnataraja 0:728af114b613 237 discard--;
pramodnataraja 0:728af114b613 238 }
pramodnataraja 0:728af114b613 239
pramodnataraja 0:728af114b613 240 if((cvWaitKey(10) & 255) == 32)
pramodnataraja 0:728af114b613 241 {
pramodnataraja 0:728af114b613 242 printf("onoff\n");
pramodnataraja 0:728af114b613 243 cBufferOut = &onOff;
pramodnataraja 0:728af114b613 244
pramodnataraja 0:728af114b613 245 if(!WriteFile(hSerial, cBufferOut, 1, &cBytesOut, NULL))
pramodnataraja 0:728af114b613 246 {
pramodnataraja 0:728af114b613 247 printf("File write error.........\n");
pramodnataraja 0:728af114b613 248 }
pramodnataraja 0:728af114b613 249 }
pramodnataraja 0:728af114b613 250
pramodnataraja 0:728af114b613 251 //imshow( "mywindow", frame );
pramodnataraja 0:728af114b613 252
pramodnataraja 0:728af114b613 253 // Do not release the frame!
pramodnataraja 0:728af114b613 254 //If ESC key pressed, Key=0x10001B under OpenCV 0.9.7(linux version),
pramodnataraja 0:728af114b613 255 //remove higher bits using AND operator
pramodnataraja 0:728af114b613 256 if ( (cvWaitKey(10) & 255) == 27 ) break;
pramodnataraja 0:728af114b613 257
pramodnataraja 0:728af114b613 258
pramodnataraja 0:728af114b613 259 }
pramodnataraja 0:728af114b613 260 // Release the capture device housekeeping
pramodnataraja 0:728af114b613 261 cvReleaseCapture( &capture );
pramodnataraja 0:728af114b613 262 cvDestroyWindow( "mywindow" );
pramodnataraja 0:728af114b613 263
pramodnataraja 0:728af114b613 264 CloseHandle(hSerial);
pramodnataraja 0:728af114b613 265
pramodnataraja 0:728af114b613 266 return 0;
pramodnataraja 0:728af114b613 267 }
pramodnataraja 0:728af114b613 268
pramodnataraja 0:728af114b613 269
pramodnataraja 0:728af114b613 270
pramodnataraja 0:728af114b613 271 int detect_faces(Mat& img)
pramodnataraja 0:728af114b613 272 {
pramodnataraja 0:728af114b613 273 Mat gray, img2;
pramodnataraja 0:728af114b613 274 Mat smallImg( cvRound (img.rows/SCALE), cvRound(img.cols/SCALE), CV_8UC1 );
pramodnataraja 0:728af114b613 275
pramodnataraja 0:728af114b613 276 cvtColor( img, gray, CV_BGR2GRAY );
pramodnataraja 0:728af114b613 277 resize( gray, smallImg, smallImg.size(), 0, 0, INTER_LINEAR );
pramodnataraja 0:728af114b613 278 equalizeHist( smallImg, smallImg );
pramodnataraja 0:728af114b613 279
pramodnataraja 0:728af114b613 280 #pragma region FEATURE FILES
pramodnataraja 0:728af114b613 281 /* Load the face detector and create memory storage
pramodnataraja 0:728af114b613 282 `cascade` and `storage` are global variables */
pramodnataraja 0:728af114b613 283 if (cascade.empty())
pramodnataraja 0:728af114b613 284 {
pramodnataraja 0:728af114b613 285 char* file = FEATURE_FACE; //haarcascade_eye_tree_eyeglasses.xml";
pramodnataraja 0:728af114b613 286
pramodnataraja 0:728af114b613 287
pramodnataraja 0:728af114b613 288 if(!cascade.load(file))
pramodnataraja 0:728af114b613 289 {
pramodnataraja 0:728af114b613 290 fprintf( stderr, "ERROR: Invalid cascade path...\n" );
pramodnataraja 0:728af114b613 291 getchar();
pramodnataraja 0:728af114b613 292 return 0;
pramodnataraja 0:728af114b613 293 }
pramodnataraja 0:728af114b613 294
pramodnataraja 0:728af114b613 295 storage = cvCreateMemStorage(0);
pramodnataraja 0:728af114b613 296 }
pramodnataraja 0:728af114b613 297
pramodnataraja 0:728af114b613 298 if (cascade_nose.empty())
pramodnataraja 0:728af114b613 299 {
pramodnataraja 0:728af114b613 300 char* file = FEATURE_NOSE; //haarcascade_eye_tree_eyeglasses.xml";
pramodnataraja 0:728af114b613 301
pramodnataraja 0:728af114b613 302 if(!cascade_nose.load(file))
pramodnataraja 0:728af114b613 303 {
pramodnataraja 0:728af114b613 304 fprintf( stderr, "ERROR: Invalid cascade path...\n" );
pramodnataraja 0:728af114b613 305 getchar();
pramodnataraja 0:728af114b613 306 return 0;
pramodnataraja 0:728af114b613 307 }
pramodnataraja 0:728af114b613 308 }
pramodnataraja 0:728af114b613 309
pramodnataraja 0:728af114b613 310 if (cascade_eye.empty())
pramodnataraja 0:728af114b613 311 {
pramodnataraja 0:728af114b613 312 char* file = FEATURE_EYE;//haarcascade_eye_tree_eyeglasses.xml";
pramodnataraja 0:728af114b613 313
pramodnataraja 0:728af114b613 314 if(!cascade_eye.load(file))
pramodnataraja 0:728af114b613 315 {
pramodnataraja 0:728af114b613 316 fprintf( stderr, "ERROR: Invalid cascade path...\n" );
pramodnataraja 0:728af114b613 317 getchar();
pramodnataraja 0:728af114b613 318 return 0;
pramodnataraja 0:728af114b613 319 }
pramodnataraja 0:728af114b613 320 }
pramodnataraja 0:728af114b613 321 #pragma endregion
pramodnataraja 0:728af114b613 322
pramodnataraja 0:728af114b613 323 vector<Rect> faces;
pramodnataraja 0:728af114b613 324
pramodnataraja 0:728af114b613 325 cascade.detectMultiScale(smallImg, faces, SCALING_FACTOR_FACE, 2, FLAGS_FACE, Size(MIN_SIZE_FACE, MIN_SIZE_FACE) );
pramodnataraja 0:728af114b613 326
pramodnataraja 0:728af114b613 327 for( vector<Rect>::const_iterator r = faces.begin(); r != faces.end(); r++)
pramodnataraja 0:728af114b613 328 {
pramodnataraja 0:728af114b613 329 img2 = smallImg(*r);
pramodnataraja 0:728af114b613 330
pramodnataraja 0:728af114b613 331 vector<Rect> eyes;
pramodnataraja 0:728af114b613 332 vector<Rect> nose;
pramodnataraja 0:728af114b613 333
pramodnataraja 0:728af114b613 334 #ifdef EYE
pramodnataraja 0:728af114b613 335 cascade_eye.detectMultiScale(img2, eyes, SCALING_FACTOR_EYE, 2, FLAGS_EYE, Size(MIN_SIZE_EYE, MIN_SIZE_EYE) );
pramodnataraja 0:728af114b613 336
pramodnataraja 0:728af114b613 337 for( vector<Rect>::const_iterator nr = eyes.begin(); nr != eyes.end(); nr++ )
pramodnataraja 0:728af114b613 338 {
pramodnataraja 0:728af114b613 339 rectangle(smallImg, cvPoint(r->x + nr->x, r->y + nr->y), cvPoint(r->x + nr->x + nr->width, r->y + nr->y + nr->height), COLOR_EYE, 1, 8, 0);
pramodnataraja 0:728af114b613 340 cur_pos_x = r->x + nr->x + (nr->width / 2);
pramodnataraja 0:728af114b613 341 cur_pos_y = r->y + nr->y + (nr->height / 2);
pramodnataraja 0:728af114b613 342 }
pramodnataraja 0:728af114b613 343 #endif
pramodnataraja 0:728af114b613 344
pramodnataraja 0:728af114b613 345
pramodnataraja 0:728af114b613 346 #ifdef NOSE
pramodnataraja 0:728af114b613 347 cascade_nose.detectMultiScale(img2, nose, SCALING_FACTOR_NOSE, 2, FLAGS_NOSE, Size(MIN_SIZE_NOSE, MIN_SIZE_NOSE) );
pramodnataraja 0:728af114b613 348
pramodnataraja 0:728af114b613 349 for( vector<Rect>::const_iterator nr = nose.begin(); nr != nose.end(); nr++ )
pramodnataraja 0:728af114b613 350 //vector<Rect>::const_iterator nr = nose.end() - 1;
pramodnataraja 0:728af114b613 351 {
pramodnataraja 0:728af114b613 352 rectangle(smallImg, cvPoint(r->x + nr->x, r->y + nr->y), cvPoint(r->x + nr->x + nr->width, r->y + nr->y + nr->height), COLOR_NOSE, 1, 8, 0);
pramodnataraja 0:728af114b613 353 cur_pos_x = r->x + nr->x + (nr->width / 2);
pramodnataraja 0:728af114b613 354 cur_pos_y = r->y + nr->y + (nr->height / 2);
pramodnataraja 0:728af114b613 355 }
pramodnataraja 0:728af114b613 356 #endif
pramodnataraja 0:728af114b613 357
pramodnataraja 0:728af114b613 358 //if((int)eyes.size() >= 2)
pramodnataraja 0:728af114b613 359 {
pramodnataraja 0:728af114b613 360 rectangle(smallImg, cvPoint(r->x, r->y), cvPoint(r->x + r->width, r->y + r->height), COLOR_FACE, 1, 8, 0);
pramodnataraja 0:728af114b613 361 }
pramodnataraja 0:728af114b613 362 }
pramodnataraja 0:728af114b613 363
pramodnataraja 0:728af114b613 364 imshow("mywindow",smallImg);
pramodnataraja 0:728af114b613 365
pramodnataraja 0:728af114b613 366 return 0; //(int)faces.size();
pramodnataraja 0:728af114b613 367 }