如何在视频中查看裁剪的脸部

时间:2018-05-14 07:47:58

标签: python opencv face-detection

我已成功检测到脸部,将裁剪的脸部保存在文件夹中。然后使用cv2.puttext查看视频中检测到的面部总数。

现在我想在视频中显示每个裁剪的脸部,就像我显示总数一样。

代码如下:

import numpy as np
import cv2
import time
from time import strftime

num = 0
total = 0


face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

cap = cv2.VideoCapture(0)
previous_millis = 0

while 1:
    ret, img = cap.read()
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

    font = cv2.FONT_HERSHEY_SIMPLEX
    cv2.putText(img,'Person Count Algorithm',(10,50), font, 1,(255,0,0),2,cv2.LINE_AA)

    S1=int(strftime("%S"))
    #print "timing" 
    #print(S1)

    millis = int(round(time.time() * 5000)) 
    interval = 2000
    #print(millis) 
    if(int(millis-previous_millis) >= interval):
            previous_millis = millis
        faces = face_cascade.detectMultiScale(gray, 1.3, 5)
        #time.sleep(2)

        for (x,y,w,h) in faces:
        cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
        roi_gray = gray[y:y+h, x:x+w]
        roi_color = img[y:y+h, x:x+w]
        cv2.putText(img, 'person', (x,y-10), cv2.FONT_HERSHEY_SIMPLEX, 1.5, (255,0,0), 2)
            cv2.imwrite('crop_faces/crop'+str(num)+'.jpg',roi_color)
                num = num + 1
        print ("FOUND", len(faces), 'PERSON')
        total += len(faces)
        print ('Total Count:', (total))

    font = cv2.FONT_HERSHEY_SIMPLEX
    img = cv2.circle(img, (470, 63), 63, (255,0,0), 3)
    cv2.putText(img, 'Total Count:', (420,40), font, 0.5,(255,0,0),1,cv2.LINE_AA)
    cv2.putText(img, str(total), (436,100), font, 2,(255,0,0),2,cv2.LINE_AA)


    cv2.imshow('image',img)
    k = cv2.waitKey(1) & 0xff
    if k == 27:
        break


cap.release()
cv2.destroyAllWindows()

1 个答案:

答案 0 :(得分:0)

  • 制作一个空的面孔列表。 faces = []
  • 制作裁剪脸部的副本。 face = numpy.copy(img[y:y+h,x:x+w])
  • 将面部大小调整为固定的缩略图大小。让我们调用固定大小face_width, face_height
  • face列表中附加facesfaces.append(face)。确保列表中不存在裁剪的面部。
  • 在图像上选择一个点,即px=0, py=0。将所有面从列表复制到从px,py开始的图像。 img[py:py+face_height,px:px+face_width] = faces[0] ...