你刷脸解锁手机的时候,机器并没有像人一样"端详"你的长相。它做的事用一句话说就是:把脸换算成一串特征数字,再拿这串数字去比对,差得少就认,差得多就不认。比对主要用这样一串数字;系统是否还保存原照片,要看具体实现。
拿你每天早上解锁手机来说,完整过程是这样的:你点亮屏幕,摄像头拍下你;系统先在画面里找到"脸在哪",框出来;然后把这张脸换算成一串几百个数字的特征码(可以粗略理解成"眼距多宽、鼻梁多高、下巴多圆"这类信息的数字化,但实际比这复杂得多);最后拿这串数字和你当初录入时存下的那串比一比,差距够小,"咔",锁开了。整个过程不到一秒。
机器"看脸",其实看的是数字
把上面这个过程拆开,关键是四步:
1. 先找到脸在哪里。 一张照片里大部分是背景、衣服、头发。第一步是框出人脸的区域,顺便把脸"摆正"——歪着头拍的也转成正面角度,好跟库存的数字对齐口径。
2. 把脸换算成一串特征数字。 这是最核心的一步。一个训练好的神经网络(一种从大量数据里学会找规律的计算结构,详见"机器学习"词条)会把脸压缩成几百个数字,这串数字叫特征码。它的妙处在于:同一个人换个光线、换个表情,算出来的特征码依然很接近;两个不同的人,特征码就差得远。
3. 算两串数字差多远。 比对不是"看像不像",就是算数:两串数字的距离小到什么程度算同一个人,系统里有一个事先定好的门槛。门槛定得松,容易把陌生人放进来;定得紧,又容易把你本人拒之门外。
4. 比对靠特征数字,存什么还要看系统。 有的系统只在设备内保存用于比对的特征数据,有的系统也会留存照片。这串数字不是直接能打开看的照片,但仍包含敏感的人脸信息,不能把"存的是特征码"理解成没有隐私风险。
把脸换成数字,再做比对
- 01检测与对齐
找到画面中的脸
- 02特征提取
转换为特征向量
- 03比对
按阈值接受或拒绝
图中的数字为示意;各维并非分别对应眼距、鼻高。
解锁手机和车站找人,是两档难度
同样是人脸识别,"确认你是你"和"找出你是谁"的难度完全不是一个量级。
手机解锁是"1对1":你说你是机主,系统只需回答一个问题——眼前这张脸和存的那串数字像不像?一对一比一次,答错的机会很小。
车站、小区门口找人是"1对N":系统不知道你是谁,要把你的特征码和库里成千上万串数字挨个比,挑出最接近的那个。问题来了:库越大,"长得和你像的人"就越多,认错的概率跟着水涨船高。一万人的库里表现很好的系统,扔到一亿人的库里,撞脸误认就会明显变多。这也是为什么大规模排查的结果只能当线索,不能直接当结论。
顺便说一句戴口罩的事:口罩把下半张脸的特征全挡住了,使模型可利用的面部信息变少,所以早期很多系统一戴口罩就失灵——不是机器变笨了,是能用的信息少了。
两个常见误会
误会一:机器像我一样"看脸",所以化个妆、换个发型就认不出。 恰恰相反。机器看的是特征数字,对五官的相对结构敏感,对妆容、发型、眼镜这些表面变化反而不太在意——浓妆艳抹往往照样能认出你。真正影响大的是遮挡(口罩、围巾)和角度(只露半张脸),因为那是实打实少了特征信息。
误会二:机器认出了我,说明它"知道我是谁"。 它不知道。它只知道"这串数字和库里编号 1024 那串很像",至于 1024 是谁、叫什么名字,那是库里另外登记的信息。机器做的是"比对相似度",理解身份是人的事。这也意味着:它可能被长相相似的人糊弄(双胞胎是经典难题),也可能被高清照片、视频欺骗——所以正规系统会加一道"活体检测",通过动作、深度或红外等信息,判断镜头前是不是活人;具体方法和防骗能力因系统而异。