检测到面部或多个面时触发cv2.imwrite

时间:2018-01-08 21:17:48

标签: python opencv ubuntu face-detection haar-classifier

在Ubuntu 16.04中,我试图检测实时视频中的面部并使用OpenCV和Python保存该图像。具体来说,我想在检测到每张脸部时只保存一张图像,直到我按下“q'”。因此,对于检测到的每个不同的面部,拍摄另一个图像。在下面的代码中,脚本每秒拍摄一张照片,直到我退出。

import cv2

# Import the cascade for face detection
face_cascade = cv2.CascadeClassifier('data/haarcascades/haarcascade_frontalface_default.xml')

# Access the webcam (every webcam has a number, the default is 0)
video = cv2.VideoCapture(0)

num = 0

while True:

# Capture frame-by-frame
    ret, frame = video.read()

# Detect faces in video
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray, 1.3, 5)

# Draw rectangles around faces
    for (x,y,w,h) in faces:
            cv2.rectangle(frame,(x,y),(x+w,y+h),(255,0,0),2)
            roi_gray = gray[y:y+h, x:x+w]
            roi_color = frame[y:y+h, x:x+w]
# Display the image
    cv2.imshow('Video', frame)
    for (x, y, w, h) in faces:
        cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)        
        cv2.imwrite('opencv'+str(num)+'.jpg',frame)
            num = num+1
# Press q for exit
    if cv2.waitKey(1) & 0xFF == ord('q'):
# Write frame in file

        break
video.release()
cv2.destroyAllWindows()

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

正如@Silencer评论的那样,答案取决于你与#34;不同的面孔相关联的含义"。

  1. 如果要将人脸实际识别为人物:一种可能性是实际创建检测到的人脸(或其特征)的数据库,然后将后续帧中的人脸与数据库中的人脸进行比较。在这种情况下,您需要一个执行面部识别的算法。 OpenCV和dlib都有用于此任务的库。

  2. 如果您只想为相机前面的每个外观拍摄一张照片:记录程序运行时检测到的第一组脸部的大小和位置,然后检查如果以下帧包含大小和位置相似的面(帧速率必须很高才能使其工作)。在这种情况下,您需要一种跟踪算法来正确匹配面。如果一张脸从场景中消失并稍后再次出现,它将再次被捕获。