HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

人脸解锁的前世今生

  • 2017-12-17
  • 本文字数:6447 字

    阅读完需:约 21 分钟

大家好,我是乔梁,来自 Face++。我今天分享的内容可能偏干货多一点,主要介绍一下人脸解锁的具体技术。

人工智能分为两个阶段,首先是感知阶段,然后是认知阶段。目前整个人工智能还在比较初级的感知阶段,而最主要的两种感知途径就是视觉和听觉,目前我们主要做的是视觉方向。我们公司成立于 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 打印或者硅胶膜此类成本更高的攻击手段来窃取机主的财产。 这便需要我们这样的算法公司去解决该类活体问题。

前面有提到,刷脸支付在今年才真正落地。在杭州的一家肯德基门店,已经布上了一台刷脸支付机,用户不用带钱包和手机,只需要跑到机器前刷脸就能够完成支付。在这台支付设备的顶上安装的是结构光摄像头。

为了同时解决体验问题和安全问题,我们做出了一项新的突破性的活体技术。具体原理不方便多说,可以给大家看一下下面这张图。

如上图所示,大家可以看到右上角的图,左边的人脸是个硅胶的三维人脸,有一个真人的手里着一张纸,纸上有打印出来的 2D 人脸。散斑结构光打在这些材质上会产生光斑,我们把采集到的结构光光斑的画面进行运算后,可以很有效的判断出了哪个材质是硅胶、哪个材质是人手、哪个材质是纸张。我们未来会有更多的新技术,来提升手机刷脸支付场景的安全性。

展望未来,我们认为刷脸支付的场景未来会拓展到各行各业,因为刷脸不需要配合,也不需要做任何的操作,用户没有感知就可以完成,所以不仅是线上可以用来做支付,线下可以在新零售、无人超市,用刷脸来解决支付问题。

问答环节

提问 1:刚刚提到人脸有 100 多个特征,我想问问你们现在用算法、深度学习的话,有没有办法可以有意识地去提取某些特征?因为深度学习的好多学习过程我们没法控制,有没有什么好的方法和办法?就是关注算法的学习过程,有办法去有意识的关注某些互位吗?

乔梁:您说的特征应该是指人脸关键点。说到部位,关键点要不要针对某些部位做特殊的训练,我觉得是由使用场景来定义的。举个例子,在美妆场景,需要做唇膏的上色和眼线的上色,对于眼睛和嘴唇的关键点要求非常高,所以需要针对这两个部位去增加更多的点,让上色变得更自然、更贴合。所以算法是由落地场景来驱动我们到底需要在哪些地方产生关键点,然之后再对数据进行标注、训练,最后才产生出来。场景是源头。

提问 2:我有两个小问题,刚刚有介绍到识别特征区域是轮廓、眼睛、嘴巴,其实我体验了很多人脸识别的设备,但一般戴口罩就很难识别出来,然而有些半张脸都可以,那为什么在戴口罩这块的识别效果会降低很多呢?另外一个问题,刚才讲到 Iphone X 是前置结构光捕捉三维动画,那块能详细介绍一下吗?

乔梁:我先回答第一个问题。先给大家解读一个误区,人脸关键点和人脸特征值是两个东西。关键点是人脸上的点位,它的应用场景通常是一些娱乐场景,比如说做贴纸、做美颜。而人脸特征与关键点无关,它是针对人脸进行一串编码,我们每张脸都有一串人脸编码,针对这串编码来比对当前这张脸和你是不是同一个人,所以这不是同一个东西。您看到的 “半张脸都可以” 的场景,我猜想应该是指的人脸关键点。关键点分两步,第一步叫关键点的检测、第二步叫关键点的跟踪。检测就是原来画面里没有人脸,后来出现了人脸,观察能不能把关键点检测出来,在检测方面,如果你的面部有大面积的遮挡会是比较困难的,所以在检测第一帧画面的时候,脸部还是要尽量保持完整,跟踪的时候关键点有很强的鲁棒性,一旦检测到人脸,我的脸甚至于遮住半张脸都没有受到影响。

第二个问题,Iphone X 的前置结构光。前置结构光的基本组件有三个。第一个是 RGB 摄像头,第二个是散斑结构光的发射器,第三个是红外结构光摄像头。iPhone X 的摄像头要比我所说的还要复杂,但为了便于理解,我先从这三个组件的角度来介绍一下。第一个 RGB 摄像头是用来捕捉人脸画面进行人脸比对和正常拍照。另外两个设备都和结构光有关。结构光的原理是基于往你的脸上打一些红外光斑,并根据发射器和摄像头之间的相位差,计算出景深信息。由于这种景深信息的精度要远高于普通的 RGB 双摄,所以可以防御一些成本较低的攻击手段。除了机构光,还有 TOF,是根据红外光打到脸上反射回来的时间来判断人的远近和人脸 3D 的特性。这两种方案是安全性比较高的摄像头模组。

提问 3:我想问一个问题,您这边的话对于人脸识别从传统单摄像头到后来的深度摄像头以及现在这种包括结构光的摄像头,下一阶段 Face++ 关注的趋势是什么样的?谢谢。

乔梁:手机摄像头硬件方面,首先单 RGB 摄像头是一直以来的重点,因为从应用场景来看, 70% 以上的手机都是依赖于单摄的。除了单摄之外,目前重点关注的是结构光与 TOF,即 iPhoneX 的方案。因为它能将人脸解锁提升到支付级;另外,从摄影的角度,我们也在关注 2PD 的技术。它其实是一个单摄,但它的 sensor 将一个像素拆成了两个次像素,所以它可以采集到两张画面。这两张画面对齐后,会发现有非常细微的角度差异,我们将角度放大之后,可以让单摄达到类似于双摄的效果,获得一些景深信息。因此我们认为 2PD 会是双摄的一种低成本替代方案,可以在一定程度上提高人像虚化的质量。

讲师介绍

乔梁,Face++ 产品专家,先后服务于小米、酷 6、MySpace 等互联网公司,负责过多款千万量级 C 端产品并两次获得苹果 App Store 推荐。目前在 Face++ 负责人脸识别算法面向各行业的产品规划及落地,手机解锁项目负责人。

2017-12-17 16:3810086
用户头像

发布了 100 篇内容, 共 21.7 次阅读, 收获喜欢 5 次。

关注

评论

发布
暂无评论
发现更多内容

软件测试 /测试开发/全日制|Python全栈开发:使用AJAX进行前后端数据交互

测吧(北京)科技有限公司

测试

敏捷监控与可观察性

FunTester

左耳听风 - 我对技术的态度「读书打卡 day 02」

Java 工程师蔡姬

读书笔记 程序员 读书 左耳朵耗子

软件测试/测试开发/全日制 | Python全栈开发:安全防范与Web应用的漏洞预防

测吧(北京)科技有限公司

测试

2023 IoTDB Summit:华润电力技术研究院副院长郭为民《新型时序数据库在智能发电领域的应用探索与展望》

Apache IoTDB

软件测试/测试开发/全日制 |使用Django构建高效的Web应用

测吧(北京)科技有限公司

测试

软件测试/测试开发全日制培训|Pytest跳过用例和失败重试

霍格沃兹测试开发学社

软件测试/测试开发/全日制|Pytest如何灵活地运行用例

霍格沃兹测试开发学社

5G之味,在烟火长沙

脑极体

5G

软件测试/测试开发/全日制|pytest如何标记测试用例

霍格沃兹测试开发学社

软件测试/测试开发/全日制 | Python全栈开发中的自动化部署与持续集成实践

测吧(北京)科技有限公司

测试

软件测试/测试开发/全日制 |从Git到Jenkins:Python全栈开发中的版本控制与自动化

测吧(北京)科技有限公司

测试

软件测试/测试开发/全日制 | Python全栈开发实战:利用Redis提高系统性能

测吧(北京)科技有限公司

测试

博通集成在其Wi-Fi芯片组上集成Alexa Connect Kit

财见

软件测试/测试开发/全日制 |Python全栈开发:构建基于GraphQL的现代Web应用

测吧(北京)科技有限公司

测试

软件测试/测试开发/全日制 |从Flask到FastAPI:Python全栈开发中的后端框架比较

测吧(北京)科技有限公司

测试

C 语言文件处理全攻略:创建、写入、追加操作解析

小万哥

程序人生 编程语言 软件工程 C/C++ 后端开发

2024第十届上海国际智慧工地展览会

AIOTE智博会

智慧工地展览会 智慧工地展会 智慧工地展

云渲染适合什么场景下使用?

Renderbus瑞云渲染农场

云渲染 渲染农场 动画渲染 效果图渲染

为什么建筑设计师选择网络渲染"效果图"

Renderbus瑞云渲染农场

云渲染 云渲染农场 效果图渲染

跨境电商通讯服务

cts喜友科技

通信 通讯

软件测试/测试开发/全日制 | Python全栈开发:构建基于RESTful API的微服务

测吧(北京)科技有限公司

测试

软件测试/测试开发/全日制 |构建智能Web应用

测吧(北京)科技有限公司

测试

创业清华人丨 乔嘉林:破茧成蝶,时序数据库赋能工业物联网

Apache IoTDB

一款完整的单节锂离子电池采用恒定电流/恒定电压线性充电器

梦笔生花

漫画IT | 关于你天天用的OS与Git

极狐GitLab

软件测试/测试开发/全日制 |Python全栈开发:利用RabbitMQ构建高效的消息队列系统

测吧(北京)科技有限公司

测试

博通集成发布BK3633 Apple Find My网络配件解决方案

财见

2024年CoinList上第一个项目Subsquid

币离海

Coinlist Subsquid SQD

软件测试/测试开发/全日制 |Python全栈开发:利用OAuth与JWT实现身份验证

测吧(北京)科技有限公司

测试

软件测试/测试开发/全日制 |Python全栈开发实战:搭建强大的Web应用服务器

测吧(北京)科技有限公司

测试

人脸解锁的前世今生_语言 & 开发_乔梁_InfoQ精选文章