在业务中,有幸深度接触了人脸验证这款产品,为及时沉淀总结,所以有了这篇文章。需先说明,本文人脸验证指的是验证当前操作者是不是用户本人。
一、梳理端和场景
1. 开始前,产品首先需要先梳理好端和场景
举例:
为什么要先梳理端和业务场景呢?
2. 业务场景不同,业务策略不同
举例:金融场景,安全系数要求更高,在保证一定用户体验的时候,宁可误杀,不可错放。
登录场景,则相对要求低一些;另外,不同场景,辅以不同错误次数限制、弥补措施等,业务流程逻辑不同。
3. 硬件配置不同,采集到的数据不同
软件产品,关注手机摄像头配置。
比如说安卓千元机,一般都是普通RGB摄像头,只能获取到用户脸部的2D信息,比如色彩梯度等,而苹果手机X及以上配置了3D深度摄像头。
所以苹果的面容ID是基于3D结构光的人脸识别方案,通过红外光将大约3万个点阵投射到物体上,用数量庞大的点阵得到物体的深度信息,精度高,可以较好地防范各类攻击(目前同样采取3D结构光的安卓手机,点阵数量远小于苹果,相对而言,获取的数据也就更少)。
另外,苹果的成像是利用红外不可见光,所以可以不受环境光的影响,支持用户在黑暗环境下正常使用。因此如果识别到用户手机型号为苹果X及以上,App可考虑申请调用系统自带的面容ID。
iPhone11起,还为FaceID增加一个多角度传感器,可以捕捉更宽的视野,让用户可以不用脸部太靠近摄像头就可以完成解锁(https://support.apple.com/zh-hk/HT208108 Face ID官方介绍,感兴趣的可以看一下)。
硬件产品,则要考虑摄像头选型,一般都是选深度相机。
主流的深度相机方案是3D 结构光(3D Structure Light)和时间飞行法(TOF, Time of Flight)。怎么选?要结合实际采集数据的场景来定。
其中,3D结构光就像上述所说,精度高,但有效距离有限。距离越远,物体上投射到的光点越大,精度也就越差;所以3D结构光更适合应用在近距离的人脸识别,手势识别。像支付宝的线下刷脸支付终端就用的是3D结构光摄像头。
而远距离的时候,就适合TOF,比如AR.VR场景更适合用TOF。TOF,ime of Flight,简单来说就是通过光的飞行时间来计算距离。通过红外发射器发射调制过的光脉冲,遇到物体反射后,用接收器接收反射回来的光脉冲,并根据光脉冲的往返时间计算与物体之间的距离。
二、人脸核身操作流程
一般来说分为三步:
1. 采集数据
这一步的目的是为模型采集到质量合格的人脸图片/视频流,并按照采集要求传输给后端。
1)明确要求
首先需要明确要求,包括人脸图像要求和前端采集要求。
人脸图像要求:图像要求,需要产品综合业务需求和模型技术需求,进行确认,人脸比对要求一般包括以下:
- 有大小合适的整个人脸
- 光线充足,不反光
- 人脸无遮挡
- 人脸角度正
- 人脸不模糊
活体检测要求:要根据业务上希望达到的效果和技术采用的方案综合确认。技术原理不同意,则差异很大。
前端采集要求:同样,需要整合活体检测和人脸比对的前端采集要求,形成一套完整的前端采集方案。
举例:
2)人脸检测
“人脸检测是指对于任意一幅给定的图像,采用一定的策略对其进行搜索以确定其中是否含有人脸,如果是则返回脸的位置、大小和姿态。”人脸识别第一步,是检测到图像中人脸的存在。
就像人的认知一样,先认识到有人的存在,在判断这个人是谁。
注意点:
- 如果采用的技术方案是分类,可同时找出图像中的所有人脸,策略上要确认检测到多张人脸时,以哪张人脸为准,如以最大人脸为目标人脸。
- 如果用的是遍历,技术上简单来说指的是在图像中遍历人脸,若将图像全部遍历完,耗时较长,可定策略找到一张符合大小的人脸就结束,如果检测的人脸小于要求,则继续遍历。
3)IQA(图像质量评价)
在图像识别中,所采集到的图像质量直接影响识别结果的准确性和可靠性。好比我远远看到有个人和我打招呼,但是隔得太远,我看不清具体的五官,所以无法判断他是谁。
因此,人脸识别,需要过滤掉不符合人脸识别质量要求的人脸图像,所以需要在采集时做IQA。
在采集时,实时校验人脸的光照条件,姿态角度、遮挡、清晰度,符合质量条件的才会通过进入下一步。采集过程中,图像不符合要求时,根据检测结果提示用户正确的操作。
2.欺诈人脸检测
欺诈人脸检测,指的检测图像是否是欺诈人脸,纸张打印人脸图,人脸照片,电子设备屏幕中的人脸数字图像或者是人脸面具等。
这里说一点,业务侧一般用活体检测这个词,但学术其实说的是Face spoof detection欺诈人脸检测。字面上理解活体检测,指的是检测这个人是不是活体。
比如说带着面具的人,模型应该是判断成活体还是非活体,对于这个问题,用活体或者非活体来定义是有些模糊,用欺诈人脸和非欺诈人脸会更准确。
简单介绍几种常见方法:
- 基于图片纹理差异:无需用户进行繁琐的脸部动作,只要求用户实时拍摄,传入模型一张照片即可,是基于图像纹理差异(摩尔纹、成像畸形等)来做判断,可有效防止屏幕二次翻拍等作弊攻击;
- 基于运动信息:需要用户随机进行眨眼,摇头,抬头等动作。基于用户运动信息,可有效防止纸张,照片等作弊攻击。 因为动作策略是随机的,需要欺诈人脸在极短时间内进行正确的反应,所以对3D建模类攻击也有一定的防范作用。除了眨眼,摇头类,也有读数字的,通过声纹+唇语的方式来判断。缺点是检测耗时长,对用户不够友好;
- 基于面部闪烁 :由于真实人脸与欺骗人脸的材质不同,导致了成像系统反射率有差异。通过屏幕来发射不同颜色和强度的光线,一般是红蓝绿,可有效防止纸张,照片,屏幕等作弊攻击;
- 基于红外:也是因为材质不同,成像系统反射率有差异,但可见光下,区别不是很显著,而红外波段会明显不同。红外活体检测就利用了这一点,可有效防止纸张,照片,屏幕等作弊攻击。 但依赖特殊硬件来发射近红外光。需要特殊硬件;
- 基于3D结构光:前面提过,不赘述。需要特殊硬件;
- 基于TOF:前面提过,不赘述。需要特殊硬件。
3. 人脸1:1比对
比对的时候,同时会对图像做一些预处理。(需要对图像二次加工的产品,则一般有单独的预处理模型。具体,也视公司资源而言…)
用户在拍摄时,难免会受到外在因素的干扰,比如光线、表情、阴影遮挡等,导致图像质量不够好。虽然在采集的时候,我们已经过滤了部分低质量的图像,但为了用户体验,不可能用很严苛的标准。
所以比对的时候,会对采集到的人脸图像做一些处理,比如说抠出图像里的人脸,避免图片里非人像的部分造成影响,调整光线、旋转、降噪尺寸归一化,然后提取出人脸特征,找出关键点,将输入人脸和样本人脸对齐,最后计算出相似度。
4. 业务策略
前面所述大部分都是技术上的流程,这里总结一下,业务上产品能做些什么呢?
注意:以下非必要,需要产品结合业务需求和技术能力权衡确定。
1)限流策略
操作频繁限制。
2)采集超时策略
在xx时间内若采集不到符合要求的图像,则结束采集。
3)用户操作指引
开始采集前,按照人脸图像要求,给用户一定的交互提示,可对后面的图像采集质量有一定正向作用。
如请勿遮挡面部,请保持正视屏幕,保持不动,请保持光线充足。疫情期间,视模型要求和业务要求,可增加“请摘下口罩”指引。
4)屏幕亮度调节
进入采集流程,通过调节屏幕亮度,白底UI等,降低光线对图片成像的影响。注意,这里仅针对RGB成像方案,使用非RGB摄像头就不需要考虑环境光的影响。
5)确认图像采集标准
前文已说,不赘述。
6)检测到多个人脸
人脸比对时,检测到多个人脸,一般以最大人脸为目标人脸;活体检测时,则根据场景考虑是否,有任一非活体人脸则判断不通过。
7)阈值策略
不同场景,阈值标准不一样。
上图是腾讯人脸比对API接口的返回参数之一,借这个介绍一下。
这里返回值里面提供了千分之一、万分之一、十万分之一不同的误识率,不同的误识率下对应不同的阈值。
如果业务上能接受千分之一的误识率下,那么分数大于 40 分,就可以认为是同一个人;但十万分之一误识率要求下,90分以下的就认为他们可能不是同一个人。所以产品要根据业务属性决定以哪个阈值为合格标准。
8)验证失败,弥补策略
算法是概览,也会出错。为了良好的用户体验,可以在人脸验证失败,给用户提供其他验证方式。
9)建立用户个人人脸库,增加比对样本
当人脸识别失败,用户转而用其他方式进行验证,验证通过后,我们可以记录下之前的人脸数据,丰富这位用户的个人人脸库。因为用户的面部是会发生变化,如果一直用一张样本照片,随着时间推移,差异会越来越大,识别会越来不准。
10)注视感知
苹果FaceID的注视感知功能。它能识别用户的眼睛有没有睁开,是否看向手机。只有用户眼睛睁开,且看向摄像头时,才能解锁设备。
这样,其他人就难以在用户不知情的情况下(如在睡着时)解锁设备。这里其实考虑的是生物特征的开放性。相比传统密码,生物特征每天都暴露在公众场合,而且一旦被窃取,就是终生被窃取,不像传统密码一样。
三星部分机型,虽然没有精细到注视感知,不过支持有无睁眼的判断。但注视感知功能,会对部分眼睛有疾病的用户造成困扰,如斜视的用户,所以苹果也提供了关闭这个功能的选项。
简单延伸一下生物特征安全性的问题,怎么样才能防范窃取?
- 首先:要减少不必要的生物特征采集,存储。政府层面应当规范生物特征的采集、存储、传输。
- 其次:要让欺诈无利可图。不断发展相关技术,让欺诈成本远高于收益,比如活体检测,可以检测出纸张,照片,视频等欺诈攻击。而3D面具成本高,且不具备批量复制性质,材质和人脸的区别也可被检测出来。