//get position of pupils void getEyeVectors(Mat &frame, Mat &frame_gray, Rect face) { Mat face_frame = frame_gray(face); Mat face_frame_color = frame(face); //blur to remove some noise GaussianBlur(face_frame, face_frame, Size( 0, 0 ), FACE_SMOOTH * face.width); //get eye bounding boxes int eye_region_width = face.width * (EYE_WIDTH); int eye_region_height = face.width * (EYE_HEIGHT); int eye_region_top = face.height * (EYE_TOP); int eye_region_side =face.width * (EYE_SIDE); Rect left_eye_box( eye_region_side, eye_region_top, eye_region_width, eye_region_height ); Rect right_eye_box( face.width - eye_region_width - eye_region_side, eye_region_top, eye_region_width, eye_region_height ); //get left center / eye corner CvPoint2D32f left_pupil, left_center; Mat left_eye = face_frame(left_eye_box); left_pupil = getPupilCenter(left_eye); left_center = getEyeCenter(face_frame_color, left_eye_box); //fix offset left_pupil.x += eye_region_side; left_pupil.y += eye_region_top; left_center.x += eye_region_side; left_center.y += eye_region_top; //get right center / eye corner CvPoint2D32f right_pupil, right_center; Mat right_eye = face_frame(right_eye_box); right_pupil = getPupilCenter(right_eye); right_center = getEyeCenter(face_frame_color, right_eye_box); //fix offset right_pupil.x += face.width - eye_region_width - eye_region_side; right_pupil.y += eye_region_top; right_center.x += face.width - eye_region_width - eye_region_side; right_center.y += eye_region_top; circle(face_frame, left_pupil, 2, 200); circle(face_frame, right_pupil, 2, 200); //circle(face_frame, left_center, 3, 200); //circle(face_frame, right_center, 3, 200); //resize for debugging //resize(face_frame, face_frame, Size(500,500), 0, 0, INTER_NEAREST); //imshow("cam", face_frame); //Point left_vec = left_corner - left_pupil; //printf("x: %d, y: %d\n", left_vec.x, left_vec.y); }
vector<Point> InputProcessing::getFeatures(Mat gray) { vector<Point> features; Rect face = getFacePosition(gray); if (face.width == 0) { return features; } Rect leftEye = getLeftEyePosition(gray, face); Rect rightEye = getRightEyePosition(gray, face); if (leftEye.width == 0 || rightEye.width == 0) { return features; } features.push_back(getLeftEyeCorner(gray, rightEye)); features.push_back(getEyeCenter(gray, rightEye)); features.push_back(getRightEyeCorner(gray, rightEye)); features.push_back(getLeftEyeCorner(gray, leftEye)); features.push_back(getEyeCenter(gray, leftEye)); features.push_back(getRightEyeCorner(gray, leftEye)); if (features.size() < 6) { features.clear(); return features; } if (features[0].x == -1 || features[1].x == -1 || features[2].x == -1 || features[3].x == -1 || features[4].x == -1 || features[5].x == -1) { features.clear(); } return features; }