深入解析人脸解锁的前世今生
人工智能分为两个阶段,首先是感知阶段,然后是认知阶段。目前整个人工智能还在比较初级的感知阶段,而最主要的两种感知途径就是视觉和听觉,目前我们主要做的是视觉方向。我们公司成立于 2012 年,在视觉方向研究了很多年,一直专注以人脸为核心的方向,那么为什么我们会做人脸呢?在我们看来,人脸是信息量最大、商业价值最高的图像数据,我们可以通过一张图像知道一个人的年龄、性别、颜值、以及该人是否为他本人等等很多信息。
手机解锁在今年终于爆发了,它其实是人脸识别多年经验积累的最终一个落地结果。我们先看一下手机安全的发展过程。
从 2008 年第一台苹果手机的发布到现在已有将近 10 年的时间。在 2009 年时候出现了密码解锁;在 2010 年的时候了出现图形锁之后出现了很多生物识别技术(见图中蓝色字体)。生物识别的出现,最主要目的是为了解决用户体验,因为时常需要输入密码很麻烦,画一个图形解锁也很麻烦,在 2013 年有了指纹解锁之后,大家手指一按马上就可以解锁了。指纹、人脸识别、虹膜都是为了解决体验性问题。
今年有两款代表性的手机发布,让人脸这种生物识别技术站到了台前。第一个是上半年发布的三星 S8,三星 S8 是前置单摄的解锁方案,也就是今年最普及的人脸解锁方案;第二个是 iPhone 10。iPhone 10 是前置结构光双摄的解锁方案,这个代表着人脸解锁的未来趋势。
那么是什么因素推动了今年的人脸解锁成为手机解锁的主流呢?
我觉得最主要的因素是工业设计和制造工艺的提升。今年的全面屏成为工业设计上的主流趋势,大指纹设计挪到了手机背面,指纹的用户体验优势降低了。人脸不仅弥补了体验上的不足,更重要的是,人脸只需要摄像头就可以完成,不需要像指纹一样占用更多屏幕面积,所以能够大大提高屏占比。
第二个原因是成本和收益问题,如果厂商想要在手机那么小的空间内装一个指纹模组、虹膜模组,所要牺牲的手机内部空间占用,换句话说所需要的成本是巨大的。而人脸识别不会占用除摄像头模组外更多的内部空间。
第三个是芯片处理能力的提升与人脸识别算法的成熟。一些硬件层的加速方案可以让人脸识别的算法能在手机上跑得更快,新的活体技术可以让刷脸变得更安全。这在后面会具体来讲。
第五个原因是摄像头模组制造工艺的突破。其实结构光在几年前就有了,但是并没有小型化到手机这么小的体积内,iPhone 是第一家推出这样设备的厂商。除了结构光之外,还包括普通的红外 IO 摄像头、TOF 摄像头、摄像头模组的小型化。
最后一个原因是用户体验,大家在刷脸解锁的过程中不需要做任何的配合式操作,可以拿起手机直接解锁。而刷脸还可以抵抗一些常见的干扰,例如暗光、侧脸、小范围遮挡等。这让刷脸成为一种体验更优的生物识别方案。
说到用户体验问题,我们来对比一下现在最常见的手机解锁方案的体验。
首先在底库采集方面,人脸解锁只需要采集一张照片就可以了,但指纹需要采集多张。虹膜相对比较快,但虹膜需要把手机举到面前然后等几秒钟。从解锁速度来看,人脸解锁速度是最快的,拿起手机直接解锁,而指纹需要按到感应器,虹膜也需要对齐眼部。指纹解锁存在一些常见的干扰,比如指纹在手湿的时候完全不能解锁,戴手套也不能解锁。虹膜解锁的时候,戴隐形眼镜或者对着阳光直射也会受到干扰。人脸识别也存在干扰场景,比如说晚上家里灯全关了,或者戴墨经、双胞胎等等都会干扰,而我们现在解锁已经做到通过点亮屏幕的亮度就可以进行解锁。因此人脸在整个体验上比较具有优势。
说完用户体验,我们来说一下解刷脸这件事到底安不安全。
常见的生物识别,除了指纹、虹膜还包括指静脉、巩膜、视网膜等一些生物识别特征。传统生物识别所采集到的都是隐私的特征,所以人脸是个比较另类的生物识别方式,它采集到的是一个没有那么隐私的数据,因为在我们日常生活中,你很容易暴露自己的照片。
如上图所示,从另一个角度来讲,我们人眼很难辨别这些指纹图像是不是一个人,但我们能够很轻松地知道右边这些图是否属于同一个人。在我们人脑中有个区域叫梭状回,这个区域就是用来做人脸识别的。梭状回出了问题,就是俗称的脸盲症,得了这个病的人就没法做人脸识别。以上观点是想说明人脸相比其它生物识别是缺少私密性的,而且人脸更适合由人脑来做识别。所以将人脸识别放到解锁上来做,需要更强的鉴别真伪的手段。
那么人脸识别背后到底用了哪些技术?我们看一下手机解锁的流程。
第一步,我们拿起手机,采集视频序列帧,这时候需要检测这些帧有没有人脸,需要找到人脸。
第二步,分析人脸上的一些属性,包括人脸眼睛的睁闭状态,头的角度等情况,根据这个去判断其到底适不适合解锁。比如眼睛闭着的时候就不适合解锁,因为这说明是别人在拿着我的手机对着我拍。第三个技术是活体检测,我们需要通过画面进行判断你到底是本人在用手机,还是别人在拿着你的翻拍照片进行解锁。第四项技术是人脸识别,我们通过把底库的照片和这一帧所提取出来的人脸特征进行比对,判断到底是不是属于同一个人。
人脸识别大家应该很早之前就听说过,但是实际上这技术的历史并不是特别长。2001 年人脸的检测刚刚做到可以在 PC 上实时运行,但没有用到深度学习。2005 年的时候,欧姆龙第一次把人脸检测做到了一台相机里面,这样相机在拍照的时候就可以对人脸进行对焦。2012 年的时候,清华有三个同学,大家一起做了一款游戏 APP,这个游戏会根据你的头上下摇动来控制游戏里的主角,这是第一款基于人脸进行控制的游戏。这三个同学就是我们的三位创始人。在手机上能运算人脸识别算法,这对于之前又是一个很大的提升。2015 年的时候,马云在汉诺威展上展示了支付宝刷脸支付的方案。大家都知道,支付对于安全有很高的要求,在这个方案里用到了各项人脸技术,包括人脸检测、人脸识别和各项活体检测。但这个方案一直到今年才开始商用,在这几年间刷脸支付得到了突飞猛进的发展。我们去年推出了一个产品,叫做 FaceID。大家在使用支付宝或者一些金融产品时,有时候手机会要求你做一些配合式动作,比如眨眼、摇头,这就是 Face ID 做的事情。眨眼、摇头不是用来做人脸识别的,是用来做活体检测,判断人是不是活人。
那什么是活体检测?活体检测背后用到了哪些技术?
如果一个人有指纹、有虹膜,他是活体吗?他不是活体,因为光有指纹和虹膜还不够,你还需要辨别这个人是否还“活着”。比如,他的手指是热的吗?手指下的毛细血管里有血液在流动吗?这就是活体要解决的问题。所以可以看到,其实任何一种生物识别方式,对活体的判别是基于人的一些先验知识。不管是人脸,指纹还是虹膜,其实现在只能从这些先验知识入手进行判断,如同管中窥豹,都存在很大的局限性。
如上图所示。大家觉得比较安全的指纹和虹膜,其实也可以被攻破。关于指纹攻击,网上可以买到几十元的硅胶模,只要有机会取到机主的指纹图像,翻印成硅胶模就可以解锁通过了,因此现在指纹模组也做了活体的优化,比如判断当前手指的血液流速,从而证明你是活人。而关于虹膜,如果打印高清照片再配合一副隐形眼镜,也能进行攻击。
在刷脸的活体技术上,去年我们做过的线上金融场景,遇到过这几类活体攻击。第一类是换脸攻击,比如说这个人脸上贴成另一个人的脸。第二个是屏幕翻拍攻击,类似于今年手机解锁攻击。第三个是通过计算生成一张 3D 假脸进行攻击。因为金融场景的特殊性,攻击手段层出不穷。我们也分别做出了不同类型的活体算法,来防御这些攻击。例如我们会要求用户摇摇头、眨眨眼,来判断当前进行操作的对象是不是一个“活人”。
手机解锁对活体提出了更高要求。因为解锁需要拿起手机就完成检验,用户不会愿意为了解个锁还要摇摇头、眨眨眼。怎么让手机在那么短的时间内、没有任何配合动作的条件下,也能分辨出你的真伪呢?
上面的三张图,大家能看出哪个是真人吗?
上面那张还比较简单。这张图呢?
正确答案是最后两张是真人。第一张其实很难分辨,但颧骨有个鼠标指针;第二张是这个人背景虚化了,真实摄像头是不会采集到背景虚化的人;第三个是我们将照片打印出来剪出来在摄像头面前拍;然后第四个是屏幕翻拍。
所以在手机解锁的场景下需要进行防范,首先需要定义攻击场景有哪些。
手机常见的攻击场景,第一个是屏幕翻拍攻击,第二个是照片打印攻击。
在这两种攻击场景下,会有一些漏洞被我们捕捉到。第一个是露边框,手机屏幕在攻击或者打印照的时候,会露出边框;第二个是模糊问题,如果手机攻击离得非常近,边框没有了,但是画面会模糊。类似的还包括像素点、摩尔纹、手机屏反光,变形,扭曲等等问题。
刚才我们给机器提供了大量的攻击数据让它去训练,机器看多了数据,它就自然能辨别哪些是攻击数据了。所以,机器最终做到的活体防御水平,要远远超过这 6 种我们肉眼也可以分辨的场景,在活体防御上,机器要比我们的肉眼靠谱得多。
下面说几个人脸识别中常见的误区。
第一个,我们经常遇到一些问题,人脸识别安全程度打几分?指纹几分?安全标准从来不是可以用百分比数字来简单衡量的。判断安全的标准是成本。我们拿锁来举例,A 级锁的攻击成本是一分钟内就可以去攻破;B 级锁的供给成本差不多要 5 分钟;有 C 级锁,即金库用的锁,需要花三个小时才能够把锁给攻破。所以说安全的标准,其实是你的攻击成本。iPhone X 的安全性更高,不是说他的人脸识别率比单摄手机高了多少百分点,而是他的攻击成本更高。因为结构光摄像头可以防御所有的平面攻击手段,攻击者需要造出立体的人脸模型才能攻击。
第二个,红外摄像头是不是更安全?
如上图,从一张图像的数据量来看,普通摄像头采集到的画面数据量要远远大于红外摄像头的数据量,所以,并不能简单地说红外更安全。但红外摄像头确实可以提高安全性,它的安全性主要体现在对 RGB 的补充上。我们肉眼只能看到 RGB 图像,而红外光是我们人眼不可见的光。通过红外光图像,我们可以有效辨别到底哪些是人脸,哪些是手机屏。另外红外光可以辅助在暗光的场景下进行解锁,对体验也有帮助。
第三个,人脸关键点不等于人脸特征。
如上图所示,左边是关键点。我们拿出 10 个人的关键点来比较,可以发现每个人的关键点是非常相似的,因此通过对比关键点非常不靠谱。人脸特征是指对人脸的一串编码数据,你可以想象成有一个多维空间,每张人脸是多维空间的一个点,如果采集到了你多张人脸的照片就是多个点,那么点之间的距离越近就越可能是同一个人,越远就越可能不是同一个人,我们的逻辑是这样计算的。
今年除了苹果外,所有的解锁方面都是解锁级的方案,遇到支付场景,还是需要依靠指纹或密码来完成。我们认为人脸解锁的未来是人脸支付。而在支付上,只有特定的摄像头硬件方案才能达到这种安全水准。例如苹果所采用的结构光。
结构光双摄,主要的原理是通过结构光的发射器和接受器之间产生的相位差来计算出人脸的深度,并且针对这个深度来判别真伪。所以从结构光硬件本身是能够防御所有的 2D 攻击手段,包括屏幕和纸张。但由于支付场景的敏感性,攻击者可能采用 3D 打印或者硅胶膜此类成本更高的攻击手段来窃取机主的财产。 这便需要我们这样的算法公司去解决该类活体问题。
前面有提到,刷脸支付在今年才真正落地。在杭州的一家肯德基门店,已经布上了一台刷脸支付机,用户不用带钱包和手机,只需要跑到机器前刷脸就能够完成支付。在这台支付设备的顶上安装的是结构光摄像头。
为了同时解决体验问题和安全问题,我们做出了一项新的突破性的活体技术。具体原理不方便多说,可以给大家看一下下面这张图。