百度人脸识别使用指南-人脸采集应用场景方案 | ||||||||||||||||||||||||||||||||||||||||||||||||
产品推荐: 1、安全稳定的云服务器租用,2核/2G/5M仅37元,点击抢购>>>; 2、高防物理服务器20核/16G/50M/500G防御仅350元,点击抢购>>> 3、百度智能建站(五合一网站)仅880元/年,点击抢购>>> 模板建站(PC+手机站)仅480元/年,点击抢购>>> 4、阿里云服务器2核2G3M仅99元/年、2核4G5M仅199元/年,新老同享,点击抢购>>> 5、腾讯云服务器2核2G4M仅99元/年、新老同享,点击抢购>>> 点击这里申请百度智能云特邀VIP帐号,立即体验人脸识别>>> 百度人脸识别使用指南-人脸采集应用场景方案 概述核心概念人脸识别的应用场景,核心可以分为两大类:
而以上场景的几乎所有业务过程,核心可以分为两个步骤:
要想确保人脸识别的应用效果得到保障,最为核心的一个环节即人脸的获取,即人脸采集。目前市面上所有人脸识别应用落地,面临的主要问题就是应用环境复杂,包括光照、遮挡、作弊攻击等一系列环境因素干扰,涉及产品策略、硬件选型、施工方案等多个维度地综合作用,才能不断提升最终效果。 为了更好地帮助您完成人脸采集步骤,下文将详细介绍采集过程中的一些SDK、API、硬件相关内容,希望对您的人脸识别集成有所帮助。 流程概览目录导览目录导览如下,文档内容较长,但前后具备相关性,建议顺序阅读。 准备工作 - 账号及应用 - SDK - 采集设备 - API接口
采集指标 - 质量控制 - 概述 - 遮挡 - 模糊度 - 光照 - 姿态 - 其他 - 活体检测 - 概述 - 有动作活体检测 - 静默图片活体检测 - 视频活体检测 SDK采集 - 概述 - 功能介绍 - 支持平台 - 规格参数 - 场景版本 - 离线质量检测 - 离线有动作活体检测 - 开放参数配置 - 应用方案建议 H5采集 - 概述 - 质量检测——API方式 - 活体检测——API方式 - 图片裁剪与压缩
采集设备 - 概述 - 手机 - 平板 - 近距离人脸采集开发组件 - 中远距离人脸采集开发组件 - 远距离人脸采集开发组件 准备工作磨刀不误砍柴工,在正式讲解人脸采集细节前,让我们先梳理下必要的前置准备工作。 1、账号及应用在进入实际开发前,请先阅读 新手指南,指南中详细地讲解了开放平台账号及应用的创建及管理操作。 新手指南中主要讲解三件事情:
以上三项事宜是使用公有云服务的必备步骤,也是后续很高频使用的内容。 2、SDK平台目前提供两种类型的人脸识别SDK,如下:
服务端SDK服务端SDK内部封装了所有人脸识别API,并增加了超时设置接口、自动token更换等功能,便于您快速上手调用API。目前支持Java、PHP、Python、C#、C++、Node.js 6个常用语言版本。通常用于在服务器端,完成与百度人脸识别API的请求交互操作。 您可以直接 前往下载,无需任何资质条件,下载后在SDK中替换您自己的API-Key、Secret-Key即可使用。 客户端SDK客户端SDK将人脸采集这个步骤放到前端解决。内部封装了离线人脸检测、跟踪、质量校验、活体检测、图片捕捉功能,但人脸实名认证、1:1、1:N识别还需调用在线API接口。 目前对外开放iOS、Android两个手机端版本。 客户端SDK需要 提交申请,流程分为以下几步:
申请通过后,您即可创建人脸实名认证项目及APP方案,获得对应示例工程源码。 SDK默认配备4个产品线授权(产品线指:基于应用维度,如一款APP即为一条产品线,如手机百度 iOS/Android APP,依据为Bundle ID或者Package name),4个授权基本可以满足大部分的产品业务需求,如果需要更多的产品线授权,请认真填写信息、申请增加授权数量。 SDK的使用,涉及有效期,有效期过后,SDK本地功能将会不可用,SDK会自动向百度服务器请求拉取最新的授权license(需要联网),如果对这个产品线的授权在服务端操作了延期,则SDK会在过期后的第一次初始化时,自动更新本地license,完全不影响用户使用。 默认申请通过后,我们会送您3-6个月免费测试期;如果需要正式使用,可以提交延期申请,并注明申请理由,具体操作请在 后台管理,如下图所示: 3、采集设备实际使用中,方案的最终使用,都需要配合前端采集的硬件设备,目前对于常规人脸需求,几种选型方案如下:
以上仅为简单列举,后文会对硬件选型进行详细介绍。 4、API接口人脸采集后,仅是在前端设备上拿到人脸图片,实际的1:1、1:N识别仍要通过API调用实现。 目前平台提供的接口分为以下几种:
采集指标质量控制概述人脸识别或对比的最终效果,取决于人脸在采集过程中,采集到的人脸是否符合标准质量要求。从业务使用角度,主要影响两个核心业务步骤:
人脸的质量检测,概括起来包括以下几点:
另外在实际采集过程中,也会将姿态作为一个重要控制指标:
人脸采集步骤,需要做好以上5项的条件判断,从而确保最终识别效果。当您拿到一张新的人脸图片,如果需要判断上述5项的具体分析结果,可以调用 人脸检测接口 ,此接口通常用于做常规质量控制的接口实现最佳方式;或者申请使用 客户端SDK 进行校验,SDK内置了质量校验模块,可以对输入的视频流进行动态实时的质量校验。 下面让我们一起详细看看这5个质量检测项: 遮挡Occlusion: 人脸中各个部位的遮挡程度判断,区域可以分为:左眼、有眼、鼻子、左脸颊、有脸颊、嘴巴、下巴,共7个区域。通常某一个或者多个区域遮挡面积过大,会影响最终的识别效果,可以通过区域的遮挡值,在产品侧给用户比较明确的产品反馈提示,供用户参考调节。 每个区域的建议阈值选择如下: 取值范围:[0~1] 0:无遮挡 1:完全遮挡
left_eye : 0.6, //左眼被遮挡的阈值 right_eye : 0.6, //右眼被遮挡的阈值 nose : 0.7, //鼻子被遮挡的阈值 mouth : 0.7, //嘴巴被遮挡的阈值 left_check : 0.8, //左脸颊被遮挡的阈值 right_check : 0.8, //右脸颊被遮挡的阈值 chin_contour : 0.6, //下巴被遮挡阈值
下面展示三个示例图片,用于理解遮挡的概念: 【示例一】 分析:脸颊有一定头发遮挡,但都在阈值范围内,整体问题不大。不过为了更好的识别效果,如果可以向用户反馈提示文案的话,可提示用户重新整理右脸颊侧的头发,并重新录入人脸。而文案触发机制可以设定一个更严格的产品自定义阈值。 "occlusion": { "left_eye": 0, "right_eye": 0.12301587313414, "nose": 0.016585364937782, "mouth": 0, "left_cheek": 0.013826940208673, "right_cheek": 0.66922038793564, //右脸颊遮挡较大 "chin": 0.13753361999989 } 【示例二】 分析:脸部各区域都些许遮挡,都未到达阈值,大小相对适中,不影响正常使用。对于识别精准度比较严格的场景,倒也可以提示重新录入。 "occlusion": { "left_eye": 0.055045872926712, "right_eye": 0, "nose": 0.1026463508606, "mouth": 0.33571428060532, "left_cheek": 0.18918919563293, "right_cheek": 0.38289964199066, "chin": 0.38516879081726 } 【示例四】 分析:右眼明显遮挡严重,随是艺术照示意,但是在实际应用场景中,主要由于发型原因,存在很多眼镜部分被头发遮挡较严重的情况,产品应用时建议提示用户整理下头发再重试。 "occlusion": { "left_eye": 0.032388664782047, "right_eye": 0.90909093618393, "nose": 0.030821917578578, "mouth": 0, "left_cheek": 0.22132650017738, "right_cheek": 0.23717948794365, "chin": 0.0049975011497736 } 【示例四】 分析:因为戴墨镜,导致左右眼遮挡很大,这种情况可直接提示用户摘下眼镜,并重新录入一张。同理,对于口罩、长发等也可以如此操作。 "occlusion": { "left_eye": 0.71283352375031, "right_eye": 0.93929713964462, "nose": 0.22417153418064, "mouth": 0.37142857909203, "left_cheek": 0.089686095714569, "right_cheek": 0.64788734912872, "chin": 0.66417443752289 } 模糊度Blur: 人脸的模糊程度,取值范围:0~1,0是最清晰,1是最模糊,通常 小于0.7 即可认为是符合条件。 下面展示三个示例图片,用于理解模糊度的概念: 【示例一:原清晰图】 "blur": 6.6545192967116e-11; //科学计数法,实际数值非常小 分析:模糊度极接近0,十分清晰,可放心使用。 【示例二:人脸些许模糊】 "blur": 0.0000016524913917237; 分析:模糊度接近于0,远小于0.7(建议的阈值),可放心使用。 【示例三:人脸十分模糊】 分析:模糊度接近于1,不可使用。这种情况通常为摄像头未对好焦距,如手机没有拿稳,或摄像头焦点主体错误,通常可提示用户保持身体稳定不动,正视镜头即可。 "blur": 0.99997198581696; 光照illumination: 人脸部分光照的灰度值,反映脸部的光照情况,以及客户端SDK中,YUV的Y分量;取值范围[0~255],0表示光照不好。人脸过暗对于识别会有显著影响,所以通常在所有质量校验中,要优先保持人脸的光照充足。 人脸采集过程中,常遇到的光线问题,一般分为以下几种:
以上问题,主要原因主要分为以下几种:
所有问题中,逆光往往是最严重的问题,大部分的人脸采集设备是在白天作业,摄像头在逆光情况下,采集到的脸部光照会很暗,导致识别不到人脸或者识别效果差。这种情况,通常可以有以下几种应对措施:
从接口返回值来看,推荐阈值如下: "illumination":40 //大于40通常认为光照满足,推荐40~100之间 下面展示一个例子,用于理解光照的概念: 【示例一】 分析:过暗的情况,人脸的识别往往存在误差,甚至识别不到,这种情况需要在采集设备周围增加补光设备。 "illumination": 20; 【示例二】 分析:阴阳脸。往往是光源位置角度问题,导致某一边人脸光线明显不足,需要确保实际应用过程中,光线分布均匀。 "illumination": ; 姿态姿态角分为Pitch、Roll、Yaw,用于表示人脸在空间三维坐标系内的角度,常用于判断识别角度的界限值。 各角度阈值如下: Pitch:三维旋转之俯仰角度,范围:[-90(上), 90(下)],推荐俯仰角绝对值不大于20度;
Roll:平面内旋转角,范围:[-180(逆时针), 180(顺时针)],推荐旋转角绝对值不大于20度;
Yaw:三维旋转之左右旋转角,范围:[-90(左), 90(右)],推荐旋转角绝对值不大于20度; 各角度范围示意图如下: 从姿态角度来看,这三个值的绝对值越小越好,这样代表人脸足够正视前方,最利于实际注册/识别使用。 但在实际应用场景中,由于摄像头的布设位置,往往无法拿到正对人脸的图片,主要分为以下几种情况:
下面展示两个示例图片,用于理解姿态角的概念: 【示例一】 分析:通常线下应用过程中,难以获得相对正面的人脸图像,姿态判断需要作为一个标准的校验项。 "yaw": 16.319696426392, "pitch": -4.8351268768311, "roll": 2.0234982967377, 【示例二】 分析:如果是将摄像头置于棚顶或室外高处,往往获取到的人脸图片,pitch值比较大,需要特别关注。 "yaw": -10.153998374939, "pitch": 19.434478759766, "roll": 1.6366827487946, 其他完整性 可以使用v2/detect接口中的qualities->completeness参数判断。此参数用于判断人脸完整度,返回只有0或1两种结果, 0为人脸溢出图像边界,1为人脸都在图像边界内。通过此参数可以简单判断人脸是否全部置于画面内,做一定的条件校验。 真人/卡通 可以使用v2/detect接口中的qualities->type参数判断,此参数分为human和cartoon两个值,取值范围为[0~1],置信度大于0.5即可判断为真人或者卡通。通过此参数可以简单判断画面中是否存在真实人脸,避免一些动画、素描、油画等人像的仿冒。 活体检测概述根据应用场景及安全性要求的不同,目前提供不同的活体检测算法和策略,具体包括:
实际采集过程中,为了确保业务流程的合理性,需要确保采集的图片为真人操作,避免其他用户恶意伪造作弊。而以上几种活体检测策略,需要根据业务场景选择最合适的一个或组合方式。下面简单举例一些常见的活体攻击类型: 打印照片 照片抠图 照片变形 手机照片翻拍 Pad/PC照片、视频 照片背景替换 换脸 2.5D动画 3D动画 高仿面具 实时炫瞳活体检测产品架构:APP、H5 基于屏幕颜色打光,结合服务端识别面部及瞳孔反光情况,拦截假体攻击。无需用户拍摄视频上传,不占用带宽等服务资源,减少前后端交互耗时。建议炫瞳活体结合动作活体,增加攻击的难度。炫瞳活体检测会输出1张最佳人脸图片,请求后端活体服务进行验证。需要强调的是,在此策略下,前端仅仅检测动作的通过情况,并不对视频和真人做出区分。 通过实名认证方案接入 实时动作活体检测产品架构:APP、H5 客户端SDK,在前端离线随机要求用户,配合做出眨眼、张嘴、点头、抬头、左摇头、右摇头动作,同时检测用户完成情况。在做动作的过程中,SDK会随机抓取几帧图像,并在动作通过后将抓取的图像上传到后台进行活体判断。需要强调的是,在此策略下,前端仅仅检测动作的通过情况,并不对视频和真人做出区分。 该方案的优势在于:随机动作可以增加攻击的成本,并且大大降低打印照片等攻击通过的概率,而这些正好对于后端检测算法来说属于较难案例;另外,活体判断所用的多张图片为前端在完成动作过程随机抓取,因此加大了攻击暴露出破绽的可能性;同时,多张图片可以提高采集到高质量真人活体图片的概率,因而可以采用一个更高的采信阈值,而该阈值对应的活体分数攻击图片则很难达到。
实时静默活体检测产品架构:APP、H5 该方案为用户配合度最低的使用方式,无需做任何动作即可完成活体检测。但是活体检测的效果不是十分理想,主要是由于:由于没有随机动作或炫瞳模型,增加了打印照片等攻击通过的概率。另外,静默活体只上传一张图片,增加了误判的可能性。 通过实名认证方案接入 静默图片活体检测产品架构:H5 该方案为接入成本最低的使用方式,只需提交一张人脸图片即可。但是活体检测的效果不是十分理想,主要是由于:区别于客户端随机抓拍的方式,H5拍照为主动有意识拍照,因此攻击者可以更加方便的设法减少出现后端算法判断的线索,并且在这个过程中用户可以调用后置摄像头进行拍照,前置摄像头和后置摄像头由于焦距的不同,会使后置摄像头拍摄的攻击图片更难分辨真假。另外,H5拍照只上传一张图片,增加了误判的可能性。 通过实名认证方案接入 录制视频活体检测-静默/读数字/动作产品架构:H5 该方案主要应用于H5方案,优势主要在于:可以结合语音或动作校验码,提供更加严谨地活体检测,视频流在云端会进行类似于有动作检测的随机抽帧,基于多帧进行综合的判断,可以采用更高的采信阈值,大大增加了作弊成本,也增加了暴露破绽的可能性。通过语音/动作校验码验证视频为非伪造,交互体验方面,也较能为用户所接受。 通过实名认证方案接入 活体阈值
关于以上数值的概念介绍:
人脸离线采集SDK概述客户端人脸离线采集SDK,具备SDK本地的人脸采集、活体检测、质量检测相关功能,可以更高效准确地,实时采集到符合质量的人脸,配合手机设备,能够快速构建实时人脸采集能力。 客户端SDK申请地址 功能介绍人脸检测 设备端离线实时监测视频流中的人脸,同时支持处理静态图片或者视频流。 人脸跟踪 对当前检测到的人脸持续跟踪,动态定位人脸轮廓,稳定贴合人脸。 人脸关键点 对当前检测到的人脸持续跟踪,并动态实时展现人脸上的核心关键点。 人脸图片采集 在人脸检测及追踪过程中,完成人脸图片采集,并输出预设条件的人脸图片 人脸质量控制 在人脸检测及追踪过程中,实时校验人脸的姿态角度、遮挡、清晰度、光照条件,符合质量条件的才会被采集。 炫瞳活体检测 通过屏幕上闪烁不同颜色的光线,判断当前用户是否真人操作。通过颜色活体进行面部反光鉴别的同时,百度特加入独有的瞳孔反光识别,提升整体的攻击拒绝率指标。 动作活体检测 给出指定动作要求,用户需配合完成,通过实时检测用户眼睛,嘴巴,头部姿态的状态,来判断是否是活体。支持6种预设动作,可自定义哪些生效以及检测顺序。 静默活体检测 无需用户做动作,直接采集摄像头中的人脸,用户体验较好,适用于内部员工打卡考勤场景。支持APP/H5方案使用。 开放参数设置 SDK内部支持高度可定制化参数,对人脸检测、追踪、采集、质量模块进行个性化调整。 UI自定义修改 SDK内部所有UI层代码、音频文件全部开源,可根据实际业务需求任意调整。 多种场景版本 提供iOS、Android双端覆盖,适应各种应用场景及主流手机。。 支持平台
规格参数
离线质量检测客户端SDK中,内置了人脸质量检测模块。在人脸检测及追踪过程中,实时校验人脸的姿态角度、遮挡、清晰度、光照条件,符合质量条件的才会被采集,此质量校验为本地离线校验。 离线有动作活体检测客户端SDK,离线本地实时反馈人脸中眼睛,嘴巴,头部姿态的状态,通过给用户设定完成相关动作,判断是否是活体。支持指定生效的动作及应用顺序。 开放参数配置最小检测人脸 在检测人脸过程中,可设置检测到的最小人脸尺寸,小于该尺寸或比例的人脸不会被检测到。 采集姿态角控制 在检测人脸过程中,可设置采集图片时的人脸姿态角度阈值,阈值范围内才会采集人脸。 采集人脸质量控制 在检测人脸过程中,可设置人脸关于光照、清晰度、各部位遮挡的阈值,符合条件才会采集图片。 采集图片设置 可设置采集人脸图片的数量、大小、以及人脸与图片的大小比例,超过图片边界将用黑色填充。 活体检测动作设置 支持炫瞳活体检测;支持眨眼、张嘴、摇摇头、左右转头、上下点头六个指定动作,可设定具体生效的动作,以及校验顺序;支持静默活体。 应用方案建议数据传输SDK本地采集人脸的过程,完全无需联网。但人脸实名认证、图片活体检测、人脸对比分析能力需要调用API使用。产品策略方面,因API使用需要使用在线鉴权token,生成token的API Key和Secret Key,考虑到数据安全和维护成本,建议都置于Server端,并下发token到客户端产品,实际的API调用,由Server端做中转控制。 图片压缩SDK支持采集图片的大小设置,以及人脸和采集图片的比例设置,可基于业务需要,对采集图片大小进行适当地进一步加工。如剪裁(人脸不小于100px)、分辨率压缩(最小宽度200px左右)、质量压缩(控制在0.8以上),以上三种处理方式也可以组合叠加使用。 数据安全对安全有进一步需求的话,为防止人脸传输过程中被篡改,可对SDK本地输出的人脸图像做加密处理,在server端进行相应解密操作,进一步增强安全性。 话术提示手机把握姿态: H5采集概述H5采集是一种常用的人脸采集方式,因为很多情况下,很多产品并没有原生APP,往往基于H5或者微信小程序等,快速验证业务流程,或者进行线上人脸数据冷启动。但因为H5形式的权限问题,往往只能通过拍照或录制视频上传形式进行活体检测。
传统H5活体检测方案的劣势
活体检测H5方案方式 通过H5人脸实名认证方案接入,实现实时炫瞳/动作/静默活体检测、录制动作/读数字/静默视频活体检测、拍照上传图片活体检测,结合人脸实名认证或人脸比对完成身份核验全流程。 API方式
H5 js-sdk方式 通过私有化部署H5的采集SDK、活体检测部署包,实现从服务端发起实时炫瞳/动作/静默活体检测、录制动作/静默视频活体检测、拍照上传图片活体检测的请求。 活体检测具体阈值选择如下所示:
关于以上数值的概念介绍:
图片裁剪与压缩用户在提交图片后,最好不要直接用来做业务处理,可以让用户自行剪裁以下图片,保留人脸部分,这样可以更好地完成前端图片的压缩,并满足标准图像的录入。 无论是否做过手工剪裁,都可以基于人脸检测接口,取到人脸的标准框位置,基于四个关键点进行人脸部分的进一步自动剪裁,减少图片的大小,总而减少网络传输耗时。通常建议:剪裁(人脸不小于100px)、分辨率压缩(最小宽度200px左右)、质量压缩(控制在0.8以上),以上三种处理方式也可以组合叠加使用。 采集设备概述可基于Phone、Pad、摄像头+开发板等形式,快速搭建人脸采集前端设备。摄像头实时向开发板输入视频流,SDK运行在ARM开发板上,对视频流中的人脸实时处理,并输出符合条件的人脸图片。 手机应用场景 对于远程开户、刷脸登录、移动考勤等手机端场景,可将iOS/Android SDK集成到现有APP应用中,在设备端离线完成人脸采集,确保采集图片质量的同时,提供更加流畅的交互体验。也可以基于微信小程序,或者H5形式,完成业务快速落地。 适用采集人数 1人。 产品架构 手机+客户端SDK、微信小程序、H5等 产品形态 APP、H5、小程序等 核心性能需求 暂无要求。需要注意的是需要根据业务特点,做好系统版本或者浏览器版本的兼容工作。 平板应用场景 对于考勤、签到、闸机等近场景人脸识别,需要用户配合式刷脸、且需要页面反馈的业务需求,可直接开发APP应用于Pad设备上,设备布设简单,应用开发难度低,可快速进行业务落地。 适用采集人数 1人。 产品架构 Pad+客户端SDK、H5等 产品形态 APP、H5等 核心性能需求 暂无要求。需要注意的是需要根据业务特点,做好系统版本或者浏览器版本的兼容工作。同时需要考虑设备的性能问题,例如闸机等场景,需要考虑Pad性能对于人脸采集效率的影响。 近距离人脸采集开发组件应用场景 多用于近距离的人脸采集场景,如闸机、门禁、柜台身份核验、自助售卖机等。为配合用户交互反馈,可根据业务需要,外接一块显示屏幕设备。 适用采集人数 1人。 产品架构 USB摄像头+ARM开发板,为配合交互反馈,可外接一块显示屏幕设备。 产品形态 摄像头一体机 核心性能需求
数据参考 我们对USB+ARM的技术方案,做了一些参数调整,所得实验数据如下,仅供参考: 应用建议(以自助柜机为例)
中远距离人脸采集开发组件应用场景 多用于中远距离的人脸采集场景,一般光线练好、人流量较少,如无感知闸机、考勤签到、会员识别等,为配合用户交互反馈,可根据业务需要,外接一块显示屏幕设备。 适用采集人数 1~5人。 产品架构 网络摄像头+ARM开发板 产品形态 监控枪机/半球形摄像头一体机 核心性能需求
应用建议(以闸机为例)
示意图如下: 远距离人脸采集开发组件应用场景 摄像头内集成离线人脸抓拍功能,可在一体机内完成人脸的检测、跟踪、捕获等操作,布设更简单,多用于远距离人脸采集及人流量较多的场景,如室内/外监控、零售客群分析、安防布控等大部分远场人脸识别场景。此方案采集的数据一般直接用于后端分析使用。 适用采集人数 1~50人. 产品架构 抓拍机内置人脸采集能力 产品形态 人脸抓拍一体机 核心性能需求
应用建议(以零售VIP识别为例)
获取帮助如果在阅读文档后,对内容有任何疑问,可以通过以下几种方式联系我们:
|