python实现对人脸的实时监测

person 匿名

发布日期: 2020-10-14 10:56:38 浏览量: 37
评分:
star_border star_border star_border star_border star_border star_border star_border star_border star_border star_border
*转载请注明来自write-bug.com

使用python实现对人脸的实时监测并将人脸保存到本地文件夹下

1、先导入库。

【可能需要下载一下dlib包,注意一下版本是否对应】
#导入库 import cv2 import dlib import numpy as np

2、

`#定义脸部特征检测器
detector = dlib.getfrontal_face_detector() #得到人脸的正面
cap = cv2.VideoCapture(0) #0代表打开摄像头
frame_count = 0 #检测的帧数
face_count = 0 #每一帧检测的人脸数
margin = 0.2 # 边距比例
while True:
ret, frame = cap.read() #从摄像头获取的视频文件中读取第一帧
if (ret != True): #判断摄像头是否正常打开并读取视频
print(‘没有捕获到图像,请检查摄像头工作情况!’)
break
input_img = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) #BGR转为RGB
frame_count +=1 #帧数加一
img_h,img_w,
= np.shape(input_img) #获取图像的尺寸img_h:高,img_w:宽,第三个代表通道
detected = detector(frame,1)#对当前帧检测
faces = [] #存放当前帧中的脸部数量1代表的是上采样

  1. if len(detected) > 0: #当前帧检测到脸部,至少检测到一个
  2. for i, d in enumerate(detected): #enumerate枚举函数,一个个的进行检测
  3. face_count += 1#人脸数增加
  4. # 脸部图像坐标与尺寸,分别表示左上角坐标,右下角坐标,和长宽,加一代表的是:
  5. x1, y1, x2, y2, w, h = d.left(), d.top(), d.right() + 1, d.bottom() + 1, d.width(), d.height()
  6. # 用边距做调整
  7. #限制最小是0
  8. xw1 = max(int(x1 - margin * w), 0)
  9. yw1 = max(int(y1 - margin * h), 0)
  10. #img_w-1是:限制最大的就是img-1
  11. xw2 = min(int(x2 + margin * w), img_w - 1)
  12. yw2 = min(int(y2 + margin * h), img_h - 1);
  13. # 脸部图像坐标
  14. face = frame[yw1:yw2 + 1, xw1:xw2 + 1, :]#加一是为了保存边界
  15. file_name = "./dataset/valid/one/" + str(frame_count) +'_one'+str(i) + '.jpg'#文件路径
  16. cv2.imwrite(file_name,face)
  17. #绘制人脸边框
  18. cv2.rectangle(frame, (x1, y1), (x2, y2), (255, 0, 0), 2)
  19. #显示当前帧
  20. cv2.imshow("Face Detector", frame)
  21. # 按回车键终止视频检测
  22. if cv2.waitKey(1)&0xFF == 13: #1代表1ms,13代表回车键,27代表ESC键,ord('q')
  23. break

打印一下运行结果

print(‘已经完成了 {0} 帧检测,保存了 {1} 幅脸部图像’.format(frame_count, face_count))

关闭窗口关闭摄像头

cap.release()
cv2.destroyAllWindows()
`

上传的附件
eject