Search code examples
pythonopencvimage-processingfacial-identification

How can i captured detected images of face in opencv to make a database?


I am trying to enroll the faces of the user in opencv for facial recognition. I have finihed the detection part but what i wanted to achieve is to save the detected faces.So basically waht i wanted to achieve is : when i see in the webcam it automatically capture 20-30 or n no images and saves it locally.

Currently i am trying to simply save 1 image when clicked some key ,The program runs fine but nothing saves locally.Here is the code

import cv2
import os
cascade = cv2.CascadeClassifier("../haar-cascade-files-master/haar-cascade-files-master/haarcascade_frontalface_alt2.xml")
cap = cv2.VideoCapture(0)
while True:
    ret,frame = cap.read(0)
#     gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
    faces = cascade.detectMultiScale(frame,1.1,5)
    orig = frame.copy()
    for (x,y,w,h) in faces:
        cv2.rectangle(frame,(x,y),(x+w,y+h),(255,255,0),4)
    cv2.imshow("Video ",frame)
    if cv2.waitKey(2) & 0xFF == 27:
        break
    elif cv2.waitKey(2) & 0xFF == ord('s'):
        faceimg=frame[y:y+h,x:x+w]
        cv2.imwrite("../images/facec.jpeg",faceimg)
#     cv2.imshow("Crop Image",faceimg)
cap.release()
cv2.destroyAllWindows()

So whats wrong in the code and how can i save n no of images automatically.


Solution

  • If only one person is looking at the camera in a given scenario, you can use a counter.

    N = 20
    cnt = 0
    while True:
        ...
        ...
        # If the frame contains only one face
        for (x,y,w,h) in faces:
            cv2.rectangle(frame,(x,y),(x+w,y+h),(255,255,0),4)
            faceimg=frame[y:y+h,x:x+w]
            cv2.imwrite("../images/face_"+str(cnt)+".jpeg",faceimg)
        cnt = cnt + 1
        if cnt == N:
            cnt = 0
        ...
        ...