人脸识别

    手机刷脸登录

    版本说明

    版本 日期 说明
    v1.1 2018.01.24 示例工程UI优化,增加屏幕亮度调节,适应昏暗环境下识别;登录策略改为多帧检测,避免部分图片效果不佳影响登录速度
    v1.0 2017.07.23 初版,提供人脸识别登录、人脸认证登录完整示例工程

    目录

    1、简介
      1.1 方案概述
      1.2 功能介绍
      1.3 产品构成
        1.3.1 鉴权认证机制
        1.3.2 人脸注册
        1.3.3 人脸识别登录
        1.3.4 人脸认证登录
    2、集成指南
      2.1 准备工作
        2.1.1 注册开发者
        2.1.2 创建应用
        2.1.3 获取密钥
        2.1.4 生成token
        2.1.5 SDK license(十分重要!)
      2.2 集成策略
        2.2.1 阈值选择
        2.2.2 图片压缩
      2.3 iOS集成说明
      2.4 安卓集成说明
    3、常见问题

    1、简介

    1.1 方案概述

    业务流程图

    1.2 功能介绍

    人脸注册

    为人脸登录提供人脸注册集合,基于人脸进行无动作活体检测、及后台在线活体检测算法,判断用户为真人,保障业务环节中的用户真实性判断。

    人脸识别登录

    也称为1:N识别,在指定人脸集合中,找到最相似的人脸。无需用户任何输入,直接校验当前操作的用户,是否在指定人脸集合中,并返回相似度分值,用于判断是否可以完成登录。

    人脸认证登录

    与识别登录的区别在于:基于uid维度的1:N识别,由于uid已经锁定固定数量的人脸,所以检索范围更聚焦。用户操作时,需要指定uid的映射信息(如输入用户名),这样就需要通过用户名先获取uid。当然也可以第一次登录后,把uid或用户名保存在端上,后面登录跳过用户获取uid的过程。

    1.3 产品构成

    本方案由人脸注册、人脸识别登录和人脸认证登录组成具体如下所示:

    1.3.1 鉴权认证机制

    调用接口https://aip.baidubce.com/oauth/2.0/token

    百度AIP开放平台使用 OAuth2.0 授权调用开放API,调用API(如:人脸注册、人脸识别、人脸认证接口)时必须在URL中带上accesss_token参数,获取Access Token的参见http://ai.baidu.com/docs#/Auth/top

    1.3.2 人脸注册

    调用接口https://aip.baidubce.com/rest/2.0/face/v2/faceset/user/add

    人脸注册流程见下图,端上进行在线活体验证、在线活体检测(是否使用根据安全级别而定,希望防止视频等攻击的建议使用),从开发者服务端获取用户uid、注册uid和人脸到百度人脸库。

    人脸注册接口文档

    业务流程图如下所示:

    1.3.3 人脸识别登录

    调用接口https://aip.baidubce.com/rest/2.0/face/v2/identify

    人脸识别登录流程见下图,本地活体采集(有无动作,开发者自行选择。对于安全级别较高的场景,建议选用有动作)、在线活体检测(防止视频攻击)、具体参见identify接口文档)进行人脸识别,返回最相似的人脸的uid和分数。开发者可自行给定是否通过阀值(建议80分,对应万分之一误识率,安全级别高的建议90分)。

    此方式优势在于用户不需要额外的输入,不足在于一个人脸不能注册多个帐号,identify接口将无法确定用户使用是那个帐号。注意:调用在线identify接口需要token。

    人脸识别接口文档

    业务流程图如下所示:

    1.3.4 人脸认证登录

    调用接口https://aip.baidubce.com/rest/2.0/face/v2/verify

    此登录方式与人脸识别登录的区别在于,调用的verify接口。此接口入参中需要指定uid,但能解决同一个人注册多用户的问题。这样就需要通过用户名先获取uid。当然也可以第一次登录后,把uid或用户名保存在端上,后面登录跳过用户获取uid的过程。

    人脸认证接口文档

    业务流程图如下所示:

    2、集成指南

    2.1 准备工作

    在正式集成前,需要做一些准备工作,完成一些账号、应用及配置,具体如下:

    2.1.1 注册开发者

    • STEP1:点击百度AI开放平台导航右侧的控制台中的人脸识别,页面跳转登录完毕后,进入人脸识别后台
    • STEP2:使用百度账号完成登录,如您还未持有百度账户,可以点击此处注册百度账户
    • STEP3:进入百度云欢迎页面,填写企业/个人基本信息,注册完毕,至此成为开发者。注:(如您之前已经是百度云用户或百度开发者中心用户,STEP3可略过。)
    • STEP4:进入百度云控制台,找到人工智能相关服务面板。
    • STEP5:点击进入「人脸识别」模块。

    注一:如果您通过百度AI开放平台登录到后台,AI相关服务模块入口,如下图所示:

    注二:如果您通过百度云直接登录后台,AI相关服务模块入口,则如下图红框部分所示:

    说明:两种入口只是展现形式不同,相关AI服务模块内容完全一样。

    2.1.2 创建应用

    创建好账号后,在正式调用AI能力之前,需要您创建一下应用,这个是调用服务的基础能力单元。选择「人脸识别」服务,首先见到此服务的控制台概览页,点击「创建应用」,即可进入应用创建界面,如下图所示:

    2.1.3 获取密钥

    在您创建完毕应用后,平台将会分配给您此应用的相关凭证,主要为AppIDAPI KeySecret Key,以上三个信息是您应用实际开发的主要凭证,每个应用之间各不相同,请您妥善保管。如上图所示。

    :::warning 注意:开发中请注意区分多份aksk(API Key、Secret Key),每个aksk代表一个人脸库。 :::

    2.1.4 生成token

    刚才所创建的应用在调用开放平台API之前,首先需要获取Access Token(用户身份验证和授权的凭证)您需要使用创建应用所分配到的AppIDAPI KeySecret Key,进行Access Token的生成,方法详见Access Token获取,我们为您准备了几种常见语言的请求示例代码。

    ::: warning 注:Access Token的有效期为30天(以秒为单位),请您集成时注意在程序中定期请求新的token,或每次请求都获取一次token。 :::

    2.1.5 SDK license(十分重要!)

    人脸SDK License:此license用于SDK离线功能使用,在您的申请人脸SDK的后台页面,下载两个端的license,用于接下来集成使用。

    不过我们为您提供了自动化配置脚本,如下图所示:

    您可以在下载登录示例工程的同时,直接下载已经配置好授权信息的版本。

    2.2 集成策略

    2.2.1 阈值选择

    登录场景主要适用单帧检测模式,可以通过识别接口接口中的faceliveness参数判断,超过阈值即为活体通过。阈值设置越高,对应的安全性越高,即拒识率越高,但通过率相应下降

    拒绝率(TRR) 误拒率(FRR) 通过率(TAR) 阈值(Threshold)
    0.90325733 0.1% 99.9% 0.022403
    0.96254072 0.5% 99.5% 0.393241(推荐
    0.97557003 1% 99% 0.649192
    0.98990228 2% 98% 0.933801
    0.99446254 3% 97% 0.973637
    0.99641694 4% 96% 0.988479
    0.99739414 5% 95% 0.994058

    关于以上数值的概念介绍

    • 拒绝率(TRR):如99%,代表100次作弊假体攻击,会有99次被拒绝。
    • 误拒率(FRR):如0.5%,指1000次真人请求,会有5次因为活体分数低于阈值被错误拒绝。
    • 通过率(TAR):如99%,指100次真人请求,会有99次因为活体分数高于阈值而通过。
    • 阈值(Threshold):高于此数值,则可判断为活体。

    2.2.2 图片压缩

    SDK拿到人脸后,可以基于本地的人脸检测,取到人脸的标准框位置,基于人脸关键点进行人脸部分的进一步自动剪裁,减少图片的大小,总而减少网络传输耗时。通常建议:剪裁(人脸不小于100px)、分辨率压缩(最小宽度200px左右)、质量压缩(控制在0.8以上),以上三种处理方式也可以组合叠加使用。

    2.3 iOS集成说明

    2.3.1 自动配置授权信息集成

    如果您是通过自动配置授权信息下载的示例工程,只需配置好证书即可。查看下项目中的FaceParameterConfig.h文件,已经自动配置。

    配置好证书,即可运行。注意已经设置好的bundle id不要随意改动。

    2.3.2 未使用自动配置授权信息的集成

    1、打开或者新建一个项目。

    2、右键点击项目,会出现一个添加菜单,在菜单中选择『Add Files to"此处是你的项目名字"…… 』,如下图所示:

    3、在添加文件弹出框里面选择申请到的license和SDK添加进来。如下图:

    ::: warning 注意:license为百度官方提供,刚才在后台下载的文件(文件名称:idl-license.face-ios) :::

    SDK包含下面三个文件:

    1. IDLFaceSDK.framework
    2. com.baidu.idl.face.faceSDK.bundle
    3. com.baidu.idl.face.model.bundle

    4、确认下Bundle Identifier是否是申请license时填报的那一个。

    5、注意:license和Bundle Identifier为一一对应关系,填错了会导致SDK不可用,如下图所示:

    6、填写正确的FACE_LICENSE_ID(即后台展示的LicenseID)

    在FaceParameterConfig.h 文件中填写下面三项。

    7、选择链接C++标准库。

    8、如果没有使用pod管理第三方库的话,请在Build Setting -> Linking -> Other Linker Flags 上面加入-ObjC选项。如果用了pod请忽略,因为pod会自动添加上。

    2.3.3 注册登录说明

    2.3.3.1 鉴权设置代码

    2.3.3.2 用户注册接口

    2.3.3.3 参数设置代码

    2.3.3.4 活体检测接口

    2.3.3.5 人脸登录接口

    2.3.3.6 多次实时检测登录

    2.4 安卓集成说明

    2.4.1 自动配置授权信息集成

    如果您是通过自动配置授权信息下载的示例工程,只需要谢欧冠Config类和配置签名。您的集成将少很多步骤。

    1、修改Config类中参数,自动配置已经为您修改好了licenseID和license文件,您只需要修改appKey、appSecret(即ak/sk), groupId是自己定义的,用于人脸注册和人脸识别等接口使用。保证注册的人脸和查找的人脸在同一个groupId即可。

    2、 配置签名(申请license时的md5为打包签名的文件,所以必须用申请license的签名文件) 因为SDK运行时会对比license里面的md5和签名文件的md5,为了能debug也能使用人脸,所以需要进行下面的配置。实际发布时只要使用申请时关联的签名文件即可,没有下面的配置也行。

    app->build.gradle->android->signingConfigs

    注意:keyAlias为你创建的打包签名文件的别名。

    2.4.2 未使用自动配置授权信息的集成

    1、把申请的license(idl-license.face-android")放到到项目中assets目录中

    2、修改Config类中的参数:

    licenseID为您申请license填的授权信息字符串+"-face-android"

    groupId是自己定义的,用于人脸注册和人脸识别等接口使用。保证注册的人脸和查找的人脸在同一个groupId即可。

    3、配置签名(申请license时的md5为打包签名的文件,所以必须用申请license的签名文件)

    因为SDK运行时会对比license里面的md5和签名文件的md5,为了能debug也能使用人脸,所以需要进行下面的配置。实际发布时只要使用申请时关联的签名文件即可,没有下面的配置也行。

    app->build.gradle->android->signingConfigs

    • keyAlias为你创建的打包签名文件的别名
    • keyPassword为你创建的打包签名的别名密码
    • storeFile为签名文件的路径
    • storePassword为签名文件的密码

    4、修改包名 app->build.gradle->android->defaultConfig ->您申请license时填的包名

    2.4.3 注册登录说明

    2.4.3.1 注册(RegActivity)

    1、注册初始人脸SDK,初始化放在了Application(为了注册、人脸识别、人脸认证供用,不是必须)

    同时在注册Activity修改了初始化参数,使用了活体功能,活体动作数,您可以自行添加

    2、获取人脸,您可以从人脸检测、人脸活体、相册等方式获取人脸

    3、获取人脸后,你可以选择直接注册或使用在线活体检测后再注册,在线活体检测安全性更高在线活体请在官网控制台提交申请工单)

    2.4.3.2 人脸认证登录(VerifyLoginActivity)

    1、采集人脸,调用FaceDetectActivity采集人脸。

    2、 如何获取FaceDetectActivity中的人脸,在FaceDetectyActivity类的faceDetectManager方法中,有如图下回调函数onDetectFace,当retCode为0的时候,表示检测到人脸(retcode为其他值的时候,可能分别表示其他意义,具体可参考代码中得该方法说明),同时在faceDetectManager.setOnTrackListener监听器后会有另外的方法。

    onTrack,该方法中有saveFaceBmp可保存人脸图片到手机中。

    然后回到VerifyLoginActivity,可通过调用如下3所描述的verify接口校验人脸图片。

    3、调用在线接口verify(需要指定uid,该uid为注册使用的uid,最好为您系统中用户的唯一标识。该接口能解决双胞胎、重复注册和相似度非常高的问题)获得人脸相似度分数,超过80分认为是同一个人,认为登录成功。安全级别更高,可以设到90。如何同时想进行在线活体检测,可以对接口参数ext_fields指定faceLiveness

    2.4.3.3 快速检测登录人脸登录(DetectLoginActivity)

    该方式为可以实现实时检测即进行登录,为推进使用的快速方法。

    1、初始化SDK,为了性能关闭活体:

    2、启动人脸实时人脸检测

    3、连续回调人脸检测信息

    4、调用在线接口identify或verify进行人脸识别,判断是否通一个人。该方式是在人脸检测界面就多次调用人脸识别,只有分数达到预设值80或更高,就人脸登录成功。你也可以限制次数,处理未注册的用户,给出登录失败反馈。

    :::warning 建议:为了防止ak/sk泄露,建议把ak/sk放在您的服务端,端上传人脸给您的服务端,服务端调用百度人脸服务,返回结果给端。 :::

    常见问题

    Q:有了license为啥还有AK/SK?
    A:license是离线人脸检测使用的。使用在线API(人脸注册、人脸识别、人脸认证)需要使用access_token,而access_token需要AK/SK获取。

    Q:人脸识别登录和认证登录有什么区别?
    A:识别登录使用的是identify接口,不需要uid,传入人脸和group_id,返回注册库里面相似度最大的uid和分数。认证登录使用verify接口,需要传入uid、人脸、group_id, 和注册库中相同uid人脸比对,返回分数。

    上一篇
    城市公共交通
    下一篇
    人脸闸机