Python可以人脸识别,iPhone X的人脸解锁功能也能完成?太棒了

  • A+
所属分类:python网络爬虫

Python可以人脸识别,iPhone X的人脸解锁功能也能完成?太棒了

FaceID 是新款 iPhone X 最受接待的功能之一,它庖代 TouchID 成为了最前沿的解锁编制。

一些苹果的竞争敌手们还在继续相沿着传统的指纹解锁编制,FaceID 解锁编制显然是革命性的:扫你一眼,手机主动解锁。

为了实现 FaceID 手艺,苹果接纳了前进前辈而小巧的前置深度相机,这使得 iPhone X 能建树用户脸部的 3D 映射。别的,它还引入了红外相机来捕捉用户脸部图片,它拍摄到的图片对外界情形的光线和颜色变化具有更强的鲁棒性。经由过程深度进修,智妙手机可以很是详细体味用户脸部信息。所以当用户接电话时,手机就会主动识别并解锁。但更令人受惊的或许是它的安然性,苹果公司手艺人员表示,比力于 TouchID ,FaceID 的出错率只需 1:1000000。

我对苹果 FaceID 及其背后的深度进修手艺很是感乐趣,想晓得若何使用深度进修来实现及优化这项手艺的每个轨范。在本文中,我将引见若何使用深度进修框架 Keras 实现一个近似 FaceID 的算法,诠释我所接纳的各类架构抉择妄想,并使用 Kinect 展现一些终极考试考试成效。Kinect 是一种很是流行的 RGB 深度相机,它会产生与 iPhone X 前置摄像头近似的成效。

Python可以人脸识别,iPhone X的人脸解锁功能也能完成?太棒了

▌理解 FaceID 工作事理

Python可以人脸识别,iPhone X的人脸解锁功能也能完成?太棒了

FaceID 的设置过程

首先,我们必要分析 FaceID 的工作事理,体味它是若安在 iPhone X 上运作的。但在这之前,我们仍是说一下 TouchID 一些根基把持:当用户使用 TouchID 时,必需按压几回传感器停止初始化,并且记实指纹,约莫经由 15-20 次不合角度的触摸之后,指纹信息将在手机上完成注册,如许 TouchID 也就预备停当了。

同样地,使用 FaceID 也必要用户注册他她的脸,这个过程很是简单:用户只需以一种天然的编制看手机屏幕,然后渐渐将头部转一圈,以不合姿态记实脸部信息。如斯,用户就可以使用手机的人脸解锁功能了。

如许快速的注册过程可以告诉我们一些 FaceID 背后深度进修算法的相干信息。例如,支撑 FaceID 的神经搜集不仅仅是实行分类这么简单。

Python可以人脸识别,iPhone X的人脸解锁功能也能完成?太棒了

Apple Keynote 推出 iPhone X 和 FaceID 新功能

对神经搜集而言,一个方针分类使命意味着模子必要去揣测一张脸是否与该用户婚配。通常情形下,处理这类问题要使用一些数据来练习模子,让模子进修若何分辩真(Ture)假(False)。不外,这种编制却不能应用到 FaceID 的模子练习中,它不合于其他深度进修案例。

Python可以人脸识别,iPhone X的人脸解锁功能也能完成?太棒了

首先,神经搜集必要重新使用从用户脸上获得的新数据停止练习,而这必要大量时辰、能耗和庞杂的人脸练习数据,这种编制不实在际。固然,你也可以用迁移进修,对预练习好的搜集停止微调,情形可能会有所好转,但也无法从根柢上处理问题。别的,这种编制也无法把持苹果考试考试室中离线练习好的复杂搜集,如许也就不能将更前进前辈的搜集模子安排得手机上了。

那 FaceID 的模子练习现实若何呢?

实际上,FaceID 使用的是近似暹罗式卷积神经搜集(siamese-like convolutional neural network)来驱动。这种搜集模子是由苹果离线练习好的,能将脸部信息映射到低维潜在空间,经由过程使用比力损失(contrastive loss)来最大化不合人脸之间的差异。如斯,你就获得了一个切确的、合用于少样本进修(one-shot learning)的模子构造,而这种模子在只需少量练习样本的情形下,也可以进修样本特征并停止揣测分类。

Python可以人脸识别,iPhone X的人脸解锁功能也能完成?太棒了

▌暹罗神经搜集及其上风

一样平常而言,它由两种不异神经搜集构成,这两种神经搜集共享所有权重。该搜集构造可以计较特定类型的数据(如图像)之间的间隔。经由过程暹罗搜集通报数据,或者简单地经由过程两个不合轨范向统一搜集通报数据,搜集会将其映射到一个低维特征空间,比如一个 n 维数组。然后,你必要练习搜集产生特征映射,从而获取尽可能多的不合类别的数据点,而统一类别的数据点尽可能是接近的。

我们所希望的是,该搜集可以从数据中提取并进修到最成心义的特征,并将其压缩成一个数组,来建树一个成心义的映射。

为了能更直不雅观不雅观地舆解这一过程,想象一下若何使用 small vector 来描述狗的品种,使得类似的狗具有更接近的向量。你可能会用一个数字来编码狗的毛色、狗的巨细、毛的长度等等。如许,类似的狗就会具有类似的特征向量。同样地,一个暹罗神经搜集可以帮你完成这件事,用不合编码来表示方针的不合特征,就像是一个主动编码器。

Python可以人脸识别,iPhone X的人脸解锁功能也能完成?太棒了

上图来自 Hadsell,Chopra 和 LeCun 揭晓的论文“Dimensionality Reduction by Learning an Invariant Mapping”。注意,模子是若何进修数字之间的类似性,并在二维空间中主动地将它们分组的。FaceID 就接纳了与这近似的手艺。

经由过程这种手艺,人们可以使用大量人脸数据来练习如许的模子构造,终极方针是让模子主动识别哪些人脸是最类似的。别的,我们不仅必要对模子的计较本钱有切确预算,还要让模子可以顺应越来越难的人脸案例,譬如使神经搜集对识别诸如双胞胎、匹敌性鞭挞打击(掩模)等事物时也具有强鲁棒性。

苹果的这种编制的上风在哪里?

我们终极拥有的是一个现用模子,只需在初始设置过程中拍摄一些人脸照片后,计较人脸位于地点的脸部映射空间中的位置即可,而不必要再进一步练习或优化模子以识别不合用户。正如前面狗的品种分类问题一样,它为一只新品种的狗编码其特征向量,并将其存储到特征空间。别的,FaceID 可以自顺应用户的面部变化,如一些突兀的变化(眼镜、帽子和扮装)和一些轻细的变化(面部毛发)。这些特征变化通常只需经由过程在脸部特征空间添加一些参考面向量即可,之后再按照这些向量停止新的面部特征计较。

Python可以人脸识别,iPhone X的人脸解锁功能也能完成?太棒了

FaceID 能主动顺应脸部变化

下面,我将引见若安在 Python 中用 Keras 框架来实现上述过程。

▌用 Keras 实现 FaceID

对付所有的机械进修项目而言,首先必要的是数据。建树我们本身的人脸数据集必要大量时辰和人工本钱,这将是个极具挑战性的使命。我在网上看到一个 RGB-D 人脸数据集,创造它很是适宜作为我们的人脸数据集。该数据集由一系列面向不合标的目的,并带不合人脸神色的 RGB-D 图片构成,就像 iPhone X 中 FaceID 所需的人脸数据一样。

然后,我构建了一个基于 SqueezeNet 架构的卷积神经搜集。该搜集以耦合人脸的 RGBD 图像作为输入,是以输入图像的维度是 4 通道,输出则是两个嵌入值之间的间隔。该搜集练习时会产生一种比力损失,可以最大限度减少图片中类似的人之间的间隔,并使图片平不合的人之间的间隔最大化。比力损失函数的数学表达式如下:

Python可以人脸识别,iPhone X的人脸解锁功能也能完成?太棒了

比力损失函数表达式

经由模子练习后,该搜集可以将人脸映射成 128 维数组,并将图片中不异的人分在统一组,与图片中其别人的间隔尽可能远。这意味着,要解锁你的手机,该搜集只需计较在解锁过程中拍摄的人脸照片与注册时所存储的人脸照片之间的间隔。 若是这个间隔低于某个阈值,则会解锁手机,阈值设置得越小,你的手机将越安然。

别的,我使用了 t-SNE 算法在 2 维空间上可视化 128 维的嵌入空间,用每种颜色对应不合的人:正如下面你所看到的,该搜集已经学会若何将这些人脸停止切确分组。值得注意的是,使用 t-SNE 算法停止可视化时,簇(cluster)与簇之间的间隔没成心义。别的,当你使用 PCA 降维算法停止可视化时也会看到一些幽默的征象。

Python可以人脸识别,iPhone X的人脸解锁功能也能完成?太棒了

使用 t-SNE 算法在嵌入空间生身不合的人脸簇。每一种颜色代表不合人脸(这里局部颜色被频频使用)

Python可以人脸识别,iPhone X的人脸解锁功能也能完成?太棒了

使用 PCA 算法在嵌入空间生身不合人脸簇。每种颜色代表不合人脸(这里局部颜色被频频使用)

▌考试考试!

如今,我们将模仿一个通用的 FaceID 解锁过程,看看其中的模子是若何进交运作的。首先,注册一个用户的脸部信息;在解锁阶段,其他用户在正常情形下都不能够成功解锁设备。如前所述,神经搜集会在解锁阶段计较当前人脸与所注册人脸图片之间的间隔,并且会检察该间隔是否小于某个阈值。

我们从注册阶段起头,在数据集中网罗统一小我的人脸照片,并模仿整个注册阶段。 随后该设备将计较当前每小我脸姿态的嵌入,并将其存储在本地。

Python可以人脸识别,iPhone X的人脸解锁功能也能完成?太棒了

一个新用户在 FaceID 上的注册过程

Python可以人脸识别,iPhone X的人脸解锁功能也能完成?太棒了

来自深度相机所看到的注册过程

如今来看,当统一用户试图解锁设备时会产生什么?我们可以看到,来自统一用户的不合姿态和面部神色都有着较低的间隔,均匀间隔约为 0.30。

Python可以人脸识别,iPhone X的人脸解锁功能也能完成?太棒了

嵌入空间中来自统一用户的人脸间隔计较

而不合的人的 RGBD 人脸图像,计较获得的间隔值为 1.1。

Python可以人脸识别,iPhone X的人脸解锁功能也能完成?太棒了

嵌入空间中来自不合用户的人脸间隔计较

是以,将间隔阈值设置为 0.4 就足以防止目生人解锁你的手机。

Python可以人脸识别,iPhone X的人脸解锁功能也能完成?太棒了

下面分享python三步实现人脸识别

Face Recognition软件包

这是世界上最简单的人脸识别库了。你可以通过Python引用或者命令行的形式使用它,来管理和识别人脸。

该软件包使用dlib中最先进的人脸识别深度学习算法,使得识别准确率在《Labled Faces in the world》测试基准下达到了99.38%。

它同时提供了一个叫face_recognition的命令行工具,以便你可以用命令行对一个文件夹中的图片进行识别操作。

特性

在图片中识别人脸

找到图片中所有的人脸

Python可以人脸识别,iPhone X的人脸解锁功能也能完成?太棒了

Python可以人脸识别,iPhone X的人脸解锁功能也能完成?太棒了

找到并操作图片中的脸部特征

获得图片中人类眼睛、鼻子、嘴、下巴的位置和轮廓

Python可以人脸识别,iPhone X的人脸解锁功能也能完成?太棒了

Python可以人脸识别,iPhone X的人脸解锁功能也能完成?太棒了

找到脸部特征有很多超级有用的应用场景,当然你也可以把它用在最显而易见的功能上:美颜功能(就像美图秀秀那样)。

Python可以人脸识别,iPhone X的人脸解锁功能也能完成?太棒了

鉴定图片中的脸

识别图片中的人是谁。

Python可以人脸识别,iPhone X的人脸解锁功能也能完成?太棒了

Python可以人脸识别,iPhone X的人脸解锁功能也能完成?太棒了

你甚至可以用这个软件包做人脸的实时识别。

Python可以人脸识别,iPhone X的人脸解锁功能也能完成?太棒了

这里有一个实时识别的例子:

1

https:

//github.com/ageitgey/face_recognition/blob/master/examples/facerec_from_webcam_faster.py

安装

环境要求

  • Python3.3+或者Python2.7

  • MacOS或者Linux(Windows不做支持,但是你可以试试,也许也能运行)

安装步骤

在MacOS或者Linux上安装

首先,确保你安装了dlib,以及该软件的Python绑定接口。如果没有的话,看这篇安装说明:

1

https:

//gist.github.com/ageitgey/629d75c1baac34dfa5ca2a1928a7aeaf

然后,用pip安装这个软件包:

Python可以人脸识别,iPhone X的人脸解锁功能也能完成?太棒了

如果你安装遇到问题,可以试试这个安装好了的虚拟机:

1

https:

//medium.com/@ageitgey/try-deep-learning-in-python-now-with-a-fully-pre-configured-vm-1d97d4c3e9b

在树莓派2+上安装

看这篇说明:

1

https:

//gist.github.com/ageitgey/1ac8dbe8572f3f533df6269dab35df65

在Windows上安装

虽然Windows不是官方支持的,但是有热心网友写出了一个Windows上的使用指南,请看这里:

1

https:

//github.com/ageitgey/face_recognition/issues/175#issue-257710508

使用已经配置好的虚拟机(支持VMWare和VirtualBox)

看这篇说明:

1

https:

//medium.com/@ageitgey/try-deep-learning-in-python-now-with-a-fully-pre-configured-vm-1d97d4c3e9b

使用方法

命令行接口

如果你已经安装了face_recognition,那么你的系统中已经有了一个名为face_recognition的命令,你可以使用它对图片进行识别,或者对一个文件夹中的所有图片进行识别。

首先你需要提供一个文件夹,里面是所有你希望系统认识的人的图片。其中每个人一张图片,图片以人的名字命名。

Python可以人脸识别,iPhone X的人脸解锁功能也能完成?太棒了

然后你需要准备另一个文件夹,里面是你要识别的图片。

Python可以人脸识别,iPhone X的人脸解锁功能也能完成?太棒了

然后你就可以运行face_recognition命令了,把刚刚准备的两个文件夹作为参数传入,命令就会返回需要识别的图片中都出现了谁。

Python可以人脸识别,iPhone X的人脸解锁功能也能完成?太棒了

输出中,识别到的每张脸都单独占一行,输出格式为

通过Python模块使用

你可以通过导入face_recognition模块来使用它,使用方式超级简单,文档在这里:https://face-recognition.readthedocs.io

自动找到图片中所有的脸

Python可以人脸识别,iPhone X的人脸解锁功能也能完成?太棒了

看看这个例子自己实践一下:

1

https:

//github.com/ageitgey/face_recognition/blob/master/examples/find_faces_in_picture.py

你还可以自定义替换人类识别的深度学习模型。

注意:想获得比较好的性能的话,你可能需要GPU加速(使用英伟达的CUDA库)。所以编译的时候你也需要开启dlib的GPU加速选项。

Python可以人脸识别,iPhone X的人脸解锁功能也能完成?太棒了

你也可以通过这个例子实践一下:

1

https:

//github.com/ageitgey/face_recognition/blob/master/examples/find_faces_in_picture_cnn.py

如果你有很多图片和GPU,你也可以并行快速识别,看这篇文章:

1

https:

//github.com/ageitgey/face_recognition/blob/master/examples/find_faces_in_batches.py

自动识别人脸特征

Python可以人脸识别,iPhone X的人脸解锁功能也能完成?太棒了

试试这个例子:

1

https:

//github.com/ageitgey/face_recognition/blob/master/examples/find_facial_features_in_picture.py

识别人脸鉴定是哪个人

Python可以人脸识别,iPhone X的人脸解锁功能也能完成?太棒了

好了,今天的知识就分享到这里,想学习python爬虫的欢迎关注爱编程的南风,私信关键词:学习资料,获取更多学习资源,如果文章对你有有帮助,请收藏关注,在今后与你分享更多学习python的文章。同时欢迎在下面评论区留言如何学习python。

weinxin
我的微信公众号
爱真理,得永生!          爱在灵灵久博客,网罗天下,福利大家!

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: