当前位置:   article > 正文

基于OpenCV和face_recognition的人脸识别_opencv人脸识别jupyternotebook

opencv人脸识别jupyternotebook

本代码是在OpenCV检测人脸的基础上,利用开源API:face_recognition实现人脸识别

技术实现相对CNN更简单,只需匹配对应人脸库即可,代码量少。

https://github.com/WhyEastOne/face-

  1. #################################识别视频或图片中的人脸##############################
  2. import os
  3. os.chdir('D:/DataCenter/AI/TRAIN/NetworkClass/face_detect_database/')
  4. import face_recognition
  5. ###############################################################################
  6. #读取文件夹下所有图片名
  7. known_path = 'D:/DataCenter/AI/TRAIN/NetworkClass/face_detect_database/data'
  8. #读取训练数据
  9. known_face_encodings = []
  10. labels = []
  11. def read_path(path_name):
  12. for dir_item in os.listdir(path_name):
  13. #从初始路径开始叠加,合并成可识别的操作路径
  14. full_path = os.path.abspath(os.path.join(path_name, dir_item))
  15. print(path_name)
  16. if os.path.isdir(full_path): #如果是文件夹,继续递归调用
  17. read_path(full_path)
  18. else: #文件
  19. if dir_item.endswith('.jpg') or dir_item.endswith('.png'):
  20. known_image = face_recognition.load_image_file(full_path)
  21. try:
  22. #读取图片进行编码
  23. known_encoding = face_recognition.face_encodings(known_image)[0]
  24. known_face_encodings.append(known_encoding)
  25. #图片标签
  26. labels.append(path_name.split("\\")[-1])
  27. except IndexError:#face_recognition.face_encodings(known_image)编码为空list
  28. continue
  29. return known_face_encodings,labels
  30. #加载已知图片数据
  31. known_face_encodings, labels = read_path(known_path)
  32. import cv2
  33. import sys
  34. import gc
  35. if __name__ == '__main__':
  36. if len(sys.argv) != 1:
  37. print("Usage:%s camera_id\r\n" % (sys.argv[0]))
  38. sys.exit(0)
  39. #框住人脸的矩形边框颜色
  40. color = (0, 255, 0)
  41. #捕获指定摄像头的实时视频流
  42. cap = cv2.VideoCapture(0)
  43. #人脸识别分类器本地存储路径
  44. cascade_path = "./haarcascade_frontalface_alt2.xml"
  45. #循环检测识别人脸
  46. while True:
  47. ret, frame = cap.read() #读取一帧视频
  48. if ret is True:
  49. #图像灰化,降低计算复杂度
  50. frame_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
  51. else:
  52. continue
  53. #使用人脸识别分类器,读入分类器
  54. cascade = cv2.CascadeClassifier(cascade_path)
  55. #利用分类器识别出哪个区域为人脸
  56. faceRects = cascade.detectMultiScale(frame_gray, scaleFactor = 1.2, minNeighbors = 3, minSize = (32, 32))
  57. if len(faceRects) > 0:
  58. for faceRect in faceRects:
  59. x, y, w, h = faceRect
  60. #截取脸部图像提交给模型识别这是谁
  61. image = frame[y - 10: y + h + 10, x - 10: x + w + 10]
  62. try:
  63. unknown_encoding = face_recognition.face_encodings(image)[0]
  64. except IndexError:#face_recognition.face_encodings(known_image)编码为空list
  65. continue
  66. results = face_recognition.compare_faces(known_face_encodings, unknown_encoding )
  67. cv2.rectangle(frame, (x - 10, y - 10), (x + w + 10, y + h + 10), color, thickness = 2)
  68. label = 'unkonwn' #初始化为未知
  69. for i in range(0, len(results)):
  70. if results[i] == True:
  71. label = labels[i] #若是匹配成功,赋值为该标签
  72. break
  73. #文字提示是谁
  74. cv2.putText(frame,'%s'%label,
  75. (x + 30, y + 30), #坐标
  76. cv2.FONT_HERSHEY_SIMPLEX, #字体
  77. 1, #字号
  78. (255,0,255), #颜色
  79. 2)
  80. cv2.imshow("Recognize Me !!!", frame) #不要出现中文,否则窗口标题显示为乱码
  81. #等待10毫秒看是否有按键输入
  82. k = cv2.waitKey(120)
  83. #如果输入q则退出循环
  84. if k & 0xFF == ord('q'):
  85. break
  86. #释放摄像头并销毁所有窗口
  87. cap.release()
  88. cv2.destroyAllWindows()

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/爱喝兽奶帝天荒/article/detail/945781
推荐阅读
相关标签
  

闽ICP备14008679号