人脸识别是人工智能领域中深度学习技术取得显著成功的一个分支。在过去十年中,顶尖的人脸识别系统已经能够以与人类相同甚至更高的精度在图像和视频中识别人脸。人脸识别的基本阶段包括人脸验证和识别。本文将介绍人脸识别系统中的数据库构建,以及如何从视频和图片中提取人脸数据,并将其添加到数据库中。
在构建人脸识别数据库时,需要考虑存储哪些信息。一般来说,需要在数据库中存储人的标识符(例如,他们的名字)和他们的面部特征,这些特征可以与另一张脸的特征进行比较,以评估相似度。在大多数实际的人脸识别系统中,面部特征被称为嵌入向量(embeddings),这些嵌入向量是通过深度神经网络(DNN)模型从人脸图像中提取出来的。
为了保持系统的通用性和简单性,将使用一个非常简单的数据库结构。它将由一个包含PNG格式人脸图像的文件夹表示,每个人一张图像。文件将以人的标识符(名字)命名。每个人的图像将包含从图片中提取的对齐的人脸。当使用数据库进行面部识别时,将实时提取嵌入向量。可以使用相同的数据库与不同的DNN模型。
有两种获取人脸数据的选项:从视频和从图像。已经拥有从视频中提取人脸数据的代码。可以按照以下方式运行人脸检测器:
d = MTCNN_Detector(50, 0.95)
vd = VideoFD(d)
v_file = r"C:\PI_FR\video\5_3.mp4"
save_path = r"C:\PI_FR\detect"
(f_count, fps) = vd.detect(v_file, save_path, True, False)
print("Face detections: " + str(f_count))
print("FPS: " + str(fps))
注意,save_path
参数的值是存储所有提取人脸的文件夹。align
参数设置为True
,因为人脸必须对齐;draw_keypoints
参数设置为False
,因为不想存储面部标记点。
当过程完成后,可以选择每个想要添加到数据库中的人的特定人脸样本。以下是从五个测试视频中提取并保存到数据库中的五个人的人脸样本。
故意没有将视频中出现的一些人添加到数据库中。这些将用于测试视频中未知人类的识别模型。
让编写Python代码,从图像中提取人脸并将其添加到数据库中:
from matplotlib import pyplot as plt
fa = Face_Align_Mouth(160)
db_path = r"C:\PI_FR\db"
align = True
p_name = "Woman05"
f_file = r"C:\PI_FR\faces\CF0055_1100_00F.jpg"
fimg = cv2.imread(f_file, cv2.IMREAD_UNCHANGED)
faces = d.detect(fimg)
r_file = os.path.join(db_path, p_name + ".png")
face = faces[0]
if align:
(f_cropped, f_img) = fa.align(fimg, face)
else:
(f_cropped, f_img) = d.extract(fimg, face)
if (not f_img is None) and (not f_img.size == 0):
cv2.imwrite(r_file, f_img)
plt.imshow(f_img)
print(p_name + " appended to Face DB.")
else:
print("Wrong image.")
通过上述代码,可以轻松地使用人们的照片向数据库添加人脸样本。
为了使数据库能够测试所有人脸识别场景,必须向其中添加一些在测试视频文件中没有出现的人的脸。可以从其他视频中提取这些脸。但在这里,将采取捷径,从免费的人脸数据库中借用一些脸。
从几个来源收集了一些面孔,并将它们放在图像档案中。然后,在这个档案上运行人脸提取代码。这在数据库中添加了十个面孔样本。因此,数据库中总共有十五个人。