实名认证上线两周,投诉里有一条:用户拿身份证照和自拍做比对,接口返回相似度 62,系统判不通过。人眼一看就是同一个人。

人脸比对是 1:1 的活。先把两张图里的人脸框出来,按关键点做对齐,再各提一个特征向量,算余弦相似度,最后映射成 0 到 100 的分数。分数不是概率,别理解成 62% 像。

分数低先看哪个环节坏了

常见原因就那么几个:人脸太小,两眼距离不足 60 像素;侧脸超过 30 度;逆光或顶光把鼻影压死;口罩、刘海、粗框眼镜遮挡;自拍开了强美颜,脸型被磨平。身份证那张多是复印件翻拍,清晰度差一档,也会拉低分数。这些该在上传前就卡掉,而不是事后调阈值。

底库照片的质量同样关键。证件照翻拍、反复压缩、十年前的老照片,特征本来就模糊。建库时统一裁切人脸、控制长边尺寸,比事后调算法有效得多。

阈值不是越低越好

各家文档给的推荐阈值不一样,常见落在 70 到 85 之间,要以具体接口为准。1:N 检索的阈值必须比 1:1 高,底库越大误识率涨得越快,千万级底库想压到万分之一误识,阈值往往要 90 以上。业务上把 1:1 阈值从 80 调到 65,通过率会明显上升,冒用的口子也跟着开。

活体是另一半工程

照片翻拍、屏幕翻拍、面具攻击,靠相似度拦不住。动作活体让用户眨眼转头,静默活体靠单帧纹理和摩尔纹判断,红外双目成本更高但最稳。金融类业务一般要求活体和比对两步都过。

接入时容易忽略的细节

  • 图片格式:base64 不要带 data:image 前缀,大小压到 200KB 以内,长边 1080 足够
  • 人脸像素:人脸框建议不小于 100×100,低于 80×80 基本白测
  • 并发限流:免费额度常见 QPS 1 到 2,批量跑数据要排队
  • 失败重试:网络超时和无人脸要分开处理,前者能重试,后者重试没意义

人脸属于敏感个人信息,采集前要单独同意,还得给不愿刷脸的人留一条人工审核的路,这条不是可选项。阈值守住文档推荐值,把精力放在前置质检和人工复核上,靠降阈值提通过率迟早出事。