您当前的位置: 首页 >  数据库

寒冰屋

暂无认证

  • 2浏览

    0关注

    2286博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

(五)为边缘AI人脸识别创建人脸数据库

寒冰屋 发布时间:2022-02-27 18:21:44 ,浏览量:2

目录

介绍

数据库中有什么

创建数据库

填充数据库

下一步

在这里,我们将解释用于人脸识别的简单人脸数据库的结构,开发用于将人脸添加到人脸数据库的实用程序的Python代码,并提供下载人脸以创建数据库的参考。最后,我们将解释如何启动用于从图像和视频中提取人脸的实用程序代码。

  • 下载源 - 152.7 KB
  • 下载帧 - 3.1 MB
  • 下载面孔 - 2.7 MB
  • 下载数据库 - 531.6 KB
介绍

人脸识别是人工智能(AI)的一个领域,深度学习(DL)在过去十年中取得了巨大成功。最好的人脸识别系统可以以与人类相同的精度识别图像和视频中的人物,甚至更好。人脸识别的两个主要基础阶段是人员验证和身份识别。

在本系列文章的前半部分(当前)中,我们将:

  • 讨论现有的AI人脸检测方法并开发程序来运行预训练的DNN模型
  • 考虑面部对齐并使用面部标志实现一些对齐算法
  • 在Raspberry Pi设备上运行人脸检测DNN,探索其性能,并考虑可能的方法来更快地运行它,以及实时检测人脸
  • 创建一个简单的人脸数据库并用从图像或视频中提取的人脸填充它

我们假设您熟悉 DNN、Python、Keras和TensorFlow。

在上一篇文章中,我们调整了AI人脸检测器,使其在边缘设备上以近乎实时的模式运行。在本文中,我们将讨论识别系统的另一个组成部分——人脸数据库。

数据库中有什么

第一个问题是我们究竟必须将什么保存到数据库中。一般来说,我们必须在我们的数据库中存储一个人的标识符——比如他们的名字和姓氏——以及他们的面部特征,我们可以将其与另一张脸的特征进行比较以评估相似度。在大多数真实的面部识别系统中,面部特征称为嵌入。这些嵌入是使用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.")

通过上面的代码,我们可以很容易地将人脸样本添加到使用人们照片的数据库中。

为了使我们的数据库便于对所有人脸识别场景进行测试,我们必须向其中添加一些未出现在测试视频文件中的人脸。我们可以从其他视频中提取这些人脸。但在这里我们会偷工减料,从免费人脸数据库中借用人脸。

我们收集了从几个来源收集的一些面孔并将它们放在图像档案中。然后我们在这个存档上运行我们的面部提取代码。

这向我们的数据库中添加了10个面部样本。所以我们在数据库中总共有十五个人。

我们将新人命名为“Man01, ..., Woman05”,以将他们与已知人(出现在测试视频中的人)区分开来。欢迎您下载数据库示例。

下一步

现在我们已经准备好了人脸识别应用程序的所有组件。在本系列的后半部分,我们将选择一个人脸识别DNN模型并开发用于针对视频源运行该模型的代码。

https://www.codeproject.com/Articles/5306645/Creating-a-Face-Database-for-Edge-AI-Facial-Recogn

关注
打赏
1665926880
查看更多评论
立即登录/注册

微信扫码登录

0.0463s