飞道的博客

python3.8动态人脸识别

598人阅读  评论(0)

一、准备依赖库


  
  1. pip install dlib
  2. pip python-opencv

二、代码实现 


  
  1. #coding: utf-8
  2. "" "
  3. 从视屏中识别人脸,并实时标出面部特征点
  4. " ""
  5. import dlib #人脸识别的库dlib
  6. import cv2 #图像处理的库OpenCv
  7. # 使用特征提取器get_frontal_face_detector
  8. detector = dlib.get_frontal_face_detector()
  9. # 读入视频文件
  10. # cap = cv2.VideoCapture( "row.MP4")
  11. #建cv2摄像头对象,这里使用电脑自带摄像头,如果接了外部摄像头,则自动切换到外部摄像头
  12. cap = cv2.VideoCapture( 0)
  13. # 设置视频参数,propId设置的视频参数,value设置的参数值
  14. cap. set( 3, 480)
  15. # 截图screenshoot的计数器
  16. cnt = 0
  17. # cap.isOpened() 返回 true/ false 检查初始化是否成功
  18. while(cap.isOpened()):
  19. # cap.read()
  20. # 返回两个值:
  21. # 一个布尔值 true/ false,用来判断读取视频是否成功/是否到视频末尾
  22. # 图像对象,图像的三维矩阵
  23. flag, im_rd = cap.read()
  24. # 每帧数据延时 1ms,延时为 0读取的是静态帧
  25. k = cv2.waitKey( 1)
  26. # 取灰度
  27. img_gray = cv2.cvtColor(im_rd, cv2.COLOR_RGB2GRAY)
  28. # 使用人脸检测器检测每一帧图像中的人脸。并返回人脸数rects
  29. faces = detector(img_gray, 0)
  30. # 待会要显示在屏幕上的字体
  31. font = cv2.FONT_HERSHEY_SIMPLEX
  32. # 如果检测到人脸
  33. if(len(faces)!= 0):
  34. # 对每个人脸都画出框框
  35. for i in range(len(faces)):
  36. # enumerate方法同时返回数据对象的索引和数据,k为索引,d为faces中的对象
  37. for k, d in enumerate(faces):
  38. # 用红色矩形框出人脸
  39. cv2.rectangle(im_rd, (d.left(), d.top()), (d.right(), d.bottom()), ( 0, 255, 0), 2)
  40. # 计算人脸热别框边长
  41. face_width = d.right() - d.left()
  42. #在上方显示文字
  43. cv2.putText(im_rd, str(face_width) , (d.left(), d.top() -20), font, 0.5, ( 255, 0, 0), 1)
  44. # 标出人脸数
  45. cv2.putText(im_rd, "Faces: "+str(len(faces)), ( 20, 50), font, 1, ( 0, 0, 255), 1, cv2.LINE_AA)
  46. else:
  47. # 没有检测到人脸
  48. cv2.putText(im_rd, "No Face", ( 20, 50), font, 1, ( 0, 0, 255), 1, cv2.LINE_AA)
  49. # 添加说明
  50. im_rd = cv2.putText(im_rd, "S: screenshot", ( 20, 400), font, 0.8, ( 0, 0, 255), 1, cv2.LINE_AA)
  51. im_rd = cv2.putText(im_rd, "Q: quit", ( 20, 450), font, 0.8, ( 0, 0, 255), 1, cv2.LINE_AA)
  52. #检测按键
  53. k = cv2.waitKey( 1)
  54. # 按下s键截图保存
  55. if (k == ord( 's')):
  56. cnt+= 1
  57. cv2.imwrite( "screenshoot"+str(cnt)+ ".jpg", im_rd)
  58. # 按下q键退出
  59. if(k == ord( 'q')):
  60. break
  61. # 窗口显示
  62. cv2.imshow( "camera", im_rd)
  63. # 释放摄像头
  64. cap.release()
  65. # 删除建立的窗口
  66. cv2.destroyAllWindows()

三、实验结果


转载:https://blog.csdn.net/seek97/article/details/108686434
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场