Ask Your Question

OCV's profile - activity

2013-08-31 12:41:21 -0600 asked a question Question mark behind local time

I want to display the system time in windows and recorde a video but I dont know why there is a question mark behind the year part of the time. Anybody know why?

Code that I am using:

#include <C:\Users\AM\Desktop\Project\opencv\build\include\opencv2\objdetect\objdetect.hpp>
#include <C:\Users\AM\Desktop\Project\opencv\build\include\opencv2\highgui\highgui.hpp>
#include <C:\Users\AM\Desktop\Project\opencv\build\include\opencv2\imgproc\imgproc.hpp>
#include <C:\Users\AM\Desktop\Project\opencv\build\include\opencv\cv.h>
#include <C:\Users\AM\Desktop\Project\opencv\build\include\opencv2\core\core.hpp>
#include <C:\Users\AM\Desktop\Project\opencv\build\include\opencv2\videostab\optical_flow.hpp>
#include <C:\Users\AM\Desktop\Project\opencv\build\include\opencv2\videostab\videostab.hpp>

#include <iostream>
#include <stdio.h>
#include <time.h>

using namespace std;
using namespace cv;

int numFaces;
int numEyes;

 /** Function Headers */
 void detectAndDisplay( Mat frame );
 void videoRecord (Mat frame);

 /** Global variables */
 String face_cascade_name = "haarcascade_frontalface_alt.xml";
 String eyes_cascade_name = "haarcascade_eye_tree_eyeglasses.xml";

 CascadeClassifier face_cascade;
 CascadeClassifier eyes_cascade;
 string window_name = "Capture - Face detection";
 RNG rng(12345);

 VideoCapture capture;
 VideoWriter record;

 time_t now;

 /** @function main */
 int main( int argc, const char** argv )
 {

  Mat frame;

      //-- 1. Load the cascades
   if( !face_cascade.load( face_cascade_name ) ){ printf("--(!)Error loading\n"); return -1; };
   if( !eyes_cascade.load( eyes_cascade_name ) ){ printf("--(!)Error loading\n"); return -1; };

   //-- 2. Read the video stream
   capture.open(0);// = cvCaptureFromCAM( -1 );

   if( capture.isOpened() )
   {
    int width = capture.get(CV_CAP_PROP_FRAME_WIDTH);
    int height = capture.get(CV_CAP_PROP_FRAME_HEIGHT);

    capture >> frame;

    record.open("C:/Users/AM/Google Drive/Intruder.avi", CV_FOURCC('D','I','V','X'), 9, cvSize(width, height), true);

     while( true )
     {
       //frame = cvQueryFrame( capture );
       capture >> frame;

   //-- 3. Apply the classifier to the frame
       if( !frame.empty() )
       { 
           detectAndDisplay( frame ); 
          if (numEyes == 2)
           {
            videoRecord(frame);
            //numEyes = 0;
           }
       }
       else
       { printf(" --(!) No captured frame -- Break!"); break; }

         //pause for 33ms        
         if (waitKey(33) == 27) 
         break; 
       }
   } 
   return 0;
 }

/** @function detectAndDisplay */
void detectAndDisplay( Mat frame )
{
  std::vector<Rect> faces;
  Mat frame_gray;

  //time (&rawtime);
  //timeinfo = localtime (&rawtime);
  string str;
  now = time(NULL);
  str = ctime(&now);


  cvtColor( frame, frame_gray, CV_BGR2GRAY );
  equalizeHist( frame_gray, frame_gray );

  //-- Detect faces
  face_cascade.detectMultiScale( frame_gray, faces, 1.1, 2, 0|CV_HAAR_SCALE_IMAGE, Size(30, 30) );

  putText(frame, str, cvPoint(5, 25), CV_FONT_HERSHEY_SIMPLEX, 0.5, CV_RGB(0, 0, 255), 2, 8, FALSE);


  for( int i = 0; i < faces.size(); i++ )
  {
  //draw face
    Point center( faces[i].x + faces[i].width*0.5, faces[i].y + faces[i].height*0.5 );
    ellipse( frame, center, Size( faces[i].width*0.5, faces[i].height*0.5), 0, 0, 360, Scalar( 255, 0, 255 ), 4, 8, 0 );

    //get region of interest
    Mat faceROI = frame_gray( faces[i] );
    std::vector<Rect> eyes;

    //-- In each face, detect eyes
    eyes_cascade.detectMultiScale( faceROI, eyes, 1.1, 2, 0 |CV_HAAR_SCALE_IMAGE, Size(30, 30) );

    for( int j = 0; j < eyes.size(); j++ )
     {
     //draw eyes
       Point center( faces[i].x + eyes[j].x + eyes[j].width*0.5, faces[i].y + eyes[j].y + eyes[j].height*0.5 );
       int radius = cvRound( (eyes[j].width + eyes[j].height)*0.25 );
       circle( frame, center, radius, Scalar ...
(more)
2013-08-28 18:46:11 -0600 answered a question Recording video once face and eyes are detected

Hi

I am not sure what is wrong with my code. Actually I have switched to C++ API from C. Now the code can be compiled and run but the problem is it always get hang when two eyes are detected. My idea is to keep recording video as long as two eyes are being detected in the frame and stop recording when the eyes are not detected. Below is my code. Anybody has any idea how should I change my code?

#include <C:\Users\AM\Desktop\Project\opencv\build\include\opencv2\objdetect\objdetect.hpp>
#include <C:\Users\AM\Desktop\Project\opencv\build\include\opencv2\highgui\highgui.hpp>
#include <C:\Users\AM\Desktop\Project\opencv\build\include\opencv2\imgproc\imgproc.hpp>
#include <C:\Users\AM\Desktop\Project\opencv\build\include\opencv\cv.h>
#include <C:\Users\AM\Desktop\Project\opencv\build\include\opencv2\core\core.hpp>
#include <C:\Users\AM\Desktop\Project\opencv\build\include\opencv2\videostab\optical_flow.hpp>
#include <C:\Users\AM\Desktop\Project\opencv\build\include\opencv2\videostab\videostab.hpp>


#include <iostream>
#include <stdio.h>

 using namespace std;
 using namespace cv;

int numFaces;
int numEyes;

 /** Function Headers */
 void detectAndDisplay( Mat frame );
 void videoRecord ();

 /** Global variables */
 String face_cascade_name = "C:/Users/AM/Desktop/Project/opencv/data/haarcascades/haarcascade_frontalface_alt.xml";
 String eyes_cascade_name = "C:/Users/AM/Desktop/Project/opencv/data/haarcascades/haarcascade_eye_tree_eyeglasses.xml";

 CascadeClassifier face_cascade;
 CascadeClassifier eyes_cascade;
 string window_name = "Capture - Face detection";
 RNG rng(12345);

 VideoCapture capture;
 VideoWriter record;

 /** @function main */
 int main( int argc, const char** argv )
 {
  // CvCapture* capture;
   Mat frame;

   //-- 1. Load the cascades
   if( !face_cascade.load( face_cascade_name ) ){ printf("--(!)Error loading\n"); return -1; };
   if( !eyes_cascade.load( eyes_cascade_name ) ){ printf("--(!)Error loading\n"); return -1; };

   //-- 2. Read the video stream
   capture.open(0);// = cvCaptureFromCAM( -1 );

   if( capture.isOpened() )
   {
     while( true )
     {
       //frame = cvQueryFrame( capture );
       capture >> frame;

   //-- 3. Apply the classifier to the frame
       if( !frame.empty() )
       { 
           detectAndDisplay( frame ); 
          while (numEyes == 2)
           {
            videoRecord();
           }
       }
       else
       { printf(" --(!) No captured frame -- Break!"); break; }

         //pause for 33ms        
         if (waitKey(33) == 27) 
         break; 
       }
   } 
   return 0;
 }

/** @function detectAndDisplay */
void detectAndDisplay( Mat frame )
{
  std::vector<Rect> faces;
  Mat frame_gray;

  cvtColor( frame, frame_gray, CV_BGR2GRAY );
  equalizeHist( frame_gray, frame_gray );

  //-- Detect faces
  face_cascade.detectMultiScale( frame_gray, faces, 1.1, 2, 0|CV_HAAR_SCALE_IMAGE, Size(30, 30) );


  for( int i = 0; i < faces.size(); i++ )
  {
  //draw face
    Point center( faces[i].x + faces[i].width*0.5, faces[i].y + faces[i].height*0.5 );
    ellipse( frame, center, Size( faces[i].width*0.5, faces[i].height*0.5), 0, 0, 360, Scalar( 255, 0, 255 ), 4, 8, 0 );

    //get region of interest
    Mat faceROI = frame_gray( faces[i] );
    std::vector<Rect> eyes;

    //-- In each face, detect eyes
    eyes_cascade.detectMultiScale( faceROI, eyes, 1.1, 2, 0 |CV_HAAR_SCALE_IMAGE, Size(30, 30) );

    for( int j = 0; j < eyes.size(); j++ )
     {
     //draw eyes
       Point center( faces[i].x + eyes[j].x + eyes[j].width*0.5, faces[i].y + eyes[j].y + eyes[j].height*0.5 );
       int radius = cvRound( (eyes[j].width + eyes[j].height)*0.25 );
       circle( frame, center, radius, Scalar( 255, 0, 0 ), 4, 8, 0 );
     }

     cout<<"numEyes ...
(more)
2013-08-26 16:48:15 -0600 asked a question Recording video once face and eyes are detected

Hi

I am trying to capture video file and save to the local once the eyes are detected using opencv. It would stop recording video when eyes are not present. The code could be compiled but it is unable to get the result. It always exits with code -1. Below is my code.

EDIT 1:

I am not sure what is wrong with my code. Actually I have switched to C++ API from C. Now the code can be compiled and run but the problem is it always get hang when two eyes are detected. My idea is to keep recording video as long as two eyes are being detected in the frame and stop recording when the eyes are not detected. Below is my code. Anybody has any idea how should I change my code?

New code attached:

#include <C:\Users\AM\Desktop\Project\opencv\build\include\opencv2\objdetect\objdetect.hpp>
#include <C:\Users\AM\Desktop\Project\opencv\build\include\opencv2\highgui\highgui.hpp>
#include <C:\Users\AM\Desktop\Project\opencv\build\include\opencv2\imgproc\imgproc.hpp>
#include <C:\Users\AM\Desktop\Project\opencv\build\include\opencv\cv.h>
#include <C:\Users\AM\Desktop\Project\opencv\build\include\opencv2\core\core.hpp>
#include <C:\Users\AM\Desktop\Project\opencv\build\include\opencv2\videostab\optical_flow.hpp>
#include <C:\Users\AM\Desktop\Project\opencv\build\include\opencv2\videostab\videostab.hpp>


#include <iostream>
#include <stdio.h>

 using namespace std;
 using namespace cv;

int numFaces;
int numEyes;

 /** Function Headers */
 void detectAndDisplay( Mat frame );
 void videoRecord ();

 /** Global variables */
 String face_cascade_name = "C:/Users/AM/Desktop/Project/opencv/data/haarcascades/haarcascade_frontalface_alt.xml";
 String eyes_cascade_name = "C:/Users/AM/Desktop/Project/opencv/data/haarcascades/haarcascade_eye_tree_eyeglasses.xml";

 CascadeClassifier face_cascade;
 CascadeClassifier eyes_cascade;
 string window_name = "Capture - Face detection";
 RNG rng(12345);

 VideoCapture capture;
 VideoWriter record;

 /** @function main */
 int main( int argc, const char** argv )
 {
  // CvCapture* capture;
   Mat frame;

   //-- 1. Load the cascades
   if( !face_cascade.load( face_cascade_name ) ){ printf("--(!)Error loading\n"); return -1; };
   if( !eyes_cascade.load( eyes_cascade_name ) ){ printf("--(!)Error loading\n"); return -1; };

   //-- 2. Read the video stream
   capture.open(0);// = cvCaptureFromCAM( -1 );

   if( capture.isOpened() )
   {
     while( true )
     {
       //frame = cvQueryFrame( capture );
       capture >> frame;

   //-- 3. Apply the classifier to the frame
       if( !frame.empty() )
       { 
           detectAndDisplay( frame ); 
          while (numEyes == 2)
           {
            videoRecord();
           }
       }
       else
       { printf(" --(!) No captured frame -- Break!"); break; }

         //pause for 33ms        
         if (waitKey(33) == 27) 
         break; 
       }
   } 
   return 0;
 }

/** @function detectAndDisplay */
void detectAndDisplay( Mat frame )
{
  std::vector<Rect> faces;
  Mat frame_gray;

  cvtColor( frame, frame_gray, CV_BGR2GRAY );
  equalizeHist( frame_gray, frame_gray );

  //-- Detect faces
  face_cascade.detectMultiScale( frame_gray, faces, 1.1, 2, 0|CV_HAAR_SCALE_IMAGE, Size(30, 30) );


  for( int i = 0; i < faces.size(); i++ )
  {
  //draw face
    Point center( faces[i].x + faces[i].width*0.5, faces[i].y + faces[i].height*0.5 );
    ellipse( frame, center, Size( faces[i].width*0.5, faces[i].height*0.5), 0, 0, 360, Scalar( 255, 0, 255 ), 4, 8, 0 );

    //get region of interest
    Mat faceROI = frame_gray( faces[i] );
    std::vector<Rect> eyes;

    //-- In each face, detect eyes
    eyes_cascade.detectMultiScale( faceROI, eyes, 1.1, 2, 0 |CV_HAAR_SCALE_IMAGE, Size(30, 30) );

    for ...
(more)
2013-08-25 11:09:56 -0600 asked a question How to create and record video once face and eyes are detected

*Hi

I am quite new to opencv and need to to detect intruder and record the video using opencv. I have got the source code for face and eye detection and writing video file but I dont know how to integrate them into one program such that capturing video file is started once it detects the face and eye of the intruder. Thank you very much in advance.

Below is the code to detect face and eyes

include <c:\users\am\desktop\project\opencv\build\include\opencv2\objdetect\objdetect.hpp>

include <c:\users\am\desktop\project\opencv\build\include\opencv2\highgui\highgui.hpp>

include <c:\users\am\desktop\project\opencv\build\include\opencv2\imgproc\imgproc.hpp>

include <iostream>

include <stdio.h>

using namespace std; using namespace cv;

/** Function Headers */ void detectAndDisplay( Mat frame );

/** Global variables */ String face_cascade_name = "haarcascade_frontalface_alt.xml"; String eyes_cascade_name = "haarcascade_eye_tree_eyeglasses.xml"; CascadeClassifier face_cascade; CascadeClassifier eyes_cascade; string window_name = "Capture - Face detection"; RNG rng(12345);

/* @function main */ int main( int argc, const char* argv ) { CvCapture* capture; Mat frame;

//-- 1. Load the cascades if( !face_cascade.load( face_cascade_name ) ){ printf("--(!)Error loading\n"); return -1; }; if( !eyes_cascade.load( eyes_cascade_name ) ){ printf("--(!)Error loading\n"); return -1; };

//-- 2. Read the video stream capture = cvCaptureFromCAM( -1 ); if( capture ) { while( true ) { frame = cvQueryFrame( capture );

//-- 3. Apply the classifier to the frame if( !frame.empty() ) { detectAndDisplay( frame ); } else { printf(" --(!) No captured frame -- Break!"); break; }

   //int c = waitKey(10);
   //if( (char)c == 'c' ) { break; }

   //pause for 33ms        
  if (waitKey(33) == 27) 
   break; 
  }

} return 0; }

/** @function detectAndDisplay */ void detectAndDisplay( Mat frame ) { std::vector<rect> faces; Mat frame_gray;

cvtColor( frame, frame_gray, CV_BGR2GRAY ); equalizeHist( frame_gray, frame_gray );

//-- Detect faces face_cascade.detectMultiScale( frame_gray, faces, 1.1, 2, 0|CV_HAAR_SCALE_IMAGE, Size(30, 30) );

for( int i = 0; i < faces.size(); i++ ) { Point center( faces[i].x + faces[i].width0.5, faces[i].y + faces[i].height0.5 ); ellipse( frame, center, Size( faces[i].width0.5, faces[i].height0.5), 0, 0, 360, Scalar( 255, 0, 255 ), 4, 8, 0 );

Mat faceROI = frame_gray( faces[i] );
std::vector<Rect> eyes;

//-- In each face, detect eyes
eyes_cascade.detectMultiScale( faceROI, eyes, 1.1, 2, 0 |CV_HAAR_SCALE_IMAGE, Size(30, 30) );

for( int j = 0; j < eyes.size(); j++ )
 {
   Point center( faces[i].x + eyes[j].x + eyes[j].width*0.5, faces[i].y + eyes[j].y + eyes[j].height*0.5 );
   int radius = cvRound( (eyes[j].width + eyes[j].height)*0.25 );
   circle( frame, center, radius, Scalar( 255, 0, 0 ), 4, 8, 0 );
 }

} //-- Show what you got imshow( window_name, frame );

}