Ask Your Question
-1

How to count the number of faces detected in live video by openCV using python?

asked 2017-03-25 07:54:01 -0600

Kevin123 gravatar image

updated 2017-03-27 09:49:31 -0600

I need to count the number of faces in a video taken from webcam.For example,if I am standing in front of the camera then count=1,now if any other person is detected then count=2,if another person is detected then the count should be 3.

This is the code:

import cv2
import sys

cascPath = sys.argv[1]

faceCascade = cv2.CascadeClassifier(cascPath)

video_capture = cv2.VideoCapture(0)

while True:
    # Capture frame-by-frame

ret, frame = video_capture.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

faces = faceCascade.detectMultiScale(
    gray,
    scaleFactor=1.1,
    minNeighbors=5,
    minSize=(30, 30),
    flags=cv2.cv.CV_HAAR_SCALE_IMAGE
)

# Draw a rectangle around the faces
for (x, y, w, h) in faces:
    cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)

# Display the resulting frame
cv2.imshow('Video', frame)

if cv2.waitKey(1) & 0xFF == ord('q'):
    break

video_capture.release()

cv2.destroyAllWindows()

I am using frontal_face_haarcascade.xml by opencv in python. I can detect faces in frame and then increase the count, but what's happening is that the count is increasing as the number of frames.So, even if 1 person was detected standing for 10 sec, it shows count as some '67'

How can I overcome this problem.

edit retag flag offensive close merge delete

Comments

are you looking for the number of unique faces encountered in the video ?

(then, face detection alone won't solve your problem)

berak gravatar imageberak ( 2017-04-12 19:41:23 -0600 )edit

Since you are only talking about detection, it can simply be done by using a decent face detector and returning detections.size() considering you have a vector<Rect> that stores the output of detectMultiScale. If you want unique IDs, you will have to create a feature representation of each face, calculate a similarity threshold. Once above, a new face is added, else you match it to one already in your database.

StevenPuttemans gravatar imageStevenPuttemans ( 2017-04-14 07:17:42 -0600 )edit

1 answer

Sort by ยป oldest newest most voted
-1

answered 2017-04-12 15:01:49 -0600

ManuVISION gravatar image

For that you need to track all the detected faces in each frame and add new ones that are found. Then you need an efficient counting algorithm to count the tracked vectors. Not an easy thing which can be done if few days

edit flag offensive delete link more

Question Tools

1 follower

Stats

Asked: 2017-03-25 07:54:01 -0600

Seen: 3,905 times

Last updated: Apr 12 '17