Android端如何实现仅检测真实活体人脸的人脸检测功能
Android人脸考勤的活体检测落地方案
你现在用的基础ML Kit人脸检测能力本身只负责人脸特征识别、关键点定位,没有活体防伪逻辑,所以才会把照片里的人脸也识别成有效打卡对象,要实现仅真实活体人脸通过校验,按从低成本到高安全级的顺序叠能力就行:
- 先砍掉非实时输入入口
直接把示例里支持相册选图、本地文件导入的逻辑全删掉,所有人脸检测的输入帧只允许来自设备摄像头的实时预览流,从入口端先堵死直接传照片作弊的路径。 - 叠随机动作交互式校验(零成本,能挡80%以上低成本作弊)
不要检测到人脸就直接判定打卡成功,在识别到有效人脸后,随机生成1-2个动作指令让用户配合完成,用ML Kit人脸检测本身返回的参数就能做判断,不需要额外接其他能力:- 用
leftEyeOpenProbability、rightEyeOpenProbability两个参数判断眨眼动作,识别到双眼从睁开到闭合再睁开的完整过程才算有效 - 用返回的头部欧拉角参数
headEulerAngleX(俯仰角度)、headEulerAngleY(左右偏转角度)识别抬头、低头、左右转头的动作
注意动作序列必须随机生成,不要固定顺序,每个动作设置3-5秒的超时时间,静态照片、提前录好的固定视频根本没法响应随机的动作要求,普通作弊基本都能挡住。
- 用
- 加实时帧特征校验,挡翻拍作弊
就算有人拿打印照片、手机里的人脸照片对着摄像头晃,也能通过简单的帧特征判断拦下来:- 做帧连续性校验:真实人脸在摄像头前的移动是平滑的,相邻帧的人脸位置、角度、大小变化不会出现跳变,如果连续帧间的人脸特征差值超过阈值,直接判定为非活体
- 做纹理/反光校验:真实人脸是3D结构,皮肤有自然的纹理起伏,平面的照片、屏幕显示的人脸会有规律性的反光、纹理更平,甚至能看到打印网点、屏幕像素颗粒,简单算一下人脸区域的像素梯度方差,和真实人脸的阈值做对比就能识别
- 高安全等级场景直接接成熟活体能力
如果你的考勤场景对防作弊要求很高,要防3D头模、高精度翻拍这类高级作弊手段,就别自己硬写算法调阈值了,直接接入成熟的单目活体检测SDK,这类SDK会直接返回活体置信分,你设置合理的通过阈值就行,准确率比自己凑特征高很多。
没有任何单靠基础人脸检测实现的活体能力能100%拦住所有作弊手段,对于普通企业考勤场景,前面说的锁实时输入+随机动作+简单帧校验的组合完全够用,没有额外成本,落地速度也最快。
内容的提问来源于stack exchange,提问作者user12692788
相关产品推荐
相关产品推荐

