【问题标题】:Trigger cv2.imwrite when a face or multiple faces are detected检测到一张或多张脸时触发 cv2.imwrite
【发布时间】:2018-06-17 21:32:42
【问题描述】:

在 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()

有什么建议吗?

【问题讨论】:

  • 你说So for each different face that is detected, another picture of it, is taken. 这是什么意思?每个人脸一张人脸图像,还是一张带有人脸标签的整张图像?而cv2.waitKey(1) 不会等待1 second
  • @Silencer 每一张脸检测到一张完整的图像,没有剪切,如果同一张脸再次出现也没关系。所以,这个人出现了,拍一张快照。在此人从视频中消失之前不要再拍照,但前提是另一个人与此人一起出现或当然单独出现。我不确定这是否足够精确?我应该描述更多吗?

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


【解决方案1】:

正如@Silencer 评论的那样,答案取决于您与“不同面孔”相关联的含义。

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

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

【讨论】:

  • 没有任何已知面孔的数据库。检测到人脸时触发完整快照。如果另一个来,再次触发。只需拍一张照片,直到这张照片留在场景中。如果另一个人与第一个人一起出现或单独出现,请继续拍照。我希望这更清楚一点。谢谢!
  • 在这种情况下,第二个选项很好。您在上面发布的代码可以在不太旧的桌面上以 12 帧/秒的速度运行,因此应该很容易检查当前帧中的人脸框是否与前一帧中的人脸框有 50% 或更多的重叠。在那种情况下,它不是新面孔。
  • 我会试着弄清楚这一点。谢谢!
猜你喜欢
  • 2020-04-21
  • 1970-01-01
  • 2020-10-24
  • 1970-01-01
  • 2019-12-03
  • 2020-01-26
  • 1970-01-01
  • 2012-09-21
  • 2017-12-22
相关资源
最近更新 更多