当前位置:   article > 正文

基于CV2人脸识别_人脸识别 cv2

人脸识别 cv2
  1. #引入模块
  2. import face_recognition as fr
  3. import cv2
  4. import numpy as np
  5. import os
  6. import time
  7. begin_time=time.time()
  8. path = "./train1/"
  9. #创建 2 个列表来存储图像(人员)的名称及其各自的脸编码。
  10. known_names = []
  11. known_name_encodings = []
  12. #os.listdir()获取指定文件夹中的所有文件和子文件夹名称组成的列表
  13. images = os.listdir(path)
  14. #人脸编码是一种值的矢量,它代表着脸部特征之间的重要度量,如眼睛之间的距离、额头
  15. 的宽度等。
  16. #循环遍历目录中的每个图像,提取图像中的人的姓名,计算其脸编码向量,并将信息存储
  17. 在相应的列表中。
  18. #遍历路径下的所有照片
  19. for _ in images:
  20. image = fr.load_image_file(path + _)
  21. image_path = path + _
  22. encoding = fr.face_encodings(image)[0]
  23. known_name_encodings.append(encoding)
  24. known_names.append(os.path.splitext(os.path.basename(image_path))[0].capitalize())
  25. #capitalize()方法返回一个首字母大写的字符串。
  26. print(known_names)
  27. #在测试训练集中测试 face1.jpg 模型
  28. test_image = "./test1/face1.jpg"
  29. image = cv2.imread(test_image)
  30. #image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)#灰度照片
  31. #人脸识别库提供了一种名为 Face_Locations()的方法
  32. #它定位图像中检测到的每个人脸的坐标(左、下、右、上),使用这些位置值找到脸编码
  33. face_locations = fr.face_locations(image)
  34. face_encodings = fr.face_encodings(image, face_locations)
  35. #zip()函数用于将可迭代的对象中对应元素打包成一个个元组,返回元组组成的列表
  36. for (top, right, bottom, left), face_encoding in zip(face_locations, face_encodings):
  37. matches = fr.compare_faces(known_name_encodings, face_encoding)
  38. name = ""
  39. #numpy.argmin 表示最小值在数组中所在的位置。
  40. #当 face_distances 最小时,该人脸编码在数组位置数,也就可以得到最匹配人的对应姓名。
  41. face_distances = fr.face_distance(known_name_encodings, face_encoding)
  42. #最小差距(误差最小值)保留两位小数
  43. fd_min=round(min(face_distances),2)
  44. best_match = np.argmin(face_distances)
  45. #判断
  46. if matches[best_match]:
  47. name = known_names[best_match]
  48. #绘制矩阵 cv2.rectangle()
  49. cv2.rectangle(image, (left, top), (right, bottom), (0, 0, 255), 2)
  50. cv2.rectangle(image, (left, bottom - 15), (right, bottom), (0, 0, 255), cv2.FILLED)
  51. #字体效果
  52. font = cv2.FONT_HERSHEY_DUPLEX
  53. #文字输出(图片,添加文字,位置,字体类型,字体大小,字体颜色,字体粗细)
  54. cv2.putText(image, name+str(fd_min), (left + 4, bottom - 4), font, 0.3, (255, 255, 255), 1)
  55. end_time=time.time()
  56. run_time=end_time-begin_time
  57. print("识别用时:",run_time)
  58. #展示结果图片
  59. cv2.imshow("Result", image)
  60. #保存结果
  61. cv2.imwrite("./output.jpg", image)
  62. cv2.waitKey(0)
  63. cv2.destroyAllWindows()

 测试图片:

测试结果:

 

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

闽ICP备14008679号