赞
踩
- #引入模块
- import face_recognition as fr
- import cv2
- import numpy as np
- import os
- import time
- begin_time=time.time()
- path = "./train1/"
- #创建 2 个列表来存储图像(人员)的名称及其各自的脸编码。
- known_names = []
- known_name_encodings = []
- #os.listdir()获取指定文件夹中的所有文件和子文件夹名称组成的列表
- images = os.listdir(path)
- #人脸编码是一种值的矢量,它代表着脸部特征之间的重要度量,如眼睛之间的距离、额头
- 的宽度等。
- #循环遍历目录中的每个图像,提取图像中的人的姓名,计算其脸编码向量,并将信息存储
- 在相应的列表中。
- #遍历路径下的所有照片
- for _ in images:
- image = fr.load_image_file(path + _)
- image_path = path + _
- encoding = fr.face_encodings(image)[0]
- known_name_encodings.append(encoding)
- known_names.append(os.path.splitext(os.path.basename(image_path))[0].capitalize())
- #capitalize()方法返回一个首字母大写的字符串。
- print(known_names)
- #在测试训练集中测试 face1.jpg 模型
- test_image = "./test1/face1.jpg"
- image = cv2.imread(test_image)
- #image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)#灰度照片
- #人脸识别库提供了一种名为 Face_Locations()的方法
- #它定位图像中检测到的每个人脸的坐标(左、下、右、上),使用这些位置值找到脸编码
- face_locations = fr.face_locations(image)
- face_encodings = fr.face_encodings(image, face_locations)
- #zip()函数用于将可迭代的对象中对应元素打包成一个个元组,返回元组组成的列表
- for (top, right, bottom, left), face_encoding in zip(face_locations, face_encodings):
- matches = fr.compare_faces(known_name_encodings, face_encoding)
- name = ""
- #numpy.argmin 表示最小值在数组中所在的位置。
- #当 face_distances 最小时,该人脸编码在数组位置数,也就可以得到最匹配人的对应姓名。
- face_distances = fr.face_distance(known_name_encodings, face_encoding)
- #最小差距(误差最小值)保留两位小数
- fd_min=round(min(face_distances),2)
- best_match = np.argmin(face_distances)
- #判断
- if matches[best_match]:
- name = known_names[best_match]
- #绘制矩阵 cv2.rectangle()
- cv2.rectangle(image, (left, top), (right, bottom), (0, 0, 255), 2)
- cv2.rectangle(image, (left, bottom - 15), (right, bottom), (0, 0, 255), cv2.FILLED)
- #字体效果
- font = cv2.FONT_HERSHEY_DUPLEX
- #文字输出(图片,添加文字,位置,字体类型,字体大小,字体颜色,字体粗细)
- cv2.putText(image, name+str(fd_min), (left + 4, bottom - 4), font, 0.3, (255, 255, 255), 1)
- end_time=time.time()
- run_time=end_time-begin_time
- print("识别用时:",run_time)
- #展示结果图片
- cv2.imshow("Result", image)
- #保存结果
- cv2.imwrite("./output.jpg", image)
- cv2.waitKey(0)
- cv2.destroyAllWindows()
测试图片:
测试结果:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。