python实现对人脸的实时监测

Kingbecameadragon

发布日期: 2020-10-14 14:36:47 浏览量: 76
评分:
star star star star star star star star star star_border
*转载请注明来自write-bug.com

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

1、先导入库

【可能需要下载一下dlib包,注意一下版本是否对应】

  1. #导入库
  2. import cv2 import dlib import numpy as np

2、开始编写

  1. #定义脸部特征检测器
  2. detector = dlib.getfrontal_face_detector() #得到人脸的正面
  3. cap = cv2.VideoCapture(0) #0代表打开摄像头
  4. frame_count = 0 #检测的帧数
  5. face_count = 0 #每一帧检测的人脸数
  6. margin = 0.2 # 边距比例
  7. while True:
  8. ret, frame = cap.read() #从摄像头获取的视频文件中读取第一帧
  9. if (ret != True): #判断摄像头是否正常打开并读取视频
  10. print(‘没有捕获到图像,请检查摄像头工作情况!’)
  11. break
  12. input_img = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) #BGR转为RGB
  13. frame_count +=1 #帧数加一
  14. img_h,img_w, = np.shape(input_img) #获取图像的尺寸img_h:高,img_w:宽,第三个代表通道
  15. detected = detector(frame,1)#对当前帧检测
  16. faces = [] #存放当前帧中的脸部数量1代表的是上采样
  17. if len(detected) > 0: #当前帧检测到脸部,至少检测到一个
  18. for i, d in enumerate(detected): #enumerate枚举函数,一个个的进行检测
  19. face_count += 1#人脸数增加
  20. # 脸部图像坐标与尺寸,分别表示左上角坐标,右下角坐标,和长宽,加一代表的是:
  21. x1, y1, x2, y2, w, h = d.left(), d.top(), d.right() + 1, d.bottom() + 1, d.width(), d.height()
  22. # 用边距做调整
  23. #限制最小是0
  24. xw1 = max(int(x1 - margin * w), 0)
  25. yw1 = max(int(y1 - margin * h), 0)
  26. #img_w-1是:限制最大的就是img-1
  27. xw2 = min(int(x2 + margin * w), img_w - 1)
  28. yw2 = min(int(y2 + margin * h), img_h - 1);
  29. # 脸部图像坐标
  30. face = frame[yw1:yw2 + 1, xw1:xw2 + 1, :]#加一是为了保存边界
  31. file_name = "./dataset/valid/one/" + str(frame_count) +'_one'+str(i) + '.jpg'#文件路径
  32. cv2.imwrite(file_name,face)
  33. #绘制人脸边框
  34. cv2.rectangle(frame, (x1, y1), (x2, y2), (255, 0, 0), 2)
  35. #显示当前帧
  36. cv2.imshow("Face Detector", frame)
  37. # 按回车键终止视频检测
  38. if cv2.waitKey(1)&0xFF == 13: #1代表1ms,13代表回车键,27代表ESC键,ord('q')
  39. break

3、打印运行结果

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

4、关闭摄像头和窗口

  1. cap.release()
  2. cv2.destroyAllWindows()
上传的附件

发送私信

4
文章数
0
评论数
最近文章
eject