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

iOS-方案集成指南

1. 文档说明

文档名称 人脸实名认证APP5.0方案集成文档
所属平台 iOS
提交日期 2021-12-3

2. 版本说明

名称 版本号
名镜项目 5.0.0
系统支持 iOS 9.0 +

3. SDK说明

SDK 版本号 说明 类型
BDFaceBaseKit.framework 5.0.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数据格式错误
BDFaceLICENSE_KEY_CHECK_ERROR 1004 license-key(api-key)校验错误
BDFaceLICENSE_ALGORITHM_CHECK_ERROR 1000 初始化成功
BDFaceLICENSE_ALGORITHM_CHECK_ERROR 1005 算法ID校验错误
BDFaceLICENSE_MD5_CHECK_ERROR 1006 MD5校验错误
BDFaceLICENSE_DEVICE_ID_CHECK_ERROR 1007 设备ID校验错误
BDFaceLICENSE_PACKAGE_NAME_CHECK_ERROR 1008 包名(应用名)校验错误
BDFaceLICENSE_EXPIRED_TIME_CHECK_ERROR 1009 过期时间不正确
BDFaceLICENSE_FUNCTION_CHECK_ERROR 1010 功能未授权
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 人脸能力初始化失败
BDFaceABILITY_UNLOAD 2011 能力未加载
BDFaceABILITY_ALREADY_LOADED 2012 人脸能力已加载
BDFaceNOT_AUTHORIZED 2013 未授权
BDFaceABILITY_RUN_EXCEPTION 2014 人脸能力运行异常
BDFaceUNSUPPORT_IMAGE_TYPE 2015 不支持的图像类型
BDFaceIMAGE_TRANSFORM_FAILED 2016 图像转换失败

7.2 实名认证接口

基于姓名和身份证号,调取公安权威数据源人脸图,将当前获取的人脸图片,与公安数据源人脸图进行对比,得出比对分数,并基于此进行业务判断是否为同一人。

:如果配置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)接口:https://ai.baidu.com/ai-doc/FACE/Cktmsru8w

resultCode和resultMsg对应情况如下:

resultCode resultMsg
0 成功
-101 已有采集流程运行中
-102 采集流程取消
-103 安全SDK未初始化
-201 风控验证失败
-301 云端验证异常
-303 视频录制错误
-304 线程异常
-305 线筛选图片异常
-306 采集前内部异常
-307 活体验证步骤异常
-308 预览异常
-309 采集后内部异常
-310 摄像头调起失败
-401 超时,用户取消采集流程
-402 炫彩异常
-403 活体分数异常
-404 活体分数异常
-405 动作活体分数过低
-1000 内部错误
-1001 网络异常
-1002 accessToken参数不合法
-1003 姓名参数不合法
-1004 证件号参数不合法

7.3 活体检测接口

包含本地活体加云端活体,本地活体分静默活体、炫彩活体、动作活体三种,云端活体可以判断图片中的人脸是否为二次翻拍以及是否为合成图攻击。

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

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

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

回调说明

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

callback key值列表说明:

Key值 类型 含义
BDFaceLogicServiceReturnKeyForResultMsg NSString code对应的错误码,详情见code错误码说明
BDFaceLogicServiceReturnKeyForResultData Dictionary 服务端返回结果,错误码为0时此字段存在内容,可以参考活体检测(V4)接口:https://ai.baidu.com/ai-doc/FACE/Tktmssunb

7.4 人脸采集接口

包含本地质量和本地活体,本地质量可以确保采集到的人脸图像符合各条件校验(满足姿态角、光照、模糊度、遮挡等校验),最终采集到的数据经过加密处理,需要配合开放平台接口使用。

返回值 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识别接口

返回值 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端方案