Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * @file facedetect.cpp
- * @author Karan Thakkar
- * @brief Uses the Haar Cascade Classifier to detect face and eyes in a video feed
- */
- #include "stdafx.h"
- #include "opencv2/objdetect/objdetect.hpp"
- #include "opencv2/highgui/highgui.hpp"
- #include "opencv2/imgproc/imgproc.hpp"
- #include <iostream>
- using namespace std;
- using namespace cv;
- /** Function Headers */
- void detectAndDisplay(IplImage* frame );
- /** Global variables */
- CvHaarClassifierCascade* face_cascade = 0;
- CvHaarClassifierCascade* eye_cascade = 0;
- CvMemStorage* pStorageface = 0;
- CvMemStorage* pStorageeye = 0; // memory for detector to use
- RNG rng(12345);
- /**
- * @function main
- */
- int main( int argc, const char** argv )
- {
- CvCapture* capture;
- IplImage* frame = 0;
- //-- 1. Load the cascade
- face_cascade = (CvHaarClassifierCascade *)cvLoad("C:\\OpenCV-2.4.2\\opencv\\data\\haarcascades\\haarcascade_frontalface_alt_tree.xml", 0 , 0, 0);
- eye_cascade = (CvHaarClassifierCascade *)cvLoad("C:\\OpenCV-2.4.2\\opencv\\data\\haarcascades\\haarcascade_eye_tree_eyeglasses.xml", 0 , 0, 0);
- while( true )
- {
- //-- 2. Read the video stream
- capture = cvCaptureFromCAM(1);
- frame = cvQueryFrame( capture );
- //-- 3. Apply the classifier to the frame
- detectAndDisplay(frame);
- int c = waitKey(10);
- if( (char)c == 27 ) { exit(0); }
- }
- // clean up and release resources
- cvReleaseImage(&frame);
- if(face_cascade) cvReleaseHaarClassifierCascade(&face_cascade);
- if(pStorageface) cvReleaseMemStorage(&pStorageface);
- if(pStorageeye) cvReleaseMemStorage(&pStorageeye);
- return 0;
- }
- /**
- * @function detectAndDisplay
- */
- void detectAndDisplay(IplImage* frame )
- {
- CvSeq * pFaceRectSeq; // memory-access interface
- CvSeq * pEyeRectSeq;
- pStorageface = cvCreateMemStorage(0);
- // detect faces in image
- pFaceRectSeq = cvHaarDetectObjects
- (frame, face_cascade, pStorageface,
- 1.1, // increase search scale by 10% each pass
- 3, // merge groups of three detections
- CV_HAAR_DO_CANNY_PRUNING, // skip regions unlikely to contain a face
- cvSize(40,40)); // smallest size face to detect = 40x40
- pStorageeye = cvCreateMemStorage(0);
- // detect faces in image
- pEyeRectSeq = cvHaarDetectObjects
- (frame, eye_cascade, pStorageeye,
- 1.1, // increase search scale by 10% each pass
- 3, // merge groups of three detections
- CV_HAAR_DO_CANNY_PRUNING, // skip regions unlikely to contain a face
- cvSize(40,40)); // smallest size face to detect = 40x40
- const char * DISPLAY_WINDOW = "Haar Window";
- int i;
- // create a window to display detected faces
- cvNamedWindow(DISPLAY_WINDOW, CV_WINDOW_AUTOSIZE);
- // draw a rectangular outline around each detection
- for(i=0;i<(pFaceRectSeq? pFaceRectSeq->total:0); i++ )
- {
- CvRect* r = (CvRect*)cvGetSeqElem(pFaceRectSeq, i);
- CvPoint pt1 = { r->x, r->y };
- CvPoint pt2 = { r->x + r->width, r->y + r->height };
- cvRectangle(frame, pt1, pt2, CV_RGB(255,255,255), 3, 4, 0);
- }
- // draw a rectangular outline around each detection
- for(i=0;i<(pEyeRectSeq? pEyeRectSeq->total:0); i++ )
- {
- CvRect* r = (CvRect*)cvGetSeqElem(pEyeRectSeq, i);
- CvPoint pt1 = { r->x, r->y };
- CvPoint pt2 = { r->x + r->width, r->y + r->height };
- cvRectangle(frame, pt1, pt2, CV_RGB(255,255,255), 3, 4, 0);
- }
- // display face detections
- cvShowImage(DISPLAY_WINDOW, frame);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement