人脸数据采集的意义
- 搜集识别算法、活体检测等算法训练样本
- 搜集识别、活体检测等算法准确性的测试集
人脸采集和动作活体
- 人脸库采的照片有半张嘴,要么闭眼的情况,是采集时让用户进行动作活体导致——眨眼、张嘴。
- 采集应该在动作活体之前或者之后进行,比如动作活体之前增加一个请注视屏幕的环节。
动作活体时采集的照片对识别性能的影响
- 采集到张嘴眨眼的照片,对识别或者静默活体校验有什么影响?
- 主要是会影响识别性能,影响多少需要专门的测试库进行测试比较,所以需要准备相应的测试库。
- 而且各个人脸识别应用场景都应该建立标准库,以测试得出准确率,达到上线指标再上线。
- 但在开启服务阶段,建立测试集难度有点大,只能先搜集数据。
建立负样本测试集
- 在做动作活体时有意识的采集闭眼的照片或者张嘴的照片,就可以采集负样本测试集。
- 负样本测试集的数量没有那么高的要求,几百几千几万都可以做标准库。
- 最好能离线测试,而不是上线后去进行测试。
- 如果能上传整个识别过程的视频最好,可以根据需要去切分帧出来。记录的视频也可以用于动作活体的训练。
- 没检测到人脸的照片,也可以用来训练人脸检测算法。
视频数据采集
- 视频的话会有编码压缩,对动作活体和人脸识别影响不大,但对静默活体可能是有影响的,所以最好是视频和图片都有。
- 人脸检测采集SDK需要支持传视频流,SDK是一直在处理视频流。业务方在触发开始采集和结束操作时,可以打开SDK的视频采集开关。
- 人脸SDK接收的是byte[]类型的数据,不管是照片流还是视频流,业务方只需要在传入数据的时候按照这个格式来传递就可以。
- 常见的非活体攻击类型主要有:1、照片攻击;2、屏幕播放攻击(包括视频或者照片或者远程遥控);3、软件模拟。使用目前的打印照片翻拍和手机(多种不同手机类型)屏幕翻拍,已经足够覆盖大部分常见的攻击,包括软件模拟(等效于翻拍)。剩下的一些可能的非活体攻击,如易容等(也有目前我们暂时还没有想到的某种攻击方式),攻击成本可能会比较高
人脸识别平台视频流数据的存储方案
- 视频流数据是一帧一帧的,每一帧数据都是byte[ ]格式。
- 前端形成视频流的时候没有视频压缩编码,直接把每一帧串联成视频发到后台。
人脸数据采集需求汇总
- 视频流:调用SDK将发起注册、识别时的视频流采集下来,供动作活体和人脸识别算法。
- 发送视频流。目前是为了积攒样本所以要采集视频流,后期大规模使用的使用的时候,如果考虑到带宽和存储空间,就不用采集了,或者随机采集部分用户的就可以。
- 人脸照片:调用SDK进行配置,扩大框脸范围。例如采集动作活体前和动作活体中的照片,供对比研究不同脸部姿态对识别性能的影响。
- 发送照片。如果能发送完整照片最好,如果不能,就发送人脸框扩大区域。
静默活体对人脸数据采集的要求
- 发送完整照片,是为了看到有人恶意用屏幕或者照片翻拍的边框,为活体检测算法考虑的。
- 静默活体部署在后端要求尽可能的传送越多的数据越好,等后面算法足够完善了就不需要这么多数据了,只需要针对性的采集就可以。比如发现某个用户或者某种类型的照片在活体或者识别上效果不好,就针对性的采集就好了。
- 静默活体算法的本质是判断当前照片的纹理是活人还是纸张屏幕等其它非人体皮肤的物质,再加上去检测是否有照片或者屏幕的边框。缺点是很难通用,不同场景就得训练不同模型,因为不同相机的成像质量不同。
- 需要采集比较多的数据进行算法训练,需要业务方配合。
静默活体和动作活体结合
- 动作活体和静默活体结合使用,而不是只用哪一种,比如以动作活体为主,将静默活体算法的活体通过率调高,非活体攻击尽可能的拦截。
- 百度旷视等各家云平台活体检测算法,至少都有四五种,就是因为哪一种其实都是不可靠的。
- 凡是能防住视频攻击的动作活体,一定不只是简单的动作活体,内部可能嵌了不少其它辅助活体检测算法,就比如摩尔纹检测,边框检测,肤色检测等等。
人脸采集交互
- 设置一个区域,人脸落在这个区域里面才会检测,落在这个区域外面,就提示请靠近摄像头中心。人脸过大和过小都可以给出提示,比如请靠近摄像头,请远离摄像头。
- 如果不提这些要求,大规模使用后,千奇百怪各种姿态都会看到的。甚至画一个小头,引导用户摆在合适的位置。
- 重点是不合规姿态下,要有反馈提示。