把人脸验证装进浏览器:6.5MB 模型实现门禁级 1:1 比对
人脸验证涉及敏感生物信息,最理想的隐私设计是照片根本不上传。我们用 face-api.js 在浏览器本地完成人脸检测与对齐,仅上传对齐后的人脸小图,服务端用 ArcFace 模型做 1:1 比对。本文记录架构设计与两个关键踩坑。
架构:浏览器检测对齐,服务端比对
face-api.js(TensorFlow.js)提供三个轻量模型:人脸检测 190KB、68 关键点 90KB、特征提取 6.3MB。前两个在浏览器完成人脸检测与关键点定位;按双眼参考点做相似变换,裁出 112×112 的标准人脸小图上传;服务端用 InsightFace ArcFace(w600k_r50)提取 512 维特征,与白名单做余弦相似度 1:1 比对。
隐私效果:访客照片不离开浏览器,传输的仅是对齐后的人脸小图(比对完成即丢弃),满足最小化采集原则。
踩坑一:浏览器端模型的区分度天花板
我们最初把特征提取也放在浏览器(face-api.js 128 维特征),服务端只做比对。实测六张完全不同人的人脸,两两余弦相似度高达 0.79~0.91——无论阈值怎么设,陌生人都会被误判为白名单人员。
结论:face-api.js 的 128 维特征可以做人脸检测与对齐,但做不了可靠的跨人判别。判别必须交给服务端的工业级模型(ArcFace 512 维:同人 0.5~0.8,陌生人 <0.25,界线分明)。
踩坑二:对齐参考点偏移 14px 的代价
ArcFace 模型对输入人脸有严格的空间规范(双眼中心参考位约 y=51.6)。我们最初把双眼中心放在 y=66——仅 14px 的偏移,导致两个不同人的相似度虚高到 0.56(误通过),而修正为标准参考位后,同一个对比的相似度骤降到 0.12(正确拒绝)。
教训:做人脸特征比对,对齐环节的亚像素级精度都值得较真。
实测数据
同人验证(含亮度 +25%、旋转 4°、缩放 85% 变体):相似度 0.886~1.0,全部正确通过。陌生人:最高相似度 0.076,全部正确拒绝。检测+对齐在浏览器端毫秒级完成,服务端比对为常数开销。
有类似需求?
📞 18105711537
联系御码,获取与贵司业务匹配的技术方案与报价。
