看了整整三天三夜,关于活体检测的源码后,我忽然发觉,我们竟是这般之久,一直被一张照片给欺骗了。
事情得从上周开始讲起,老板给我布置了一个任务,要求给公司的门禁系统增添人脸识别活体检测功能,我那时心里寻思,这能有啥困难之处呢?不就是眨眨眼,再张张嘴罢了。
结果把打开,项目多得让人眼睛花里胡哨。的标星有好几千,-Face-Anti-、这俩,每个看上去都有着很牛的模样。
稍加深入去瞧一瞧,仅仅活体检测这一项就有着好些类别划分:有配合式的,有非配合式的,有静默式的,还有主动式的等等,光这些就已经把我给弄得晕头转向了。
你来看一下,配合式,它的要求,就是要你去配合着做出相应动作,比如说眨眼,再比如说张嘴,还有摇头以及点头这些,而非 配合式,它是不需要用户进行配合的,是依靠红外或者深度摄像头开展直接分析的。
我起初认为配合式蛮不错,毕竟手机支付每日都在用。然而随后思索,倘若有朝一日我匆忙着急出席早会,对着门禁又眨眼再者又摇头,好似一个愚笨之人那般,那般情景美妙得让人不敢直视。
静默活体检测另有不同,你以正常状态走过去,系统凭借分析你皮肤的纹理,还有微表情,甚至血液流动情况来判定真假。
听起来是不是特别高大上?但问题是实现起来坑太多了。
仅用的轻量方案
我为节省成本,先找了个号称“仅用”的轻量方案,源码几百行就完成了活体检测。
那段时日我熬过了好些个漫长的大夜,夜里调试代码成效还算不错,内心满是美滋滋的感觉,等到清晨太阳一并冒出头来,糟糕了,尽是舛误的断言,实际的人脸判定我为虚假的,我拿着一张照片去测试屏幕反倒一次就通过了。
简直了,竟然有一个单核的中央处理器啊就能使得活体检测运行起来了!单单是纯粹的基于Go语言的进行绑定,而那个模型可是才只有12兆字节呀!
做人脸检测采用的是-face,关键点定位运用的是5点模型,活体依靠的是RGB帧时序纹理分析。就是这样的轻量级配置,单人脸检测加上活体识别的整个流程在单核CPU上运行。
绝对不要轻视由这一堆“小模型”所堆砌而成的事物,在产线工位那儿,于那昏暗环境之中,一瞬间就能将人脸辨认出来,然而照片却无论如何都无法通过。
那时,我即刻便认定这桩事情已然成功在望。可是啊,从“能够行进起来”迈向“能够投入商业运用”,其间所存在的距离,要比预先想象的幅度大了许多!
NCNN端侧部署
一提到移动端跑模型,就很难不提及 NCNN 这个框架,它是由 开源的,特地针对移动端进行了优化,能支持跨平台部署,涵盖像 、iOS、Linux 等这些平台,采用纯 C++ 实现,具备体积小速度快的特点。
我尝试着在手机之上运行了NCNN版本的活体检测demo,在首次运行之际,手机出现了些许发热情况,历经一整晚对帧率进行调试后,最终于配置好的模型上运行,尽管脸呈现出有些模糊的状态,然而判断竟然颇为准确。
然而,NCNN存在着一个能够使人感到头疼的方面。要是你的模型并非是它原生就予以支持的层,那么常常会碰到算子不被支持的状况。在那个时候,就必须要自己去编写自定义层或者寻觅替代方案,而这个调试的过程着实是犹如噩梦一般。
近红外双目摄像头的优势
若是普通摄像头,在遇上光线不好的状况时,或者处于夜晚的情况下,其活体检测效果会直接减半,有着明显变化。然而近红外双目摄像头并不是这样的,它有着不同的表现。
通过近红外摄像头来看,多数纸张以及屏幕都无法展现出清晰的画面情形,这样一来就直接将照片翻拍的途径给彻底阻断了。然而真正人脸的红外反射同可见光纹理之间的差别极其显著。
在淘宝购买一个 USB 红外双目摄像头,价格仅仅两三百块,这笔钱确实花得很值得,尤其是当你要应用于做门禁这类场景情况的时候。
动作活体检测源码原理
你若询问我,那个名为“眨眨眼”的此种动作究竟是凭借怎样的方式来实施检测的,实际上它并没有呈现出那般神秘的面貌。其技术所依据的原理实际上是具备一种较为简明的特性的:是借助于眼部具有特定标识与形态关联作用的关键基点对EAR进而对眼睛高宽比的变化情况来展开计算操作的,这里所提到的EAR即Eye Ratio。
下面是简化后的代码示例:
# 关键点获取(68点模型中37-42是左眼,43-48是右眼)
def ():
# 计算左眼EAR
= [25] # 上眼皮点
= [27] # 下眼皮点
ear = ((, ))
ear <
张嘴检测有着近似的原理涉及上下嘴唇间距离出现变化,若状态是抬头,那么是凭借额头与下颌之间相对的位置产生位移去进行判断的,仅仅是从dlib那一套模型当中获取对应关键点坐标就需要耗费不少的功夫了。
上最实用的几个开源活体检测项目
那个被我最终选用且踩坑最深的项目是,它能在离线版安卓设备端达成动作活体检测。
此SDK对张嘴、微笑、眨眼、摇头、点头这些动作的随机组合验证予以支持,(其支持将特定动作去除,像老年人微笑检测若太过苛刻便可关掉),并且对UVC红外双目摄像头也予以支持,所需要的是宽动态值大于100DB且成像清晰的。
最核心的要点在于,整个流程都无需联网,不会保存任何人脸上传,在保护用户隐私这个事情上,这是极为关键的。
另外一个值得予以关注的是-Face-Anti-,它是专门针对移动端做了优化的,其核心算法是基于C++来实现的,它是开源且免费的,它还提供了清晰的接口文档和Demo代码。
如若财政预算为零,于方案之中挑选作为起始步骤,着实颇具性价比。相较于商业SDK那动辄数千乃至上万的授权费用,开源之举可径直为您节省这笔开支。然而,其先决条件乃是您得有能够读懂它C++底层代码之人,不然一旦出现问题,您除了对着屏幕发愣,便什么都做不了啦。
中科院进行开源的的同样是个具备强大功能的工具。其活体检测模块运用的是两级模型架构,第一级是使用.csta模型来开展粗筛工作,第二级则是对其进行进一步的精细化判断。
还有,有着极为完备的功能,它包含了人脸检测这一项目,存在关键点定位这一情况,具备特征提取这一特性,拥有活体检测这一存在,含有人脸跟踪这一状况,有着质量评估这一要点,甚至还包含年龄识别和性别识别这两方面。
在诸如银行或者大型政企这类,有着对稳定性以及权威背书需求的场景当中,的学术背景实实在在是一项能够加分的内容。然而呢,在安卓设备上将它直接进行使用,是存在一定的原生门槛的,只有熟悉JNI以及C++混编,才能够切实地把它运用得得心应手。
的安装坑(我踩过,你别踩)
在开源领域中,堪称一个极为全面且极其厉害的库,它具备支持人脸检测的能力,拥有能够进行人脸识别的本事,还可以实现人脸对齐的操作,同时能开展属性分析工作,甚至就连换脸这种操作它也能够达成。
但这个库的安装,真的是一地鸡毛。
pip 正常情况下常常遭遇失败,缘由在于得借助VC环境来进行编译,而众多开发者对其并不熟知。
解决的方法乃是拿来预编译的那种轮子文件(.whl)去予以安装,首先要明确的版本(我所使用的是3.10),接着去施行下载匹配的版本, – 0.7.3 – cp310 – cp310 – .whl径直进行安装。
等主库安装完毕之后,还需要再去安装的特定版本,并非最新版本就好,在1.14至1.16这个区间才是最为合适的。当初我在安装的过程中选择了2.0版本,然而模型加载的时候却始终出现报错的情况,经过了整整一个晚上的仔细排查工作,才终于找到了版本不兼容这个隐藏的问题所在。
另一点得特别予以提醒,并非全开源的那种,要是你打算在商业项目当中使用它,那就一定要去仔细查看授权协议,我正是由于没有看清楚这一项,以至于差点在给客户产品上线之前就踩到重大的法律风险。
工业落地的真实考验
让源码跑通了Demo,更大的噩梦才刚刚开启。我的门禁系统安放在一个靠着窗户的位置,下午两点阳光直射之际识别率直接出现“血崩”状况。后来才发觉需要配备宽动态(WDR)值大于100DB、成像清晰且抗逆光的摄像头,更换了一个宽动态摄像头过后效果确实好了不少,不过也增添了额外的硬件成本。
区分黑白人种的识别准确率居然是个潜藏着诸多问题的大坑,于某个外企项目所进行的门禁测试期间,我们所采用的算法针对白人面孔的识别表现相对而言还算得上是比较良好的,然而针对黑人面孔的误判率在某一阶段竟然一度高达8%,后续经过了解才知晓众多开源模型主要是在东亚人种数据集之上展开训练的,这般状况致使对于不同肤色样本的泛化能力存有着极大的差距,无奈之下不得不另外去搜集几千张具备不同肤色的图片来进行微调,这样费尽周折之后才好不容易把误判率压制到正常的范围之内。
活体检测的商业化与现实困境
现实中推出活体检测商业化的具体方案所要面对的是具备多层面的挑战,要是你已然顺利运行了提及的活体检测源码 ,先别太早得意,毕竟市场里众多的实际攻击现象远比你所想象那般狡黠。
对于活体检测的防御能力而言,视频注入攻击、高精度3D面具、实时换脸等都在进行考验,除了那种一次性静态照片这种初级攻击方式以外。
着重想要讲一讲视频重放攻击,攻击者预先录制一段目标人进行动作的视频,随后在认证之际对着摄像头予以播放,配合式活体检测要是未进行帧率连续性校验,极有很大可能性会被欺骗过去。
除此之外,造成的称得上是最大的隐患,2025年最新的对抗样本生成技术,已然能够实现实时换脸,并且模拟基本的眨眼以及张嘴动作,仅仅依靠传统的“眨眨眼张张嘴”的活体检测方式,在如今已经远远不足够了。
行业前沿的我们,已然在尝试着结合近红外成像,以此去检测皮肤下的血液脉搏信号,并且还用3D结构光来分析人脸三维轮廓这类更为底层的生物特征,它们的防御深度,远远高于表面的动作执行了。
不过呢,硬件成本以及背后的算法复杂度出现了增长,增长幅度起码达到了两个量级之多,好多从事这个行业的中小型企业,虽然有使用的想法,可根本就没有能力去使用,承担不起这样的成本。估计这大概就是在当下活体检测这个领域里,存在着的最大的矛盾之处了吧。
间断不连续地摸索了好些日子,我从起初那个觉得“活体检测也就那般”的初出茅庐的小子,转变为如今对面部活体检测怀揣着深深满心敬畏之情的老手。这大概便是——技术越往深入钻研,理解越发透彻,反倒敬畏愈发深沉。

