Ask Your Question
0

How to count faces in the video?

asked 2016-04-19 03:27:40 -0600

Anje gravatar image

Hi, I'm Angel Jenifer. I'm a newbie to Image processing. As a part of my project I have to tell how many faces are detected in the video in real-time. I saw the sample code in the source and successfully implemented it. For example if there is three faces, it is well detected and shown inside a ellipse. And my question is how to calculate the no. of ellipse that formed or no.of faces in the video. I have to take it out as a text output. Would really appreciate your help. Thanks.

My code:

#include "opencv2/objdetect.hpp"
#include "opencv2/videoio.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/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";
CascadeClassifier face_cascade;
String window_name = "Capture - Face detection";

/** @function main */
int main(void)
{
VideoCapture capture;
Mat frame;

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

//-- 2. Read the video stream
capture.open(0);
if (!capture.isOpened()) { printf("--(!)Error opening video capture\n"); return -1; }

while (capture.read(frame))
{
    if (frame.empty())
    {
        printf(" --(!) No captured frame -- Break!");
        break;
    }

    //-- 3. Apply the classifier to the frame
    detectAndDisplay(frame);

    int c = waitKey(10);
    if ((char)c == 27) { break; } // escape
}
return 0;
   }

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

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

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

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

    Mat faceROI = frame_gray(faces[i]);

}
//-- Show what you got
imshow(window_name, frame);
    }
edit retag flag offensive close merge delete

Comments

Does it count faces unique? If it no do you think that is difficult?

nsyll gravatar imagensyll ( 2019-09-27 05:23:05 -0600 )edit

1 answer

Sort by ยป oldest newest most voted
3

answered 2016-04-19 11:03:12 -0600

Twinsy gravatar image

Hi!

from the part of: face_cascade.detectMultiScale(frame_gray, faces, .....) <<-- The faces vector contains all the detected faces. So faces.size() gives you the number of detected faces.

int detected_faces=faces.size();

That simple.

edit flag offensive delete link more

Comments

Thank you. I will try it.

Anje gravatar imageAnje ( 2016-04-27 22:49:09 -0600 )edit

Thank you. It worked really well. :)

Anje gravatar imageAnje ( 2016-04-27 22:59:05 -0600 )edit

hey anje can you provide the final code with the face count displayed and all ? thank you

deepmore gravatar imagedeepmore ( 2017-02-14 02:59:57 -0600 )edit

I am using java and by using faces.size() to get the count of number of faces it showing an error. What to do??

avanish gravatar imageavanish ( 2017-02-24 10:19:58 -0600 )edit

@Anje Please tell the way you followed with code.please , it will be helpful

mueez gravatar imagemueez ( 2018-03-21 09:32:11 -0600 )edit

Question Tools

1 follower

Stats

Asked: 2016-04-19 03:27:40 -0600

Seen: 1,042 times

Last updated: Apr 19 '16