人脸识别可以自制,你知道吗?而且非常简单

  • 只需要不到10行代码就能完成

如你所知,很多人使用手机上的面部解锁功能;而且你也知道,如今很多城市乘坐地铁时都被要求刷脸;甚至人们在超市结账时举起手机刷脸……

更多参见我们的 “生物识别及对抗方法” 栏目。本文不是对抗方法。

很多人觉得这项名为“人脸识别”的技术简直不可思议。但是,您认为基于该技术的应用程序很难吗?

实际上并不难。您甚至可以自制,只需要不到10行的代码就可以制作它!

这里是人脸识别 Tensorflow 教程,欢迎来玩。

如果不想阅读本文,只需要看一眼以下代码 😂

from easyfacenet.simple import facenet
images = ['images/image1.jpg', 'images/image2.jpg', 'images/image3.jpg']aligned = facenet.align_face(images)comparisons = facenet.compare(aligned)
print("Is image 1 and 2 similar? ", bool(comparisons[0][1]))print("Is image 1 and 3 similar? ", bool(comparisons[0][2]))

它将输出以下内容:

Is image 1 and 2 similar?  TrueIs image 1 and 3 similar?  False

等下,难道不是 tensorflow?当然是 tensorflow。本教程将使用由 Tensorflow 开发的算法 Facenet

因此,在 Facenet 之上创建另一个接口,称为 Easy Facenet。要安装该库,您只需键入:

pip install easyfacenet

完成了~

这篇文章到此结束了吗?当然不是。

接下来将逐行向您解释该教程。同时,首先介绍人脸识别的工作原理。

人脸识别

关于人脸识别是如何工作的?

Courtesy of OpenFace

从上图可以看到,步骤是这样的:

  1. 获取应包含面部的输入图像
  2. 需要找到面部的确切位置,并在面部周围放置一个边界框
  3. 为了确保算法的一致性,需要对图片稍作调整,以使嘴、鼻子和眼睛的位置对于不同的图片来说能保持一致
  4. 然后裁剪
  5. 将裁剪的图片输入到 Facenet 算法中,该算法是一个深度神经网络。
  6. 它将输出该脸部图的矢量表示。当时是128维特征向量,现在是512维。
  7. 然后,您就可以使用该形式执行所需的操作了。您可以进行分类、聚类、或者仅使用图片之间的相似度计算,也就是识别。

哇哦,听起来有好多,很难吧?并不是。基本上,您可以将这7个步骤分为3个步骤,分别是:

  1. 校准:输入图像并输出对齐的裁切面
  2. 嵌入:输入面部并输出矢量表示
  3. 比较:就是识别

因为只有3个简单的步骤,所以代码应该就这么简单,不是吗?

是的,可以使用 easyfacenet。

最简单的人脸识别 Tensorflow 库

下面逐一分解代码。

from easyfacenet.simple import facenet

simple 组件导入 facenet 文件。您可以在文件内部使用三个模式:align_face, embedding, 和 compare.

可以很容易地看出,这些模式中的每一个都代表了人脸识别的每个步骤。

images = ['images/image1.jpg', 'images/image2.jpg', 'images/image3.jpg']

下面就可以确定图像了。

还有另外一个:

图像已经有了,下面开始进行。

步骤1:对齐

aligned = facenet.align_face(images)

该库将尝试在图像内部找到人脸并裁剪人脸,预白化可以使训练更容易,于是进行预白化处理。

经过预白化处理的对齐的脸部将如下所示。

Image 1 to 3 from left to right

步骤2:嵌入

embeddings = facenet.embedding(aligned)

结果将如下所示:

不需要看这些数字

步骤3:比较

comparisons = facenet.compare(aligned)

如果您有3张图片,则 compares 变量将具有3 x 3的值。这一个步骤就是比较。如果要获取 “图像1是否类似于图像2?”,那么这样:

print("Is image 1 and 2 similar? ", bool(comparisons[0][1]))

同理:Is image 1 similar to image 3?

print("Is image 1 and 3 similar? ", bool(comparisons[0][2]))

就是这样。这样就可以得到比较结果。我使用的比较技术是余弦相似性。您可以使用任何其他想要的相似性方法。比如您可以使用聚类和分类;Siamese Network 这样的东西应该是您想要的。

接下来该怎么办?

正如前面所说的,这是最简单的人脸识别 Tensorflow 库。因此,您可以尽快开始做您想做的事。

如果您是老司机,则可以浏览该库并创建真正的人脸识别 Tensorflow 代码。在这里看一下代码,因为那是该库的基石。您可以扩展它创建您自己的功能。

最后的想法

如果您想了解这项惊人技术背后的论文,可以在这里这里看到。

总之,利用 easyfacenet 可以在极大程度上帮助您创建自制的人脸识别项目。而且,这个人脸识别库完全由个人维护。如果您想要某种功能,这对您来说应该很容易。

如果您想探索另一种惊人的机器学习技术,可以在这里阅读。⚪️

Face Recognition Tensorflow Tutorial (with less than 10 lines of codes!)

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据