Advertisement
Guest User

OpenCV face-eyes-smile recon

a guest
Apr 10th, 2013
1,181
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.16 KB | None | 0 0
  1.  
  2.  #include "opencv2/objdetect/objdetect.hpp"
  3.  #include "opencv2/highgui/highgui.hpp"
  4.  #include "opencv2/imgproc/imgproc.hpp"
  5.  
  6.  #include <iostream>
  7.  #include <stdio.h>
  8.  
  9.  using namespace std;
  10.  using namespace cv;
  11.  
  12.  /** Function Headers */
  13.  void detectAndDisplay( Mat frame );
  14.  
  15.  /** Global variables */
  16.  String face_cascade_name = "haarcascades\\haarcascade_frontalface_alt.xml";
  17.  String eyes_cascade_name = "haarcascades\\haarcascade_eye_tree_eyeglasses.xml";
  18.  String smile_cascade_name = "haarcascades\\haarcascade_smile.xml";
  19.  
  20.  CascadeClassifier face_cascade;
  21.  CascadeClassifier eyes_cascade;
  22.  CascadeClassifier smileCascade;
  23.  string window_name = "Capture - Face detection";
  24.  RNG rng(12345);
  25.  
  26.  /** @function main */
  27.  int main( int argc, const char** argv )
  28.  {
  29.    CvCapture* capture;
  30.    Mat frame;
  31.  
  32.    //-- 1. Load the cascades
  33.    if( !face_cascade.load( face_cascade_name ) ){ printf("--(!)Error loading\n"); return -1; };
  34.    if( !eyes_cascade.load( eyes_cascade_name ) ){ printf("--(!)Error loading\n"); return -1; };
  35.    if( !smileCascade.load( smile_cascade_name ) ){ printf("--(!)Error loading\n"); return -1; };
  36.    //-- 2. Read the video stream
  37.    capture = cvCaptureFromCAM( -1 );
  38.    if( capture )
  39.    {
  40.      while( true )
  41.      {
  42.    frame = cvQueryFrame( capture );
  43.  
  44.    //-- 3. Apply the classifier to the frame
  45.        if( !frame.empty() )
  46.        { detectAndDisplay( frame ); }
  47.        else
  48.        { printf(" --(!) No captured frame -- Break!"); break; }
  49.  
  50.        int c = waitKey(10);
  51.        if( (char)c == 'c' ) { break; }
  52.       }
  53.    }
  54.    return 0;
  55.  }
  56.  
  57. /** @function detectAndDisplay */
  58. void detectAndDisplay( Mat frame )
  59. {
  60.   std::vector<Rect> faces;
  61.   Mat frame_gray;
  62.  
  63.   cvtColor( frame, frame_gray, CV_BGR2GRAY );
  64.   equalizeHist( frame_gray, frame_gray );
  65.  
  66.   //-- Detect faces
  67.   face_cascade.detectMultiScale( frame_gray, faces, 1.1, 2, 0|CV_HAAR_SCALE_IMAGE, Size(30, 30) );
  68.  
  69.   for( int i = 0; i < faces.size(); i++ )
  70.   {
  71.     Point center( faces[i].x + faces[i].width*0.5, faces[i].y + faces[i].height*0.5 );
  72.     ellipse( frame, center, Size( faces[i].width*0.5, faces[i].height*0.5), 0, 0, 360, Scalar( 255, 0, 255 ), 4, 8, 0 );
  73.  
  74.     Mat faceROI = frame_gray( faces[i] );
  75.     std::vector<Rect> eyes;
  76.  
  77.     //-- In each face, detect eyes
  78.     eyes_cascade.detectMultiScale( faceROI, eyes, 1.1, 2, 0 |CV_HAAR_SCALE_IMAGE, Size(30, 30) );
  79.  
  80.     for( int j = 0; j < eyes.size(); j++ )
  81.      {
  82.        Point center( faces[i].x + eyes[j].x + eyes[j].width*0.5, faces[i].y + eyes[j].y + eyes[j].height*0.5 );
  83.        int radius = cvRound( (eyes[j].width + eyes[j].height)*0.25 );
  84.        circle( frame, center, radius, Scalar( 255, 0, 0 ), 4, 8, 0 );
  85.      }
  86.  
  87.     //--In each face, detect smile
  88.     std::vector<Rect> smile;
  89.     smileCascade.detectMultiScale(faceROI, smile, 1.1, 2, 0|CV_HAAR_SCALE_IMAGE, Size(30,30));
  90.     for( int k=0; k<smile.size(); k++)
  91.     {
  92.         Point center(faces[i].x + smile[k].x + smile[k].width*0.5, faces[i].y + smile[k].y + smile[k].height*0.5);
  93.         ellipse(frame,center,Size(smile[k].width*0.5, smile[k].height*0.5), 0, 0, 360, Scalar(0,255,255), 4, 8, 0);
  94.        
  95.     }
  96.  
  97.  
  98.  
  99.   }
  100.   //-- Show what you got
  101.   imshow( window_name, frame );
  102.  }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement