开放能力
开发平台
行业应用
生态合作
开发与教学
资讯 社区 控制台
技术能力
语音技术
文字识别
人脸与人体
图像技术
语言与知识
视频技术
AR与VR
数据智能
场景方案
部署方案
行业应用
智能教育
智能医疗
智能零售
智能工业
企业服务
智能政务
信息服务
智能园区

iOS-方案集成指南

1. 文档说明

文档名称 人脸实名认证APP 5.2版本SDK方案集成文档
所属平台 iOS
提交日期 2022-8-10

2. 版本说明

名称 版本号
名镜项目 5.2.0
系统支持 iOS 9.0 +
IDE Xcode 13.1+

3. SDK说明

SDK 版本号 说明 类型
BDFaceBaseKit.framework 5.2.0 人脸采集SDK 静态库
AipOcrSdk.framework 1.1.0 OCR识别SDK 动态库
AipBase.framework 1.0.0 基础工具类SDK 动态库
IdcardQuality.framework 1.0.0 身份证质量控制SDK 动态库
BDFaceLogicLayer.framework 1.0.0 名镜服务SDK 静态库

4. 运行项目工程

4.1 打开下载的iOS示例工程

如下图所示:

iOS4.1.png


4.2 使用如下链接请求百度Token

https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=【百度云应用的AK】&client_secret=【百度云应用的SK】 注意:上述百度云应用的AK和百度云应用的SK,应当替换为您自己名下的AK和SK。 详细获取资料,请参考:https://ai.baidu.com/ai-doc/REFERENCE/Ck3dwjhhu 最终获取到的token应如下图所示:

image.png


4.3 全局搜索关键词: #warning developer

注意:这种方式只是调试阶段的代码,上线代码不可用如下方式,而应该每次都重写获取,因为token会在一定时间内变化)可以找到如下,被注释的代码 /// self.accessToken = @"";如下图所示

iOS4.3.png

【重要】这里这种写法仅仅用于测试功能,正式上线,token不能写成固定值,需要每次都请求。为了安全期间,建议将请求放到自己服务器上,做一层转发,而不是将AK,SK写在端上来请求。

打开这个注释,将上述token内容写入:例: self.accessToken = @"25.b55fe1d287227ca97aab219bb249b8ab.315360000.1798284651.282335-8574074"; 代码如下图所示:

4.3.2.png


4.4 确认bundleId等信息是否正确

连接真机进行运行,之后可以看到如下界面:

4.4.png


4.5 点击开始身份认证

测试示例工程是否跑通,之后扫码身份证或输入身份证信息后,点击进行身份核验,验证成功可以看到如下界面:

iOS4.5.png

上图为示例工程运行成功,之后可以将示例工程代码集成到目标项目中。


5. 集成步骤

5.1 将BDFaceSDK文件夹下所有文件拖动到目标项目中

如下图所示

iOS5.1.png


5.2 将AipBase.framework, AipOcrSdk.framework和IdcardQuality.framework DebugFramework.framework拖动到目标项目

如下所图示

iOS5.2.png


5.3 将BDFaceSDK文件夹(如下图所示的文件夹)整体拖入到目标代码中;

iOS5.3.png


5.4 在Build Phases中点击下面的+号

选择NewCopyFilePhases,添加一个CopyFiles(可重新命名为Embed)


5.5 双击CopyFiles

改为Embed Frameworks,同时Destination改为framework,之后将AipBase.framework、AipOcrSdk.framework和IdcardQuality.framework 拖动到下面

iOS5.5.png


如下图所示:

iOS5.6.png


5.7 确认添加的库文件设置正确

如下图所示,点击general, 这三个库需要为Do Not Embed:BDFaceBaseKit.framework, BDFaceLogicLayer.framework,CoreTelephony.framework.

iOS5.7.png


5.8 info.plist 文件中添加以下key(获取相机和照片权限)

iOS5.8.png

最后之后可以将人脸核验示例工程代码代码结合自身工程项目,将相关代码集成到目标工程中。


6. 授权文件、加密文件

人脸识别授权文件(idl-license.face-ios),图片加密文件(idl-key.face-ios),OCR身份证识别授权文件(aip.license),从console平台下载完iOS项目,这些文件即包括在下载的示例项目中,不需要特殊处理,按上面第5.3步整体拖入目标项目中即可。


7. 人脸相关接口

7.1 初始化接口

初始化接口调用 用于初始化人脸识别和OCR识别

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为成功,其他为失败,详情参考如下错误码说明

具体枚举值如下

枚举值 对应数字 说明 自查建议
BDFaceInitOK 1000 初始化成功
BDFaceLICENSE_NOT_INIT_ERROR 1001 license未初始化
BDFaceLICENSE_DECRYPT_ERROR 1002 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 非法的参数 无法自查:原因为初始化config已封装,客户无法自查
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 人脸能力初始化失败 "排查思路:
思路一、客户需确认是否只更新paddle-lite 预测库,其他暂时无更新
思路二、如果思路一不存在则无法执行其他自查,原因为接口已封装,客户无法自查"
BDFaceABILITY_UNLOAD 2011 能力未加载 "排查思路:
思路一、客户需确认SDK是否全部更新,不要存在看似一致则不更新现象,
思路二、如果思路一不存在则无法执行其他自查,原因为接口已封装,客户无法自查"
BDFaceABILITY_ALREADY_LOADED 2012 人脸能力已加载 底层已做过滤,无需关注
BDFaceNOT_AUTHORIZED 2013 未授权 "检查授权文件是否初始化成功,如果未初始化成功则需检查:
1、授权文件是否做过修改,
2、授权文件过期
3、授权文件是否存在
4、检查文件格式是否正确"
BDFaceABILITY_RUN_EXCEPTION 2014 人脸能力运行异常
BDFaceUNSUPPORT_IMAGE_TYPE 2015 不支持的图像类型
BDFaceIMAGE_TRANSFORM_FAILED 2016 图像转换失败 检查摄像头分辨率,格式要求 %2==0

7.2 人脸实名认证接口(有源)

基于姓名、身份证号、当前SDK获取的人脸图片,与公安权威数据源进行对比,并得出比对分数,并基于此进行业务判断是否为同一人。
此处最终采集到的数据经过加密处理,需要配合开放平台人脸实名认证V4接口使用,包含活体检测、质量检测、实名认证功能,可通过传入参数进行控制,如您的业务场景核心为实名认证,无需重复请求7.3活体检测接口(startFaceLiveness)。

:如果配置APP方案时,身份信息录入的方式选择【业务调用时传入身份信息】,那么通过APP服务端接口获取姓名和证件号后,将获取到的姓名和证件号赋值给name和idcard_number字段即可。

API 描述
-(void)startRecognize:(NSDictionary )dic callBack:(void(^)(int resultCode, NSDictionary resultDic))callBack; 实名认证接口

入参dic (NSDictionary类型) key值列表如下:

参数 Value类型 说明 必选
BDFaceLogicServiceTokenKey NSString 访问Token,需要APP服务端通过AK、SK获取
BDFaceLogicServiceNameKey NSString 在控制台配置的方案Id
BDFaceLogicServiceCardNumberKey NSNumber 姓名
BDFaceLogicServiceCardTypeKey NSString 身份证类型(默认为0)0:大陆,1:港澳,2:外国,3:定居国外的中国护照
BDFaceLogicServicePlanIdKey NSString 方案ID
BDFaceLogicServiceOnlineQualityControlKey NSString 质量控制参数 LOW:宽松 NORMAL:正常
BDFaceLogicServiceLivenessQualityControlKey NSString 活体控制参数 LOW:宽松 NORMAL:正常 HIGH:严格

回调说明

参数 类型 含义
resultCode int 错误码 0为成功,其他为失败,详情参考回调code错误码说明
resultDic NSDictionary 回调结果 详情见下表

resultDic key值列表说明:

Key值 类型 含义
BDFaceLogicServiceReturnKeyForResultMsg NSString code对应的错误码,详情见code错误码说明
BDFaceLogicServiceReturnKeyForResultData Dictionary 服务端返回结果,错误码为0时此字段存在内容,可以参考人脸实名认证V4接口文档。

resultCode和resultMsg对应情况如下:

resultCode resultMsg 自查建议
1 成功 采集流程正常返回结果
-101 已有采集流程运行中 前面有人脸流程还未结束
-102 采集流程取消 调用了cancel取消接口
-103 安全SDK未初始化 未成功启动安全SDK,初始化配置尽可能早
-105 安全SDK未加载 未成功启动安全SDK,初始化配置尽可能早
-106 网络错误 检查网络环境
-201 风控验证失败 是否越狱设备
-301 云端验证异常 云端错误,检查加解密相关信息
-302 摄像头未授权 请检查摄像头权限
-303 视频录制错误 是否授权视频/音频
-305 线筛选图片异常 没有成功拿到图片,检查白盒、licenseid是否正确
-401 超时,用户取消采集流程 当前流程超时,可通过设置延长超时时间
-402 炫瞳异常 炫瞳打光颜色与模型输出不匹配
-403 活体分数异常
-404 活体分数异常
-405 动作活体分数过低 动作活体图片分数过低
-1001 网络异常 检查网络是否畅通
-1002 accessToken参数不合法 accessToken参数为空
-1003 姓名参数不合法 姓名参数为空
-1004 证件号参数不合法 证件号参数为空

7.3 活体检测接口

包含本地活体加云端活体,本地活体分静默活体、炫瞳活体、动作活体三种,云端活体可以判断图片中的人脸是否为二次翻拍以及是否为合成图攻击。
此处最终采集到的数据经过加密处理,需要配合开放平台在线图片活体V4接口使用,实现二次验证采集图片是否存在假体攻击破绽的情况。
如您的业务场景核心为人脸实名认证,请直接请求7.2 实名认证接口

API 描述
-(void)startRecognizeToCheckLive:(NSDictionary )dic callBack:(void(^)(int resultCode, NSDictionary resultDic))callBack; 活体检测接口

入参dic (NSDictionary类型) key值列表如下:

参数 类型 说明 必选
BDFaceLogicServiceTokenKey NSString 访问Token,需要APP服务端通过AK、SK获取access_token

回调说明

参数 类型 含义
resultCode int 错误码 0为成功,其他为失败,详情参考实名认证resultCode错误码说明
resultDic NSDictionary 回调结果 详情见下表

callback key值列表说明:

Key值 类型 含义
BDFaceLogicServiceReturnKeyForResultMsg NSString code对应的错误码,详情见code错误码说明
BDFaceLogicServiceReturnKeyForResultData Dictionary 服务端返回结果,错误码为0时此字段存在内容,可以参考在线图片活体V4接口文档。

7.4 人脸采集及人脸比对接口(无源)

包含本地质量和本地活体,本地质量可以确保采集到的人脸图像符合各条件校验(满足姿态角、光照、模糊度、遮挡等校验),本地活体分静默活体、炫瞳活体、动作活体三种。
此处最终采集到的数据经过加密处理,需要配合开放平台人脸对比V4接口使用,包含活体检测、质量检测、人脸1:1识别功能,可通过传入参数进行控制,如您的业务场景核心为实名认证,无需重复请求7.3活体检测接口(startFaceLiveness)。

返回值 API 描述
-(void)startFaceCollect:(void(^)(int resultCode, NSDictionary *resultDic))callBack; 人脸采集接口

回调说明

参数 类型 含义
resultCode int 错误码 0为成功,其他为失败,详情参考实名认证code错误码说明
resultDic NSDictionary 回调结果 详情见下表

resultDic key值列表说明:

Key值 类型 含义
resultMsg String 详情见code错误码说明
sKey String 安全相关:sKey
xDeviceId String 安全相关:xDeviceId
data String 安全相关数据

7.5 人脸相关配置

人脸相关配置来自于百度云控制台下发的console_config.json文件,详细参考BDConfigFileParser类,不设置,将使用默认值。


8. OCR身份证识别相关接口

8.1 OCR身份证识别初始化接口

API 描述
-(void) authWithLicenseFileData: (NSData *)licenseFileContent; 将aip.license文件的NSData数据传入OCR SDK进行初始化和鉴权

入参说明

参数 类型 含义
licenseFileContent NSData 将aip.license文件读出来,转发NSData类型

注:如果aip.license文件鉴权文件正确,那么可以使用OCR识别成功识别身份证信息。

8.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 顶部文字颜色,默认为白色

9. 权限

名称 用途
Privacy - Camera Usage Description 获取相机权限,需要使用相机做人脸识别和OCR识别
Privacy - Photo Library Additions Usage Description iOS 11及以后保存照片到相册权限,OCR识别需要从相册选择照片
Privacy - Photo Library Usage Description 使用相册权限,OCR识别需要从相册选择照片
Privacy - Microphone Usage Description 人脸识别视频录制功能会使用该权限

10. 只使用人脸采集功能,不使用OCR

10.1 运行示例工程代码

点击开始身份核验,走完所有流程,可以出现如下界面:

iOS10.1.png

10.2 删除库文件:AipOcrSdk.framework,AipBase.framework,IdcardQuality.framework

10.3 全局搜索与AipOcrSDK/AipOcrSdk.h

找到后并删除项目中所有引入对应SDK的代码,也可以注释,在删除后可能导致编译不通过,可以根据报错部分保证正常功能不受影响的同时进行相应的代码注释。

10.4 全局搜索 -(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];
    };}

10.5 .编译运行代码首页并将身份证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];}

10.6 将userOCR的值设置为0

保证程序只能手动输入身份信息来调用人脸,此部分功能模块不使用也可以对应删除。

iOS10.6.png

运行工程

上一篇
Android-方案集成指南
下一篇
人脸实名认证H5端方案