百度:人脸登录集成

时间:2022-07-24
本文章向大家介绍百度:人脸登录集成,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

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,以上三个信息是您应用实际开发的主要凭证,每个应用之间各不相同,请您妥善保管。如上图所示。

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

2.1.4 生成token

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

注: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添加进来。如下图:

注意: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或更高,就人脸登录成功。你也可以限制次数,处理未注册的用户,给出登录失败反馈。

建议:为了防止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人脸比对,返回分数。