IOS-方案集成指南(升级)
前言
【本文】方案集成指南适用于需要集成APP方案,实现权威库核验、自传照片人脸比对、仅活体检测这3个业务需求时来参考。百度人脸实名认证APP方案默认开启风控功能,即使用人脸识别V4系列API接口接受SDK端传入本地环境扫描的设备指纹及安全信息,对SDK端进行设备风险识别,辨别是否为⻛险设备、并返回识别结果。此方案可有效防御黑产批量虚拟机、病毒侵入等攻击手段,降低第三方黑产攻破概率,提升业务安全性。
特殊的,如果控制台风控选项设定“关闭”,则需要配合开通人脸识别V3系列API接口实现权威库核验、自传照片人脸比对、仅活体检测这3个业务需求。
快速定位
1. 文档说明
文档名称 | 人脸实名认证APP方案 6.4版本集成文档 |
---|---|
所属平台 | iOS |
提交日期 | 2024-09-25 |
2. 版本说明
名称 | 版本号 |
---|---|
名镜方案 | 6.4.0 |
系统支持 | iOS 9.0 + |
架构 | arm64 |
IDE | Xcode 14+ |
3. SDK说明
SDK | 版本号 | 说明 | 类型 |
---|---|---|---|
BDFaceLogicLayer.framework | 1.0.0 | 名镜服务SDK,必须依赖 | 静态库 |
BDFaceBaseKit.framework | 6.4.0 | 人脸采集SDK逻辑层,必须依赖 | 静态库 |
IDLFaceSDK.framework | 1.0.0 | 人脸采集SDK算法层,非必须依赖 | 静态库 |
AipOcrSdk.framework | 1.1.0 | OCR识别SDK,非必须 | 动态库 |
IdcardQuality.framework | 1.0.0 | 身份证质量控制SDK,非必须 | 动态库 |
AipBase.framework | 1.0.0 | 基础工具类SDK,非必须 | 动态库 |
注:获取SDK可参考:获取示例工程
4. 运行项目工程
4.1 打开下载的iOS示例工程
如下图所示:
4.4 确认bundleId等信息是否正确
连接真机进行运行,之后可以看到如下界面:
4.5 点击开始身份认证
测试示例工程是否跑通,之后扫码身份证或输入身份证信息后,点击进行身份核验,验证成功可以看到如下界面:
上图为示例工程运行成功,之后可以将示例工程代码集成到目标项目中。
5. 集成步骤
5.1 将BDFaceSDK或BDFaceIDLSDK文件夹下所有文件拖动到目标项目中(在对应目录右键通过add files to xxx的方式添加)
如下图所示
5.2 将BDFaceLogicLayer.framework、AipBase.framework、 AipOcrSdk.framework和IdcardQuality.framework拖动到目标项目(在对应目录右键通过add files to xxx的方式添加)
如下所图示
5.3 在Build Phases中点击下面的+号
选择NewCopyFilePhases,添加一个CopyFiles(可重新命名为Embed)
5.4 双击CopyFiles
改为Embed Frameworks,同时Destination改为framework,之后将AipBase.framework、AipOcrSdk.framework和IdcardQuality.framework 拖动到下面
5.5 Link Binary With Libraries中添加libc++.tbd、libz.tbd 和 对应的framework
如下图所示:
5.6 确认添加的库文件设置正确
如下图所示,点击general, 这三个库需要为Do Not Embed:BDFaceBaseKit.framework, BDFaceLogicLayer.framework,CoreTelephony.framework.
5.7 info.plist 文件中添加以下key(获取相机和照片权限)
最后之后可以将人脸核验示例工程代码代码结合自身工程项目,将相关代码集成到目标工程中。
6. 人脸初始化接口(SDK)
设置默认参数(动作活体参数,人脸配置参数,UI参数)
Step 1: 初始化人脸和OCR SDK
- (void)initFaceServiceAndInfoCollectService
Step 2: 初始化人脸SDK,进行参数配置。其中涉及活体方案相关的参数配置示例如下
- (void)initFaceSDK
/// 采集SDK初始化参数
[BDFaceBaseKitManager sharedInstance].paramsCustomConfigItem.isLivenessType = YES; //是否开启动作活体
[BDFaceBaseKitManager sharedInstance].paramsCustomConfigItem.isColorType = YES; //是否开启炫彩活体
//如果想实现更精细的活体方案配置
@property (nonatomic, assign) int numOfLiveness; // 活体动作池中有几个动作 (动作选取)
@property (nonatomic, assign) int actionLiveSelectNum; // 需要从动作活体动作池中抽取几个动作(动作数量)
@property (nonatomic, strong) NSMutableArray *liveActionArray; // 动作活体列表
API | 描述 |
---|---|
-(instancetype)initWithController:(UIViewController * _Nonnull)controller face:(void(^)(void))initFaceBlock ocr:(void(^)(void))initOcrBlock | 传入当前controller,并初始化人脸和ocrSDK |
入参说明
参数 | 类型 | 说明 |
---|---|---|
controller | UIViewController * | 当前controller |
initFaceBlock | Block对象 | 人脸识别初始化Block |
initOcrBlock | Block对象 | OCR识别初始化Block |
initFaceBlock中,使用以下函数进行人脸SDK初始化 -(void)initCollectWithLicenseID:(NSString )licenseID andLocalLicenceName:(NSString )licenseName andExtradata:(NSDictionary *)extradata callback:(FaceSDKInitResultBlock )block;
回调状态码说明
参数 | 类型 | 说明 |
---|---|---|
BDFaceInitRemindCode | 枚举 | 初始化人脸的状态码,1000为成功,其他为失败,详情参考如下错误码说明 |
具体枚举值如下
枚举值 | 对应数字 | 说明 | 自查建议 |
---|---|---|---|
BDFaceLICENSE_NOT_INIT_ERROR | 1001 | license未初始化 | 请按照集成文档说明完成SDK初始化 |
BDFaceLICENSE_DECRYPT_ERROR | 1002 | license数据解密失败 | 请检查License文件是否正确 |
BDFaceLICENSE_INFO_FORMAT_ERROR | 1003 | license数据格式错误 | 请检查license文件内容有被修改过 |
BDFaceLICENSE_KEY_CHECK_ERROR | 1004 | license-key(api-key)校验错误 | 请检查工程代码初始化参数中的licenseId,和申请license文件的licenseId是否匹配 |
BDFaceLICENSE_ALGORITHM_CHECK_ERROR | 1005 | 算法ID校验错误 | 请提交工单或者线下联系百度产研人员 |
BDFaceLICENSE_MD5_CHECK_ERROR | 1006 | MD5校验错误 | 请检查工程所使用的签名文件,和申请license文件的签名信息是否匹配 |
BDFaceLICENSE_DEVICE_ID_CHECK_ERROR | 1007 | 设备ID校验错误 | 采集SDK的授权模式不会出现这个错误码 |
BDFaceLICENSE_PACKAGE_NAME_CHECK_ERROR | 1008 | 包名(应用名)校验错误 | 请检查工程代码中的applicationId(包名)和申请license文件的applicationId(包名)是否匹配 |
BDFaceLICENSE_EXPIRED_TIME_CHECK_ERROR | 1009 | 授权过期时间有问题 | 请提交工单或者线下联系百度产研人员 |
BDFaceLICENSE_FUNCTION_CHECK_ERROR | 1010 | 功能未授权 | 请查看授权文件中是否缺少必要的采集SDK功能声明(funclist参数),例如炫瞳活体 |
BDFaceLICENSE_TIME_EXPIRED | 1011 | 授权已过期 | 请查看当前设备时间是否已不在授权文件有效期内 |
BDFaceLICENSE_LOCAL_FILE_ERROR | 1012 | 本地授权文件读取失败 | 请检查授权文件名称以及路径 |
BDFaceLICENSE_REMOTE_DATA_ERROR | 1013 | 远程授权文件拉取失败 | 本地鉴权失败之后,会远程拉取授权文件;若远程鉴权依然失败,可以关闭网络后重试 |
BDFaceLICENSE_LOCAL_TIME_ERROR | 1014 | 本地时间校验错误 | 请检查当前设备时间是否早于实际时间 |
BDFaceOTHER_ERROR | 1015 | 其他错误 | 请提交工单或者线下联系百度产研人员 |
BDFaceILLEGAL_PARAMS | 2001 | 非法的参数 | 请提交工单或者线下联系百度产研人员 |
BDFaceMEMORY_ALLOCATION_FAILED | 2002 | 内存分配失败 | 请提交工单或者线下联系百度产研人员 |
BDFaceINSTANCE_IS_EMPTY | 2003 | 实例对象为空 | 请提交工单或者线下联系百度产研人员 |
BDFaceMODEL_IS_EMPTY | 2004 | 模型内容为空 | 请提交工单或者线下联系百度产研人员 |
BDFaceUNSUPPORT_ABILITY_TYPE | 2005 | 不支持的能力类型 | 请提交工单或者线下联系百度产研人员 |
BDFaceUNSUPPORT_INFER_TYPE | 2006 | 不支持的预测库类型 | 请提交工单或者线下联系百度产研人员 |
BDFaceNN_CREATE_FAILED | 2007 | 预测库对象创建失败 | 请提交工单或者线下联系百度产研人员 |
BDFaceNN_INIT_FAILED | 2009 | 预测库对象初始化失败 | 请提交工单或者线下联系百度产研人员 |
BDFaceABILITY_INIT_FAILED | 2010 | 人脸能力初始化失败 | 请按照集成文档说明正常完成SDK初始化 |
BDFaceABILITY_UNLOAD | 2011 | 能力未加载 | 请确认当前人脸相关资源库是否完整引用 |
BDFaceABILITY_ALREADY_LOADED | 2012 | 人脸能力已加载 | 底层已做过滤,无需关注 |
BDFaceNOT_AUTHORIZED | 2013 | 未授权 | 检查授权文件是否按照集成文档正常使用 |
BDFaceABILITY_RUN_EXCEPTION | 2014 | 人脸能力运行异常 | 请提交工单或者线下联系百度产研人员 |
BDFaceUNSUPPORT_IMAGE_TYPE | 2015 | 不支持的图像类型 | 请提交工单或者线下联系百度产研人员 |
BDFaceIMAGE_TRANSFORM_FAILED | 2016 | 图像转换失败 | 检查摄像头分辨率,格式要求 %2==0 |
授权文件相关逻辑
人脸识别授权文件(idl-license.face-ios),OCR身份证识别授权文件(aip.license),从console平台下载完iOS项目,这些文件即包括在下载的示例项目中,不需要特殊处理,按上面第5.3步整体拖入目标项目中即可。
如果您下载集成方案的物料为控制台,此处可忽略;鉴权文件配置已自动生效。
配置授权信息: 导入license文件后,需配置FACE_LICENSE_NAME、FACE_LICENSE_ID等信息:
具体参数使用请参照示例demo。
license文件使用注意事项:如出现鉴权失败无法调用人脸采集,请检查license id与license文件导入及配置是否正常。
(1)license id需要注意-face-ios后缀是否添加。
(2)如存在多种环境配置,请确保每个环境下的license id与license文件一一对应。tip:license文件存在运行缓存,切换测试环境请清空缓存,删除安装包后重新编译安装。
(3)确保license文件路径访问正常。
(4)如出现网络鉴权失败等提示,说明license文件与FACE_LICENSE_NAME未正确设置,请参考接入demo检查工程环境,确保参数无误。
7. 获取verify_token接口(服务端)
本接口为实名认证APP方案的verify_token获取接口,利用所获取的verify_token进行实名认证流程的有效期为2小时。
在线调试
您可以在 示例代码中心 中调试该接口,可进行签名验证、查看在线调用的请求内容和返回结果、示例代码的自动生成。
调用方式
请求URL数据格式
向API服务地址使用POST发送请求,必须在URL中带上参数access_token
,可通过后台的API Key和Secret Key生成,具体方式请参考“Access Token获取”。
注意:
access_token
的有效期为30天,切记需要每30天进行定期更换,或者每次请求都拉取新token;
POST中Body的参数,按照下方请求参数说明选择即可。
提示:如果您为百度云老用户,正在使用其他非AI的服务,可以参考百度云AKSK鉴权方式发送请求,虽然请求方式和鉴权方法和本文所介绍的不同,但请求参数和返回结果一致。
请求说明
注意事项:
- 请求体格式化:Content-Type为
application/json
,通过json
格式化请求体。
请求示例
HTTP方法:POST
请求URL: https://aip.baidubce.com/rpc/2.0/brain/solution/faceprint/verifyToken/generate
URL参数:
参数 | 值 |
---|---|
access_token | 通过API Key和Secret Key获取的access_token,参考“Access Token获取” |
Header:
参数 | 值 |
---|---|
Content-Type | application/json |
Body中放置请求参数,参数详情如下:
请求参数:
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
match_source | 是 | int | 方案类型(比对源);0:实名认证(权威库);1:人脸比对(上传照片);2:仅活体检测。 |
plan_id | 是 | string | 方案的id信息,请在人脸实名认证控制台查看创建的APP方案ID信息 |
-
请求示例
{ "match_source": 0, //以权威库核验场景为例,需要传入0 "plan_id": 16144, }
返回参数
- 返回结果
字段 | 必选 | 类型 | 说明 |
---|---|---|---|
success | 是 | boolean | 返回请求是否成功信息。 若请求成功返回ture; 请求失败则返回false |
result | 是 | object | 请求结果 |
+verify_token | 是 | string | 请求获取的verify_token |
-
返回示例
{ "success": true, "result": { "verify_token": "Yz9rWITm4vak16PBAh5x8oG7" }, "log_id": "1814798895" }
8. 人脸实名认证实现方式
实现方式请参考如下时许图
8.1 指定用户信息上报接口(服务端)
本接口用于,控制台APP方案中选择身份信息录入方式为业务调用时传入,需要先调用此接口输入指定用户的姓名+身份证号信息,再继续请求 人脸权威库核验接口(SDK)
在线调试
您可以在 示例代码中心 中调试该接口,可进行签名验证、查看在线调用的请求内容和返回结果、示例代码的自动生成。
调用方式
请求URL数据格式
向API服务地址使用POST发送请求,必须在URL中带上参数access_token
,可通过后台的API Key和Secret Key生成,具体方式请参考“Access Token获取”。
注意:
access_token
的有效期为30天,切记需要每30天进行定期更换,或者每次请求都拉取新token;
POST中Body的参数,按照下方请求参数说明选择即可。
提示:如果您为百度云老用户,正在使用其他非AI的服务,可以参考百度云AKSK鉴权方式发送请求,虽然请求方式和鉴权方法和本文所介绍的不同,但请求参数和返回结果一致。
请求说明
注意事项:
- 请求体格式化:Content-Type为
application/json
,通过json
格式化请求体。
请求示例
HTTP方法:POST
请求URL:https://aip.baidubce.com/rpc/2.0/brain/solution/faceprint/idcard/submit
URL参数:
参数 | 值 |
---|---|
access_token | 通过API Key和Secret Key获取的access_token,参考“Access Token获取” |
Header:
参数 | 值 |
---|---|
Content-Type | application/json |
Body中放置请求参数,参数详情如下:
参数 | 必选 | 类型 | 值 |
---|---|---|---|
verify_token | 是 | string | 通过access_token获取的verify_token |
id_name | 是 | string | 指定输入用户的姓名信息 |
id_no | 是 | string | 指定输入用户的身份证件号信息 |
certificate_type | 否 | int | 证件类型: 0 大陆居民二代身份证 4 港澳台居民居住证 |
- 请求示例:
{
"verify_token": "2sF3nE5mXOHkx2aQwWG4n5WI",
"id_name": "张三",
"id_no": "500***********3390",
"certificate_type": 0 // 证件类型:0:大陆居民二代身份证,4:港澳台居民居住证
}
返回参数
- 返回结果
字段 | 必选 | 类型 | 说明 |
---|---|---|---|
success | 是 | boolean | 返回请求是否成功信息。 若请求成功返回ture; 请求失败则返回false |
result | 是 | int | 请求结果,返回固定结果1,可忽略 |
log_id | 是 | string | 本次查询接口请求的logid |
-
返回示例
{ "success": true, "result": 1, "log_id": "1244068892" }
8.2 人脸权威库核验接口(SDK)
基于姓名、身份证号、当前SDK获取的人脸图片,与权威库进行对比,并得出比对分数,并基于此进行业务判断是否为同一人。包含活体检测、质量检测、实名认证功能,可通过传入参数进行控制,如您的业务场景核心为实名认证,无需重复请求 7.4 人脸活体检测 接口。
返回值 | API | 描述 |
---|---|---|
void | startCheckLiveCommonAction:(NSDictionary )dic callBack:(void(^)(int resultCode, NSDictionary resultDic))callBack; | SDK核验接口 |
入参dic值列表如下:
参数 | 类型 | 说明 | 必选 |
---|---|---|---|
BDFaceLogicServiceTokenKey | String | key值为BDFaceLogicServiceTokenKey,value需要传入verify_token对应的具体值。需要APP服务端通过AK、SK获取access_token,参考 https://ai.baidu.com/docs#/Auth/top,然后通过access_token获取verify_token 【此处需要注意】verify_token有效期两个小时,建议每次调用接口重新获取verify_token | 是 |
plan_id | String | 在控制台配置的方案Id | 否 |
id_name | String | 真实姓名 | 是 |
id_no | String | 证件号码 | 是 |
certificate_type | int | 证件类型;0:中国居民二代身份证,1:港澳台来往内地通行证,2:外国人永久居留证,3:定居国外的中国公民护照,4:港澳台居民居住证。5: 港澳居民来往内地通行证(非中国籍)默认为0 | 否 |
match_source | int | 方案类型(比对源);0:实名认证(权威库);1:人脸比对(上传照片);2:仅活体检测;这里默认传入0 | 是 |
onCallback回调说明
参数 | 类型 | 含义 | 值 |
---|---|---|---|
resultCode | int | 错误码 | 0为成功,其他为失败,详情参考resultCode错误码说明 |
resultDic | NSDictionary | 回调结果 | 详情见下表 |
resultDic key值列表说明:
Key值 | 类型 | 含义 |
---|---|---|
error_code | String | 详情见resultCode错误码说明 |
log_id | String | 本次查询接口请求的logid |
-
返回示例
{ "error_code": "0", //代表通过了百度内部的核验规则,建议使用服务端查询接口获得真实结果做业务判断 "log_id": "1790651229035123218" }
9. 人脸对比(自传照片)实现方式
实现方式请参考如下时许图
9.1 对比图片上传接口(服务端)
本接口适用于人脸比对(自传照片)业务场景,为了保证用户信息安全,您需要提前通过服务端请求本接口来上报比对人脸信息。
在线调试
您可以在 示例代码中心 中调试该接口,可进行签名验证、查看在线调用的请求内容和返回结果、示例代码的自动生成。
调用方式
请求URL数据格式
向API服务地址使用POST发送请求,必须在URL中带上参数access_token
,可通过后台的API Key和Secret Key生成,具体方式请参考“Access Token获取”。
注意:
access_token
的有效期为30天,切记需要每30天进行定期更换,或者每次请求都拉取新token;
POST中Body的参数,按照下方请求参数说明选择即可。
提示:如果您为百度云老用户,正在使用其他非AI的服务,可以参考百度云AKSK鉴权方式发送请求,虽然请求方式和鉴权方法和本文所介绍的不同,但请求参数和返回结果一致。
请求说明
注意事项:
- 请求体格式化:Content-Type为
application/json
,通过json
格式化请求体。
请求示例
HTTP方法:POST
请求URL: https://aip.baidubce.com/rpc/2.0/brain/solution/faceprint/uploadMatchImage
URL参数:
参数 | 值 |
---|---|
access_token | 通过API Key和Secret Key获取的access_token,参考“Access Token获取” |
Header:
参数 | 值 |
---|---|
Content-Type | application/json |
Body中放置请求参数,参数详情如下:
参数 | 必选 | 类型 | 值 |
---|---|---|---|
verify_token | 是 | string | 通过access_token获取的verify_token |
image | 是 | string | 图片base64字符串,编码后的图片大小不超过10M,图片分辨率小于1920*1080 |
quality_control | 否 | string | “NONE”、“LOW”、“NORMAL”、“HIGH”;质量控制参数,未主动传入时默认为“NONE” |
liveness_control | 否 | string | “NONE”、“LOW”、“NORMAL”、“HIGH”;活体控制参数,未主动传入时默认为“NONE” |
-
请求示例:
{ "verify_token": "2sF3nE5mXOHkx2aQwWG4n5WI", "image": "/9j/4AAQSkZJRgABAQAAAQABAAD/", "quality_control" : "LOW", "liveness_control" : "LOW", }
返回参数
- 返回结果
字段 | 必选 | 类型 | 说明 |
---|---|---|---|
success | 是 | boolean | 返回请求是否成功信息。 若请求成功返回ture; 请求失败则返回false |
log_id | 是 | string | logid |
result | 是 | object | 返回结果 |
-
返回示例
{ "success": true, "result": null, "log_id": "1329130892" }
9.2 人脸对比(SDK)
包含活体检测、质量检测、人脸1:1识别功能,可通过传入参数进行控制,如您的业务场景核心为人脸对比(自传照片),无需重复请求 7.4 人脸活体检测 接口。
返回值 | API | 描述 |
---|---|---|
void | startCheckLiveCommonAction:(NSDictionary )dic callBack:(void(^)(int resultCode, NSDictionary resultDic))callBack; | SDK核验接口 |
入参dic值列表如下:
参数 | 类型 | 说明 | 必选 |
---|---|---|---|
BDFaceLogicServiceTokenKey | String | key值为BDFaceLogicServiceTokenKey,value需要传入verify_token对应的具体值。需要APP服务端通过AK、SK获取access_token,参考 https://ai.baidu.com/docs#/Auth/top,然后通过access_token获取verify_token 【此处需要注意】verify_token有效期两个小时,建议每次调用接口重新获取verify_token | 是 |
register_image | data | 本地上传用来比对的图片源 | 是 |
match_source | int | 方案类型(比对源);0:实名认证(权威库);1:人脸比对(上传照片);2:仅活体检测;这里默认传入1 | 是 |
onCallback回调说明
参数 | 类型 | 含义 | 值 |
---|---|---|---|
resultCode | int | 错误码 | 0为成功,其他为失败,详情参考实名认证resultCode错误码说明 |
resultDic | Dictionary | 回调结果 | 详情见下表 |
resultDic key值列表说明:
Key值 | 类型 | 含义 |
---|---|---|
error_code | String | 详情见resultCode错误码说明 |
log_id | String | 本次查询接口请求的logid |
-
返回示例
{ "error_code": "0", //代表通过了百度内部的核验规则,建议使用服务端查询接口获得真实结果做业务判断 "log_id": "1790651229035123218" }
10. 人脸活体检测实现方式
实现方式请参考如下时许图
10.1 活体检测(SDK)
包含本地活体加云端活体,本地活体分静默活体、炫瞳活体、动作活体三种,云端活体可以判断图片中的人脸是否为二次翻拍以及是否为合成图攻击。实现二次验证采集图片是否存在假体攻击破绽的情况。
如您的业务场景核心为人脸实名认证(权威源),请直接参考 7. 人脸实名认证实现方式。
返回值 | API | 描述 |
---|---|---|
void | startCheckLiveCommonAction:(NSDictionary )dic callBack:(void(^)(int resultCode, NSDictionary resultDic))callBack; | SDK核验接口 |
入参dic值列表如下:
参数 | 类型 | 说明 | 必选 |
---|---|---|---|
BDFaceLogicServiceTokenKey | String | key值为BDFaceLogicServiceTokenKey,value需要传入verify_token对应的具体值。需要APP服务端通过AK、SK获取access_token,参考 https://ai.baidu.com/docs#/Auth/top,然后通过access_token获取verify_token 【此处需要注意】verify_token有效期两个小时,建议每次调用接口重新获取verify_token | 是 |
match_source | int | 方案类型(比对源);0:实名认证(权威库);1:人脸比对(上传照片);2:仅活体检测;这里默认传入2. | 是 |
onCallback回调说明
参数 | 类型 | 含义 | 值 |
---|---|---|---|
resultCode | int | 错误码 | 0为成功,其他为失败,详情参考实名认证resultCode错误码说明 |
resultDic | NSDictionary | 回调结果 | 详情见下表 |
resultDic key值列表说明:
Key值 | 类型 | 含义 |
---|---|---|
error_code | String | errorCode错误码说明 |
log_id | String | 本次查询接口请求的logid |
-
返回示例
{ "error_code": "0", //代表通过了百度内部的核验规则,建议使用服务端查询接口获得真实结果做业务判断 "log_id": "1790651229035123218" }
11. 验证后查询接口
11.1 获取认证人脸接口(服务端)
本接口返回进行人脸实名认证过程中进行认证的最终采集的人脸信息。根据Verify_token返回的结果信息会在云端保留3天,您可根据需要在此期间进行调取查询。
在线调试
您可以在 示例代码中心 中调试该接口,可进行签名验证、查看在线调用的请求内容和返回结果、示例代码的自动生成。
调用方式
请求URL数据格式
向API服务地址使用POST发送请求,必须在URL中带上参数access_token
,可通过后台的API Key和Secret Key生成,具体方式请参考“Access Token获取”。
注意:
access_token
的有效期为30天,切记需要每30天进行定期更换,或者每次请求都拉取新token;
POST中Body的参数,按照下方请求参数说明选择即可。
提示:如果您为百度云老用户,正在使用其他非AI的服务,可以参考百度云AKSK鉴权方式发送请求,虽然请求方式和鉴权方法和本文所介绍的不同,但请求参数和返回结果一致。
请求说明
注意事项:
- 请求体格式化:Content-Type为
application/json
,通过json
格式化请求体。
请求示例
HTTP方法:POST
请求URL: https://aip.baidubce.com/rpc/2.0/brain/solution/faceprint/result/simple
URL参数:
参数 | 值 |
---|---|
access_token | 通过API Key和Secret Key获取的access_token,参考“Access Token获取” |
Header:
参数 | 值 |
---|---|
Content-Type | application/json |
Body中放置请求参数,参数详情如下:
参数 | 值 |
---|---|
verify_token | 通过access_token获取的verify_token |
- 请求示例:
{
"verify_token" : "cIupeyP51sn28XzxGVTfYqoN"
}
返回参数
- 返回结果
字段 | 必选 | 类型 | 说明 |
---|---|---|---|
success | 是 | boolean | 返回请求是否成功信息。 若请求成功返回ture; 请求失败则返回false |
result | 是 | object | 请求结果 |
+image | 是 | string | 返回采集的用户人脸信息 |
-
返回示例
{ "success": true, "result": { "image":"https://brain.baidu.com/solution/faceprint/image/query?verify_token=xxxxxx" }, "log_id": "1054986003" }
br
11.2 核验及计费信息获取(服务端)
根据Verify_token返回的信息会在云端保留3天,您可根据需要在此期间进行调取查询。
调用方式
请求URL数据格式
向API服务地址使用POST发送请求,必须在URL中带上参数access_token
,可通过后台的API Key和Secret Key生成,具体方式请参考“Access Token获取”。
注意:
access_token
的有效期为30天,切记需要每30天进行定期更换,或者每次请求都拉取新token;
POST中Body的参数,按照下方请求参数说明选择即可。
提示:如果您为百度云老用户,正在使用其他非AI的服务,可以参考百度云AKSK鉴权方式发送请求,虽然请求方式和鉴权方法和本文所介绍的不同,但请求参数和返回结果一致。
在线调试
您可以在 示例代码中心 中调试该接口,可进行签名验证、查看在线调用的请求内容和返回结果、示例代码的自动生成。
请求说明
注意事项:
- 请求体格式化:Content-Type为
application/json
,通过json
格式化请求体。
请求示例
HTTP方法:POST
请求URL: https://aip.baidubce.com/rpc/2.0/brain/solution/faceprint/result/getall
URL参数:
参数 | 值 |
---|---|
access_token | 通过API Key和Secret Key获取的access_token,参考“Access Token获取” |
Header:
参数 | 值 |
---|---|
Content-Type | application/json |
Body中放置请求参数,参数详情如下:
参数 | 值 |
---|---|
verify_token | 通过access_token获取的verify_token |
请求示例:
{
"verify_token" : "cIupeyP51sn28XzxGVTfYqoN"
}
返回参数
- 返回结果
字段 | 必选 | 类型 | 说明 |
---|---|---|---|
success | 是 | boolean | 返回请求是否成功信息。 若请求成功返回ture; 请求失败则返回false |
log_id | 是 | string | 本次查询接口请求的logid |
result | 是 | object | 结果信息 |
+verify_count | 是 | int | 当前verify_token对应的核验次数,核验次数为几,后面就有几个对象数组 如方案配置为“认证未通过时URL失效”,则该verify_token核验次数为1; 如方案配置为“认证未通过时URL不失效”,则该verify_token对应的核验次数可能大于1(用户核验失败后多次重试) |
+ocr_charge_count | 是 | int | 身份证识别OCR接口的计费次数 |
+match_charge_count | 是 | int | 人脸对比接口的计费次数 |
+verify_charge_count | 是 | int | 人脸实名认证接口的计费次数 |
+verify_result | 是 | object[] | 核验结果信息,verify_count的值为几,就返回几个该对象 |
++order | 是 | int | 代表本次核验结果在verify_token所有核验次数中的顺序,按时间先后排序,第一次核验返回值为 1,第二次核验返回值为 2,以此类推 |
++is_verify_passed | 是 | boolean | 本次核验是否通过 核验成功返回true 核验失败返回false |
++code | 是 | string | 本次核验的错误码 核验成功时返回 0 核验失败返回非0错误码 |
++message | 是 | string | 本次核验的错误信息 核验成功时返回“核验成功” 核验失败时返回具体错误原因,如“身份证姓名不匹配” |
++verify_time | 是 | string | 本次核验完成的时间点,包含年月日、时分秒,如“2023-6-20 18:00:00” |
++is_charged | 是 | boolean | 本次核验是否计费 计费返回true 不计费返回false |
++charge_type | 是 | string | 计费类型:verify(人脸实名认证)、match(人脸对比)、live(在线图片活体) |
++charge_time | 是 | string | 本次计费的时间点,如不计费则该字段为空,包含年月日、时分秒,如“2023-6-20 18:00:00” |
++is_ocr_charge | 否 | boolean | 身份证识别OCR是否计费 计费返回true 不计费返回false |
++ocr_charge_time | 否 | string | ocr 收费时间点,如不收费则该字段为空,包含年月日、时分秒,如“2023-6-20 18:00:00” |
++ocr_count | 否 | int | ocr次数 |
++verify_detail | 是 | object | 核验的详细信息 |
+++face_image | 是 | string | 本次核验流程中采集的人脸最佳质量图下载url |
+++verify_log_id | 是 | string | 本次核验流程中请求的人脸实名认证(方案配置权威库比对)、人脸对比(方案配置自建人脸库比对)、在线图片活体(仅活体检测)后端接口logid,支持在记录查询平台中通过logid查询到3天内的记录。 少数核验失败情况下,实际并未发生上述俩接口的请求,则该字段为空,如:用户拒绝摄像头授权且不允许降级 |
+++score | 是 | float | 人脸相似度得分,大于等于方案设置阈值为同一人;当身份证姓名不匹配或活体不通过时,该项为空 |
+++threshold | 是 | float | 本次核验时,所使用的方案配置相似度阈值 |
+++liveness_score | 是 | float | 活体检测得分,注:预留功能字段,当前返回为0 |
+++spoofing_score | 否 | float | 方案配置使用合成图功能,将返回合成图得分,注:预留功能字段,当前返回为0 |
+++risk_level | 否 | string | 安全风控等级 方案配置启用安全风控,将返回该字段 值为1或2时表示触发了安全风险,值为3或4时无风险 |
+++risk_tag | 否 | string | 安全风控标签 方案配置启用安全风控,将返回该字段 当risk_level值为1或2时,返回具体风险类型,risk_level值为3或4时,为空 |
+++is_demote | 否 | boolean | H5方案相关,可忽略 |
++idcard_confirm | 是 | object | 用户手动输入或二次确认的身份证信息 |
+++name | 是 | string | 姓名 |
+++idcard_number | 是 | string | 证件号 |
+++idcard_type | 是 | string | 证件类型,大陆居民二代身份证返回0 |
++idcard_ocr_result | 否 | object | OCR采集的身份证信息,当方案配置使用OCR采集证件照时返回该参数 |
++idcard_images | 否 | object | 返回采集的身份证图片信息 当人脸实名认证控制台设置为使用OCR识别时返回此参数信息 |
- 返回示例
{
"success": true,
"result": {
"verify_count": 1,
"ocr_charge_count": 0,
"match_charge_count": 0,
"verify_charge_count": 1,
"verify_result": [
{
"order": 1,
"code": "0",
"message": "核验成功",
"is_verify_passed": true,
"verify_time": "2024-04-02 16:15:01",
"is_charged": true,
"charge_type": "verify",
"charge_time": "2024-04-02 16:15:01",
"is_ocr_charge": false,
"ocr_count": 0,
"ocr_charge_time": null,
"verify_detail": {
"score": 84.4000015258789,
"threshold": 80.0,
"app": true,
"face_image": "https://bj.bcebos.com/v1/mingjing-qa/hb/h5-video-temp/temp/202404/16130/ZWCCBxXUz48Q9wuR/Igi1n0SpQRtzm9ySWLQwdwvn-00.jpg?authorization=bce-auth-v1%2F89e9208d0d5a497cbc8922a4d74d4f71%2F2024-04-02T08%3A19%3A23Z%2F86400%2F%2Fb3abf9eef0b7f897ccf0350d7d59bbfd4498ab214ef73d437a45e319e5028688",
"verify_log_id": "1775074433891895605",
"liveness_score": 0.99999183,
"spoofing_score": null,
"risk_level": null,
"risk_tag": null,
"is_demote": false
},
"idcard_confirm": {
"name": "李跃坤",
"idcard_number": "140522199804101534",
"idcard_type": "0",
"idcard_ocr_result": null,
"idcard_images": null
}
}
]
},
"log_id": "1775075543214005842"
}
12. OCR身份证识别相关接口
12.1 OCR身份证识别初始化接口
API | 描述 |
---|---|
-(void) authWithLicenseFileData: (NSData *)licenseFileContent; | 将aip.license文件的NSData数据传入OCR SDK进行初始化和鉴权 |
入参说明
参数 | 类型 | 含义 |
---|---|---|
licenseFileContent | NSData | 将aip.license文件读出来,转发NSData类型 |
注:如果aip.license文件鉴权文件正确,那么可以使用OCR识别成功识别身份证信息。
12.2 OCR身份证识别接口
支持对二代居民身份证字段进行结构化识别,包括姓名、性别,调用参考OCR身份证识别接口文档。
返回值 | API | 描述 |
---|---|---|
UIViewController | -(UIViewController )startOcrRecognize:(BDAipOCRConfig )config didGetImage:(void(^)(UIImage image))getImageAction success:(void(^)(NSDictionary result))success failure:(void (^)(NSError *error))failure; | OCR识别接口 |
参数值列表如下:
参数 | 类型 | 说明 | 必选 |
---|---|---|---|
config | BDAipOCRConfig | 用于设置OCR页面相关UI | 否 |
getImageAction | Block | 获取到的图片信息回调 | 否 |
success | Block | 获取身份信息成功回调 | 否 |
failure | Block | 获取身份信息失败回调 | 否 |
config配置说明
属性 | 类型 | 说明 |
---|---|---|
titleViewBgColor | UIColor | OCR页面导航栏背景色,默认为白色 |
pageTitle | NSString | OCR标题内容,默认为"身份信息采集" |
pageTitleTextColor | UIColor | OCR标题颜色,默认为黑色 |
topTipText | NSString | OCR顶部扫描文字,默认为"请将您本人的\n身份证人像面放入框内" |
topTipTextColor | UIColor | OCR 顶部文字颜色,默认为白色 |
权限
名称 | 用途 |
---|---|
Privacy - Camera Usage Description | 获取相机权限,需要使用相机做人脸识别和OCR识别 |
Privacy - Photo Library Additions Usage Description | iOS 11及以后保存照片到相册权限,OCR识别需要从相册选择照片 |
Privacy - Photo Library Usage Description | 使用相册权限,OCR识别需要从相册选择照片 |
Privacy - Microphone Usage Description | 人脸识别视频录制功能会使用该权限 |
只使用人脸采集功能,不使用OCR
- 运行示例工程代码
点击开始身份核验,走完所有流程,可以出现如下界面:
- 删除库文件:AipOcrSdk.framework,AipBase.framework,IdcardQuality.framework**
- 全局搜索与AipOcrSDK/AipOcrSdk.h
找到后并删除项目中所有引入对应SDK的代码,也可以注释,在删除后可能导致编译不通过,可以根据报错部分保证正常功能不受影响的同时进行相应的代码注释。
- 全局搜索 -(void) startOCRSdk 并注释该函数
注意:其他编译报错部分调用的地方也需要注释或删除
// 打开相机扫描
- (void)startOCRSdk {
[self configCallback];
// 身份证识别
[AipCaptureCardVC clearIdCard];
BDAipOCRConfig *config = [[BDAipOCRConfig alloc] init];
AipNavigationController *detectNavi = [AipCaptureCardVC viewControllerToDetectIdCard:config
handler:^(UIImage *image) {
_idCardImage = image;
[[AipOcrService shardService] detectIdCardFrontFromImage:image
withOptions:nil
successHandler:^(id result) {
_successHandler(result);
} failHandler:_failHandler];
}];
UIViewController *detectRoot = [[UIViewController alloc] init];
detectRoot.view.backgroundColor = [UIColor whiteColor];
detectRoot.view.clipsToBounds = YES;
[detectRoot addChildViewController:detectNavi];
[detectRoot.view addSubview:detectNavi.view];
[self.navigationController pushViewController:detectRoot animated:YES];
_vc = detectRoot;
__weak typeof(detectRoot) weakDetectRoot = detectRoot;
detectNavi.captureController.backAction = ^{
[weakDetectRoot.navigationController popViewControllerAnimated:YES];
};}
- 编译运行代码首页并将身份证OCR功能关闭或者使用代码
// 身份证获取方式 1 OCR扫描 0 手动输入 2代码传
+ (int)useOCR {
BDConfigDataService *service = [self sharedInstance];
NSNumber *value = service.sharedDic[BDConfigDataServiceKeyForSettingOcr];
if (value) {
return value.intValue;
}
return [[BDConfigFileParser sharedInstance] useOCR];}
- 将userOCR的值设置为0
保证程序只能手动输入身份信息来调用人脸,此部分功能模块不使用也可以对应删除。
运行工程
常见问题
verify_token的详细说明
(1)access_token 有效期为 30 天,重复生成 access_token 的话,对之前的不影响,依旧能使用;access_token 与verify_token 是包含关系,即 verify_token 是由 access_token生成的,如果一个 verify_token 是和一个不匹配的 access_token 使用,会提示“Token无效或者已过期”
(2)verify_token 的核验有效期为 2 小时,在有效期内可以进行了核验动作,如果超过了 2 小时没有使用该 token 进行核验的话会提示“Token无效或者已过期”
(3) verify_token 核验完毕后(核验成功,或设置了认证未通过时URL失效),无法再进行核验,如果再次进行核验,会提示“Token无效或者已过期”
(4) verify_token 核验完毕后(核验成功,或设置了认证未通过时URL失效),支持对后验接口的查询,有效期均为 3 天,3 天后再次查询后验接口,会提示“Token无效或者已过期”
获取认证人脸、查询认证结果、核验及计费信息获取接口持续返回错误码18,提示openapi限制,且有返回logid
答:检查APP方案依赖的“人脸实名认证V3/V4”、“人脸对比V3/V4”、“在线图片活体检测V3/V4” 三项付费接口,是否有免费额度,或者直接开通后付费,以消除该报错提示。开通后,再进行重试。