• 人脸识别系统——Face recognition 人脸识别


    第1关:人脸检测

    1. '''****************BEGIN****************'''
    2. import face_recognition
    3. image_path = './step1/image/children.jpg'
    4. image = face_recognition.load_image_file(image_path)
    5. face_locations = face_recognition.face_locations(image)
    6. print(face_locations)
    7. '''**************** END ****************'''
    8. import cv2
    9. for face_location in face_locations:
    10. '''****************BEGIN****************'''
    11. top, right, bottom, left = face_location
    12. cv2.rectangle(image, (left, top), (right, bottom), (0, 255, 0), 2)
    13. '''**************** END ****************'''
    14. # 保存图片
    15. image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
    16. cv2.imwrite("./step1/out/children.jpg", image_rgb)

    第2关:人脸特征点获取

    1. import face_recognition
    2. '''****************BEGIN****************'''
    3. # 获取人脸特征点
    4. image = face_recognition.load_image_file("./step2/image/laugh.jpg")
    5. face_landmarks_list = face_recognition.face_landmarks(image)
    6. print(face_landmarks_list)
    7. '''**************** END ****************'''
    8. import cv2
    9. # 绘制人脸特征点
    10. for face_landmarks in face_landmarks_list:
    11. '''****************BEGIN****************'''
    12. for facial_feature in face_landmarks.keys():
    13. for pt_pos in face_landmarks[facial_feature]:
    14. cv2.circle(image, pt_pos, 1, (255, 0, 0), 2)
    15. '''**************** END ****************'''
    16. # 保存图片
    17. image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
    18. cv2.imwrite("./step2/out/laugh.jpg", image_rgb)

    第3关:人脸识别

    1. import face_recognition
    2. def recognition():
    3. '''****************BEGIN****************'''
    4. # 导入图片
    5. known_image_path = "./step3/known_image/cyx1.jpg"
    6. known_image_cyz = face_recognition.load_image_file(known_image_path)
    7. unknown_image_1_path = "./step3/unknown_image/cyx2.jpg"
    8. unknown_image_2_path = "./step3/unknown_image/wlh.jpg"
    9. unknown_image_1 = face_recognition.load_image_file(unknown_image_1_path)
    10. unknown_image_2 = face_recognition.load_image_file(unknown_image_2_path)
    11. '''**************** END ****************'''
    12. '''****************BEGIN****************'''
    13. # 编码获取128维特征向量
    14. cyz_encoding = face_recognition.face_encodings(known_image_cyz)[0]
    15. unknown_encoding_1 = face_recognition.face_encodings(unknown_image_1)[0]
    16. unknown_encoding_2 = face_recognition.face_encodings(unknown_image_2)[0]
    17. '''**************** END ****************'''
    18. '''****************BEGIN****************'''
    19. # 比较特征向量值,识别人脸
    20. face1_result = face_recognition.compare_faces([cyz_encoding], unknown_encoding_1, tolerance=0.5)
    21. face2_result = face_recognition.compare_faces([cyz_encoding], unknown_encoding_2, tolerance=0.5)
    22. '''**************** END ****************'''
    23. return face1_result, face2_result

    第4关:人脸识别绘制并展示

    1. import face_recognition
    2. import cv2
    3. '''****************BEGIN****************'''
    4. # 加载已知图片
    5. known_image_c_path = "./step4/known_image/Caocao.jpg"
    6. known_image_xy_path = "./step4/known_image/XunYu.jpg"
    7. known_image_smy_path = "./step4/known_image/SiMayi.jpg"
    8. known_image_zch_path = "./step4/known_image/ZhangChunhua.jpg"
    9. known_image_cc = face_recognition.load_image_file(known_image_c_path)
    10. known_image_xy = face_recognition.load_image_file(known_image_xy_path)
    11. known_image_smy = face_recognition.load_image_file(known_image_smy_path )
    12. known_image_zch = face_recognition.load_image_file( known_image_zch_path)
    13. '''**************** END ****************'''
    14. '''****************BEGIN****************'''
    15. # 对图片进行编码,获取128维特征向量
    16. caocao_encoding = face_recognition.face_encodings(known_image_cc)[0]
    17. xy_encoding = face_recognition.face_encodings(known_image_xy)[0]
    18. zys_encoding = face_recognition.face_encodings(known_image_smy)[0]
    19. cyz_encoding = face_recognition.face_encodings(known_image_zch)[0]
    20. '''**************** END ****************'''
    21. '''****************BEGIN****************'''
    22. # 存为数组以便之后识别
    23. known_faces = [
    24. caocao_encoding,
    25. xy_encoding,
    26. zys_encoding,
    27. cyz_encoding
    28. ]
    29. '''**************** END ****************'''
    30. '''****************BEGIN****************'''
    31. # 加载待识别图片
    32. unknown_image_1_path = "./step4/unknown_image/Caocao.jpg"
    33. unknown_image_2_path = "./step4/unknown_image/Cuple.jpg"
    34. unknown_image_3_path = "./step4/unknown_image/ZhangChunhua.jpg"
    35. unknown_image_4_path = "./step4/unknown_image/XunYu.jpg"
    36. unknown_image_5_path = './step4/unknown_image/A.jpg'
    37. unknown_image_1 = face_recognition.load_image_file(unknown_image_1_path)
    38. unknown_image_2 = face_recognition.load_image_file(unknown_image_2_path)
    39. unknown_image_3 = face_recognition.load_image_file(unknown_image_3_path)
    40. unknown_image_4 = face_recognition.load_image_file(unknown_image_4_path)
    41. unknown_image_5 = face_recognition.load_image_file(unknown_image_5_path)
    42. '''**************** END ****************'''
    43. '''****************BEGIN****************'''
    44. # 存为数组以遍历识别
    45. unknown_faces = [
    46. unknown_image_1,
    47. unknown_image_2,
    48. unknown_image_3,
    49. unknown_image_4,
    50. unknown_image_5
    51. ]
    52. '''**************** END ****************'''
    53. # 初始化一些变量
    54. face_locations = []
    55. face_encodings = []
    56. face_names = []
    57. frame_number = 0
    58. for frame in unknown_faces:
    59. face_names = []
    60. '''****************BEGIN****************'''
    61. face_locations = face_recognition.face_locations(frame)
    62. # 对图片进行编码,获取128维特征向量
    63. face_encodings = face_recognition.face_encodings(frame, face_locations)
    64. '''**************** END ****************'''
    65. for face_encoding in face_encodings:
    66. '''****************BEGIN****************'''
    67. # 识别图片中人脸是否匹配已知图片
    68. match = face_recognition.compare_faces(
    69. known_faces, face_encoding, tolerance=0.5)
    70. '''**************** END ****************'''
    71. '''****************BEGIN****************'''
    72. name = None
    73. if match[0]:
    74. name = "Caocao"
    75. elif match[1]:
    76. name = "XunYu"
    77. elif match[2]:
    78. name = "SiMayi"
    79. elif match[3]:
    80. name = 'ZhangChunhua'
    81. else:
    82. name = 'Unknown'
    83. '''**************** END ****************'''
    84. face_names.append(name)
    85. # 结果打上标签
    86. for (top, right, bottom, left), name in zip(face_locations, face_names):
    87. if not name:
    88. continue
    89. '''****************BEGIN****************'''
    90. # 绘制脸部区域框
    91. # 绘制脸部区域框
    92. cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2)
    93. # 在脸部区域下面绘制人名
    94. cv2.rectangle(frame, (left, bottom - 25),
    95. (right, bottom), (0, 0, 255), cv2.FILLED)
    96. font = cv2.FONT_HERSHEY_DUPLEX
    97. cv2.putText(frame, name, (left + 6, bottom - 6),
    98. font, 0.5, (255, 255, 255), 1)
    99. '''**************** END ****************'''
    100. print(frame[left+6, bottom-6])
    101. print(frame[left, bottom])
    102. print(face_locations)
    103. print(face_names)
    104. # 保存图片
    105. image_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    106. path = './step4/out/' + name + str(face_locations[0][0]) + '.jpg'
    107. cv2.imwrite(path, image_rgb)

  • 相关阅读:
    bootz启动 Linux内核涉及 bootm_os_get_boot_func 函数
    监控——前端性能监控方案
    【C语言】扫雷小游戏(保姆教程)
    JVM内存模型
    车载u盘支持什么格式音乐?怎么把音乐转成MP3格式?
    信息安全等级保护的5个级别分别是什么?最高级别是哪个?
    Linux 网络编程 TCP/UDP编程
    软件工程与计算总结(一)软件工程基础
    kernel-4.0 定时器使用问题在kernel-4.19上纠正
    flume数据无法发送
  • 原文地址:https://blog.csdn.net/ros275229/article/details/134517508