在本文中,我们将探索如何创建一个程序,返回最像输入图像的名人姓名。
这个应用程序很酷,因为你可以用类似的方法做很多事情,比如情感检测或手势识别。
我们将使用的数据是VGG人脸数据集;你可以从这个链接下载https://www.robots.ox.ac.uk/~vgg/data/vgg_face/[1]
该数据库由2622个身份组成。每个身份都有一个文本文件,其中包含指向其图像的多个链接。为了加快这个过程,我们将只使用来自每个身份的5张图像。
基本策略包括两个步骤:注册和推理。
注册
在注册步骤中,我们对每个名人的5张图像中的每一张进行面部关键点检测。面部标志点通过Dlib面部识别器。Dlib模型将输出每个人脸的唯一响应。
VGG数据集的一个优点是已经执行了人脸检测,每个URL都有一个左上角和右下角的点。这是一个很大的帮助,因为人脸检测非常耗时。
我有好消息和坏消息要告诉你。坏消息是2622个身份,每个都有5张图片,所以一共有13110张图片,所以准备好吧——这需要一段时间。我在周末运行了它,大约花了6个小时来处理数据集。
它如此之慢的原因之一是因为你必须从URL打开图像。这大大降低了过程的速度,但使数据集更易于公众访问,因为作者不需要处理每个图像的版权规则。
好消息是你只需要做一次;运行程序后,描述符数组将保存为.npy文件。
一旦我们有了名人的描述,我们就可以进行推断了。
推理
在推理步骤中,检测输入图像的人脸及其关键点。关键点然后通过Dlib人脸识别器,该识别器将输出描述符。
我们所要做的就是计算输入图像描述符和数据集描述符之间的距离。
下面的图片显示了我的结果。
我对结果很满意,但我想确保它起作用。所以,我用Amanda Seyfried的照片测试了我的程序,事实上,她看起来很像她自己!
请参见以下实现:
<