iOS-方案集成指南
本文档介绍了金融级APP实名认证方案iOS端集成开发流程。
一、运行示例工程
1、打开下载的iOS示例工程,如下图所示:
2、全局搜索关键词: #warning developer,找到宏定义BDFaceBaseSafeRequestBaseURL,修改这个值为指定的Server服务地址,具体如下图所示:
3、确认bundleId等信息是否正确,之后连接真机进行运行,之后可以看到如下界面:
4、点击开始身份认证,测试示例工程是否跑通,之后扫码身份证或输入身份证信息后,点击进行身份核验,验证成功可以看到如下界面:
5、示例工程运行成功,之后可以将示例工程代码集成到目标项目中。
二、集成步骤
1、将BDFaceSDK文件夹下所有文件拖动到目标项目中,如下图所示
2、将AipBase.framework, AipOcrSdk.framework和IdcardQuality.framework拖动到目标项目,如下所图示
3、在Build Phases中点击下面的+号,选择NewCopyFilePhases,添加一个CopyFiles,如下图所示
4、双击上图的CopyFiles,改为Embed Frameworks,同时Destination,改为framework,之后将AipBase.framework, AipOcrSdk.framework和IdcardQuality.framework拖动到下面,如下图所示:
5、Link Binary With Libraries中添加libc++.tbd、libz.tbd 如下图所示:
6、info.plist 文件中添加以下key
7、之后可以将人脸核验示例工程代码代码结合自身工程项目,将相关代码集成到目标工程中。
三、关键代码说明
1、人脸识别SDK鉴权代码如下,canwork方法返回YES,代表人脸SDK鉴权成功。
1 NSString* licensePath = [NSString stringWithFormat:@"%@.%@", FACE_LICENSE_NAME, FACE_LICENSE_SUFFIX ];
2 [[FaceSDKManager sharedInstance] setLicenseID:FACE_LICENSE_ID andLocalLicenceFile:licensePath andRemoteAuthorize:true];
3 NSLog(@"canWork = %d",[[FaceSDKManager sharedInstance] canWork]);
4 NSLog(@"version = %@",[[FaceSDKManager sharedInstance] getVersion]);
2、OCR SDK鉴权代码如下
1NSString *licenseFile = [[NSBundle mainBundle] pathForResource:FACE_API_ORC_KEY ofType:FACE_SECRET_OCR_KEY];
2 NSData *licenseFileData = [NSData dataWithContentsOfFile:licenseFile];
3 [[AipOcrService shardService] authWithLicenseFileData:licenseFileData];
4 NSLog(@"ocr sd version: %@", [AipOcrService ocrSdkVersion]);
点击开始身份认证,可以成功进入如下界面,没有报错,表示OCR鉴权成功
3、返回拍照页面,并开始离线识别身份证:
1-(void) startOCRSdk {
2 [self configCallback];
3 // 身份证识别
4 [AipCaptureCardVC clearIdCard];
5 _vc =
6 [AipCaptureCardVC ViewControllerWithCardType:CardTypeLocalIdCardFont
7 andImageHandler:^(UIImage *image) {
8 _idCardImage = image;
9 [[AipOcrService shardService] detectIdCardFrontFromImage:image
10 withOptions:nil
11 successHandler:^(id result){
12 _successHandler(result);
13 }
14 failHandler:_failHandler];
15 }];
4、调起人脸识别界面,BDFaceColorfulViewController为人脸识别Controller。注意,如果不适用OCR部分,那么这里需要传入自定义的姓名和身份证号字符串。
1- (void)faceColor {
2 NSArray * colorArr = [[NSArray alloc] initWithObjects:@(FaceLivenessActionTypeLiveEye), @(FaceLivenessActionTypeLiveMouth), nil];
3 int r = arc4random() % [colorArr count];
4 BDFaceColorfulViewController* cvc = [[BDFaceColorfulViewController alloc] init];
5 BDFaceLivingConfigModel* model = [BDFaceLivingConfigModel sharedInstance];
6 [cvc livenesswithList:@[colorArr[r]] order:model.isByOrder numberOfLiveness:model.numOfLiveness];
7 cvc.modalPresentationStyle = UIModalPresentationFullScreen;
8 cvc.name = _idCardName;
9 cvc.idCardNumber = _idCardNumber;
10 [self presentViewController:cvc animated:YES completion:nil];
11}
5、人脸识别完成结果回调函数
1- (void)faceCallbackWithCode:(BDFaceCompletionStatus)status result:(NSDictionary *)result {
2
3 NSLog(@">>>>>>>>>>>faceCallbackWithCode, %ld %@", (long)status,[self showCompletionStatusWithType:status]);
4 MyLog(@"result = %@",result);
5 NSDictionary *dic = [self dictionaryWithJsonString:result[@"data"]];
6 [[BDFaceImageShow sharedInstance] setAuraLiveColor:[NSString stringWithFormat:@"licenseId:%@",dic[@"licenseId"]]];
7
8 if (status == BDFaceCompletionStatusCameraStarted) {
9 [self.videoCapture startRecordingVideo];
10 } else if (status == BDFaceCompletionStatusImagesSuccess) {
11 NSLog(@"%@", result);
12 } else if (status == BDFaceCompletionStatusSuccess) {
13 dispatch_async(dispatch_get_main_queue(), ^{
14 [self.remindAnimationView stopActionAnimating];
15 BDFaceVerificationController *avc = [[BDFaceVerificationController alloc] init];
16 avc.modalPresentationStyle = UIModalPresentationFullScreen;
17 avc.name = _name;
18 avc.idCardNumber = _idCardNumber;
19 avc.receivedData = result;
20 if (@available(iOS 13.0, *)) {
21 avc.modalPresentationStyle = 0;
22 }
23 [self closeAction];
24 [self.presentingViewController presentViewController:avc animated:YES completion:nil];
25 });
26
27 }
注意:BDFaceCompletionStatusSuccess为采集结束,同时只有这个时候加密的信息才会在result中返回,BDFaceCompletionStatusImagesSuccess 只是流程上采集结束了,但是result是没有信息的,使用BDFaceCompletionStatusSuccess这个枚举即可。
6、动作活体返回状态回调:
1- (void)livenessProcesssWithCode:(LivenessRemindCode)remindCode {
2
3 dispatch_async(dispatch_get_main_queue(), ^{
4 self.isAnimating = [self.remindAnimationView isActionAnimating];
5 });
6
7 switch (remindCode) {
8 case LivenessRemindCodeOK:
7、炫彩返回状态回调:
1- (void)colorfulProcesssWithCode:(ColorRemindCode)code imageInfo:(NSDictionary *)images {
2 __weak typeof(self) weakSelf = self;
3
4 NSLog(@">>>>>>>> result code:%ld, info:%@", code, images);
5
6 switch (code) {
7 case ColorRemindCodeOK:
8、发请求BaseURL,如下图所示,开发者需要配置自己服务器的Host和端口号,进行相关请求;
9、进行姓名、身份证号和人脸比较,如下:
1- (void)requestSafelyToCheckIdetifierCardAndPerson:(NSDictionary *)dic {
2 NSString *finantialVerificationIdCardPersonImageUrl = [NSString stringWithFormat:@"%@%@", BDFaceBaseSafeRequestBaseURL, @"/face/biz-demo/verify"];
3 NSString *urlString = [NSString stringWithFormat:@"%@", finantialVerificationIdCardPersonImageUrl];
4 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlString]];
5 NSMutableDictionary *parameters = [NSMutableDictionary dictionary];
10、进行图片比对,一般是自身服务器中有图片底库,客户端采集完之后上传一张图片,这两张图片进行比较,注意:imageKey开发者自定义传入(也就是存在服务器中的照片底库标识码)
1- (void)requestSafelyToCompareImages:(NSDictionary *)dic {
2 NSString *finantialVerificationImageCompareUrl = [NSString stringWithFormat:@"%@%@", BDFaceBaseSafeRequestBaseURL, @"/face/biz-demo/match"];
3 NSString *urlString = [NSString stringWithFormat:@"%@", finantialVerificationImageCompareUrl];
4 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlString]];
5 NSMutableDictionary *parameters = [NSMutableDictionary dictionary];
6
7 NSString *skey = dic[@"skey"];
8 NSString *xDeviceId = dic[@"x-device-id"];
9 NSString *theDataString = dic[@"data"];
10 NSString *appPlatform = @"ios"; // ios 必须是小写,服务端定的
11 parameters[BDFaceKeyOfSkey] = skey ?: @"";
12 parameters[BDFaceKeyOfXdeviceId] = xDeviceId ?: @"";
13 parameters[BDFaceKeyOfApp] = appPlatform ?: @"";
14
15 NSDictionary *tempDataDic = [NSJSONSerialization JSONObjectWithData:[theDataString dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingMutableLeaves error:nil];
16 theDataString = tempDataDic[@"data"];
17 parameters[BDFaceKeyOfData] = tempDataDic[@"data"] ?: @"";
#warning developer 这里只是联调使用,imageKey需要根据自己代码确定,图片的唯一标识码是什么,不能使用如下一行的代码
1 NSString *imageKey = [[NSUserDefaults standardUserDefaults] objectForKey:@"imagekeyfortesting"];
2 parameters[BDFaceKeyOfRegisterKey] = imageKey ?: @"";
11、活体检测接口调用,如下图所示:
1- (void)requestSafelyToCheckLive:(NSDictionary *)dic {
2 NSString *finantialVerificationCheckLiveUrl = [NSString stringWithFormat:@"%@%@", BDFaceBaseSafeRequestBaseURL, @"/face/biz-demo/faceverify"];
3 NSString *urlString = [NSString stringWithFormat:@"%@", finantialVerificationCheckLiveUrl];
4 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlString]];
5 NSMutableDictionary *parameters = [NSMutableDictionary dictionary];
四、服务端接口参数说明
4.1 实名认证接口
-url:face/biz-demo/verify
-请求方式:Content-Type 为 application/json,通过 json 格式化请求体
-返回值类型:JSON
-请求参数说明
参数名 | 必选 | 类型 | 说明 |
---|---|---|---|
skey | 是 | string | 加固版上报的密钥信息 skey |
x_device_id | 是 | string | 加固版上报的密钥信息 deviceId |
data | 是 | string | 加密数据 |
id_card_number | 是 | string | 身份证件号 |
name | 是 | string | 姓名(需要是 utf8 编码) |
verify_type | 否 | string | 0:大陆身份证 |
app | 是 | string | APP 类型:ios/android/universe |
-返回参数说明
参数名 | 类型 | 说明 |
---|---|---|
log_id | number | 调用的日志id |
error_code | number | 错误码,0通过,300002低分,300003高风险,300004身份证号与姓名不匹配或该身份证号不存在,300005公安网图片不存在或质量过低 |
error_msg | string | 错误信息 |
result | jsonObject | 认证返回的结果 |
+ verify_log_id | number | 核验日志id,用于查询错误原因 |
+ dec_image | string | SDK传入的解密的图片 |
4.2 人脸对比接口
-url:face/biz-demo/match
-请求方式:Content-Type 为 application/json,通过 json 格式化请求体
-返回值类型:JSON
-参数说明
参数名 | 必选 | 类型 | 说明 |
---|---|---|---|
skey | 是 | string | 加固版上报的密钥信息 skey |
x_device_id | 是 | string | 加固版上报的密钥信息 deviceId |
data | 是 | string | 加密数据 |
image_key | 是 | string | 对比图片key ,服务端根据图片key查询对比图片 |
-返回参数说明
参数名 | 类型 | 说明 |
---|---|---|
log_id | number | 调用的日志id |
error_code | number | 错误码,0通过,300002低分,300003高风险 |
error_msg | string | 错误信息 |
result | jsonObject | 认证返回的结果 |
+ verify_log_id | number | 核验日志id,用于查询错误原因 |
4.3 图片活体接口参数
-url:face/biz-demo/faceverify
-请求方式:Content-Type 为 application/json,通过 json 格式化请求体
-返回值类型:JSON
-参数说明
参数名 | 必选 | 类型 | 说明 |
---|---|---|---|
skey | 是 | string | 加固版上报的密钥信息 skey |
x_device_id | 是 | string | 加固版上报的密钥信息 deviceId |
data | 是 | string | 加密数据 |
zid | 否 | string | 风控参数:唯一标识 ZID |
phone | 否 | string | 风控参数:手机号 |
app | 是 | string | APP 类型:ios/android/universe |
-返回参数说明
参数名 | 类型 | 说明 |
---|---|---|
log_id | number | 调用的日志id |
error_code | number | 错误码,0通过,300002低分,300003高风险 |
error_msg | string | 错误信息 |
result | jsonObject | 认证返回的结果 |
+ verify_log_id | number | 核验日志id,用于查询错误原因 |
+ dec_image | string | SDK传入的解密的图片 |
五、人脸安全采集SDK接口文档
5.1 SSFaceSDK.h
包含其他头文件,及人脸扫描、活体验证状态码,同时还有执行业务流程的参数枚举等。没有一一列举,具体请参照头文件:
1#import "FaceSDKManager.h"
2#import "SSFaceDetectionManager.h"
3
4// 参数枚举等
5typedef NSString *FaceIdCardType NS_STRING_ENUM;
6FOUNDATION_EXPORT FaceIdCardType const KFaceIdCardTypeDefault; // 默认 大陆身份证
7FOUNDATION_EXPORT FaceIdCardType const KFaceIdCardTypeMTPIDCard; // 港澳居民来往内地通行证
8FOUNDATION_EXPORT FaceIdCardType const KFaceIdCardTypeFPRIDCard; // 外国人永久居留身份证
9FOUNDATION_EXPORT FaceIdCardType const KFaceIdCardTypePassport; // 定居国外的中国公民护照
10
11// 活体检测返回状态
12typedef NS_ENUM(NSUInteger, LivenessRemindCode) {
13 LivenessRemindCodeOK = 0, //成功
14 LivenessRemindCodeBeyondPreviewFrame, //出框
15 LivenessRemindCodeNoFaceDetected, //没有检测到人脸
16 LivenessRemindCodeMuchIllumination,
17 LivenessRemindCodePoorIllumination, //光照不足
18 LivenessRemindCodeImageBlured, //图像模糊
19 ...
20};
5.2 FaceSDKManager.h
图像采集行为和过程中需要的设置,属于全局配置。在原IDL库中FaceSDKManager基础上增加如下两个接口:
1/**
2 * SDK云端校验设置
3 * 需要云端校验,需提前申请id和secret
4 *
5 * @param clientId api key
6 * @param clientSecret api secret
7 */
8- (void)setBCEClientId:(NSString *)clientId clientSecret:(NSString *)clientSecret;
9
10
11/**
12 * SDK鉴权方法-文件授权
13 * SDK鉴权方法 必须在使用其他方法之前设置,否则会导致SDK不可用
14 *
15 * @param licenseID 授权ID
16 * @param licensePath 本地鉴权文件路径
17 * @param remoteAuthorize 是否远程更新过期鉴权文件
18 */
19- (void)setLicenseID:(NSString *)licenseID andLocalLicenceFile:(NSString *)licensePath andRemoteAuthorize:(BOOL)remoteAuthorize;
5.3 SSFaceDetectionManager.h
用于进行人脸识别具体行为动作。
1@interface SSFaceDetectionManager : NSObject
2// 图像返回帧处理代理
3@property (nonatomic, weak) id<SSCaptureDataOutputProtocol> delegate;
4
5// 采集流程运行状态
6@property (nonatomic, assign, readonly) BOOL runningStatus;
7
8// 风险检测超时时间:-1 关闭风险检测;大于0 风险检测超时时间;0 使用默认超时时间3秒
9@property (nonatomic, assign) NSInteger riskDetectionSetting;
10
11// 设置使用镜头,前置/后置
12@property (nonatomic, assign) AVCaptureDevicePosition devicePosition;
13
14// 输出形式,AVCaptureSessionPreset类型
15@property (nonatomic, copy) NSString *sessionPresent;
16
17// 采集图像区域
18@property (nonatomic, assign) CGRect previewRect;
19
20// 探测区域
21@property (nonatomic, assign) CGRect detectRect;
22
23// 是否开启声音提醒
24@property (nonatomic, assign) BOOL enableSound;
25
26// BDFaceDetectionTypeColorfulLiveness流程中是否开启动作活体,默认开启
27@property (nonatomic, assign) BOOL enableLivenessInColorfulFlow;
28
29+ (instancetype)sharedInstance;
30- (void)connectPreviewLayer:(AVCaptureVideoPreviewLayer*)pLayer;
31/**
32 * 创建用于实名认证的参数
33 */
34- (NSDictionary *)creatFaceVerifyParameters:(NSString *)idCardNumber
35 name:(NSString *)name
36 verifyType:(FaceIdCardType)cardType
37 nation:(NSString *)nation
38 phoneNumber:(NSString *)phoneNumber
39 livenessControl:(FaceLivenessControlType)livenessControl
40 spoofingControl:(FaceSpoofingControlType)spoofingControl
41 qualityControl:(FaceQualityControlType)qualityControl;
42
43/**
44 * 创建用于人脸比对的参数
45 */
46- (NSDictionary *)createFaceMatchParametersWithRegisterImage:(NSString *)registerImageBase64
47 registerImageType:(FaceRegisterImageType)registerImageType
48 registerFaceType:(FaceFaceType)registerFaceType
49 faceType:(FaceFaceType)faceType
50 faceSortType:(FaceSortype)faceSortType
51 phoneNumber:(NSString *)phoneNumber
52 livenessControl:(FaceLivenessControlType)livenessControl
53 qualityControl:(FaceQualityControlType)qualityControl
54 registerLivenessControl:(FaceLivenessControlType)registerLivenessControl
55 registerQualityControl:(FaceQualityControlType)registerQualityControl;
56
57/**
58 * 创建用于视频录制的参数
59 */
60- (NSDictionary *)createVideoRecordParametersWithEnableVideoRecording:(BOOL)enableVideoRecording
61 enableVideoSound:(BOOL)enableVideoSound
62 videoFileName:(NSString *)videoFileName
63 imageWidth:(NSUInteger)imageWidth
64 imageHeight:(NSUInteger)imageHeight;
65/**
66 * 开始当前人脸校验流程
67 * @param detectionType 业务流程,采集信息用于实名认证、人脸比对
68 * @param parameters 流程需要的参数
69 * @param flowType 操作流程,人脸采集、人脸活体
70 * @param vc 用于进行人脸信息采集的ViewController
71 */
72- (void)startSessionWithType:(BDFaceResultReportType)detectionType
73 parameters:(NSDictionary *)parameters
74 faceFlow:(BDFaceFlowType)flowType
75 viewController:(UIViewController *)vc;
76
77
78/**
79 * 开始当前人脸校验流程,供视频录制时传入参数使用
80 * @param detectionType 业务流程,采集信息用于实名认证、人脸比对
81 * @param parameters 流程需要的参数
82 * @param flowType 操作流程,人脸采集、人脸活体
83 * @param vc 用于进行人脸信息采集的ViewController
84 * @param videoParameters 需要录制视频的参数
85 * @param cameraAutoClose 镜头是否自动关闭
86 */
87- (void)startSessionWithType:(BDFaceResultReportType)detectionType
88 parameters:(NSDictionary *)parameters
89 faceFlow:(BDFaceFlowType)flowType
90 viewController:(UIViewController *)vc
91 videoParameters:(NSDictionary *)videoParameters
92 cameraAutoClose:(BOOL)cameraAutoClose;
93
94/**
95 * 取消当前人脸校验流程
96 */
97- (void)cancel;
98
99/**
100 * 开始视频录制,请与BDFaceCompletionStatusCameraStarted回调后调用
101 */
102- (void)startRecordingVideo;
103
104/**
105 * 结束当前录制,活体验证session流程结束时自动结束,不需要主动调用;BDFaceDetectionTypeVideoRecording 时主动调用
106 */
107- (void)stopRecordingVideo;
108
109/**
110 * 取消录制
111 */
112- (void)cancelRecording;
113
114/**
115 * 活体检测过程中,返回活体总数,当前成功个数,当前活体类型
116 */
117-(void)livenessProcessHandler:(LivenessProcess)process;
118
119/**
120 * 返回无黑边的方法
121 * @param array 活体动作数组
122 * @param order 是否顺序执行
123 * @param numberOfLiveness 活体动作个数
124 */
125- (void)livenesswithList:(NSArray *)array order:(BOOL)order numberOfLiveness:(NSInteger)numberOfLiveness;
5.4 通过startSession方法开始人脸采集后,通过SSCaptureDataOutputProtocol类型的delegate进行回调
1/**
2 * 流程返回结果类型
3 */
4typedef NS_ENUM(NSInteger, BDFaceCompletionStatus) {
5 BDFaceCompletionStatusSuccess = 1, // 成功
6 BDFaceCompletionStatusNoRisk = 2, // 无风险
7 BDFaceCompletionStatusImagesSuccess = 3, // 图像采集成功
8 BDFaceCompletionStatusCameraStarted = 4, // 相机开始
9
10 BDFaceCompletionStatusIsRunning = -1, // 正在采集图像
11 BDFaceCompletionStatusResultFail = -2, // 云端服务执行失败
12 BDFaceCompletionStatusIsRiskDevice = -3, // 风险设备
13 BDFaceCompletionStatusCameraError = -5, // 没有授权镜头
14 BDFaceCompletionStatusTimeout = -6, // 超时
15 BDFaceCompletionStatusCancel = -7, // 取消
16 BDFaceCompletionStatusVideoRecordingFail = -8, // 视频录制错误
17 BDFaceCompletionStatusColorMatchFailed = -9, // 炫彩色彩错误
18 BDFaceCompletionStatusVideoColorScoreFailed = -10, // 炫彩分数错误
19 BDFaceCompletionStatusSDKNotInit = -13, // SDK未初始化
20 BDFaceCompletionStatusLicenseFail = -15, // 授权错误
21 BDFaceCompletionStatusNetworkError = -16, // 网络错误
22};
23
24@protocol SSCaptureDataOutputProtocol <NSObject>
25
26// 帧图像回传,用于刷新UI使用
27- (void)captureOutputSampleBuffer:(UIImage *)image;
28
29// 本次人脸流程回调
30- (void)faceSessionCompletionWithStatus:(BDFaceCompletionStatus)status result:(NSDictionary *)result;
31
32// 活体检测状态
33- (void)livenessActionDidFinishWithCode:(LivenessRemindCode)code;
34
35// 人脸识别检测
36- (void)detectionActionDidFinishWithCode:(DetectRemindCode)code;
37
38// 炫彩活体状态回调
39- (void)colorfulActionDidFinishWithCode:(ColorRemindCode)code imageInfo:(NSDictionary *)imageInfo;
40
41@end
5.5 使用流程
具体代码请参考Demo,以下是流程概述:
1// 1. 初始化Face License相关
2NSString* licensePath = [NSString stringWithFormat:@"%@.%@", FACE_LICENSE_NAME, FACE_LICENSE_SUFFIX ];
3[[FaceSDKManager sharedInstance] setLicenseID:FACE_LICENSE_ID andLocalLicenceFile:licensePath andRemoteAuthorize:YES];
4
5// 2. 初始化Face相关设置属性
6[[FaceSDKManager sharedInstance] setColorJudgeAbility:false]; //炫彩颜色判断能力
7[[FaceSDKManager sharedInstance] setMaxCropImageNum:1]; // 设置照片采集张数,【注意:推荐设置成1张】
8
9// 3. 设置所需动作活体动作
10[[SSFaceDetectionManager sharedInstance] livenesswithList:_livenessArray order:_order numberOfLiveness:_numberOfLiveness];
11
12// 4. 开始炫彩活体流程
13NSDictionary *parameters = [self.videoCapture creatFaceVerifyParameters:@"身份证" name:@"姓名" verifyType:KFaceIdCardTypeDefault nation:nil phoneNumber:@"电话" livenessControl:nil spoofingControl:nil qualityControl:nil]; // 业务参数
14
15NSDictionary *videoParas = [self.videoCapture createVideoRecordParametersWithEnableVideoRecording:YES enableVideoSound:YES videoFileName:@"whatmean" imageWidth:480 imageHeight:640]; // 视频录制参数
16
17[self.videoCapture startSessionWithType:BDFaceResultReportTypeVerifySec parameters:parameters faceFlow:BDFaceDetectionTypeColorfulLiveness viewController:self videoParameters:videoParas cameraAutoClose:YES]; // 开始流程,【注意:faceFlow参数为Colorful】
18
19// 5. 接收回调
20- (void)colorfulActionDidFinishWithCode:(ColorRemindCode)code imageInfo:(NSDictionary *)imageInfo {
21 // 处理炫彩返回状态提醒
22}
23
24- (void)faceSessionCompletionWithStatus:(BDFaceCompletionStatus)status result:(NSDictionary *)result{
25// 处理整体流程状态
26 if (status == BDFaceCompletionStatusCameraStarted) {
27 [self.videoCapture startRecordingVideo]; // 【注意:需要调用方法启动视频录制】
28 } else {
29 // 其他处理方式请参考demo
30 }
31}
六、原金融级APP方案升级文档
1、从console平台下载新金融版示例工程代码,运行代码;
2、删除需要升级的项目中的如下framework和bundle
3、将示例工程代码中的如下文件,拷贝到现有工程的BDFaceSDK文件夹目录下;
4、现有工程目录如下:
5、Build Phases中添加libc++.tbd和libz.tbd两个库文件,如下图所示:
6、infoplist文件添加key值 Privacy - Microphone Usage Description,如下图所示:
7、搜索#import "IDLFaceSDK/IDLFaceSDK.h" 和 #import <IDLFaceSDK/IDLFaceSDK.h> 替换为 #import "FaceSDKLibHeader.h" 如下图所示:
8、删除BDFaceLivenessViewController和BDFaceDetectionViewController的.h和.m文件,并删除文中的所有代码引用。
9、删除代码 [IDLFaceLivenessManager sharedInstance].enableSound = YES;
10、全局搜索 IDLFaceDetectionManager 替换为SSFaceDetectionManager 如下图所示:
11、因为改动较大,建议整体替换 BDFaceBaseViewController 和 BDFaceColorfulViewController 的.h和.m文件;
12、关键流程介绍:
(1)开始识别代码:
1 - (void)startRecognize {
2 NSDictionary *parameters = [self.videoCapture creatFaceVerifyParameters:self.idCardNumber name:self.name verifyType:KFaceIdCardTypeDefault nation:nil phoneNumber:nil livenessControl:nil spoofingControl:nil qualityControl:nil];
3 NSDictionary *videoParas = [self.videoCapture createVideoRecordParametersWithEnableVideoRecording:YES enableVideoSound:YES videoFileName:@"whatmean" imageWidth:480 imageHeight:640];
4
5 [self.videoCapture startSessionWithType:BDFaceResultReportTypeVerifySec parameters:parameters faceFlow:BDFaceDetectionTypeColorfulLiveness viewController:self videoParameters:videoParas cameraAutoClose:YES];
6}
(2)识别成功回调:
1 - (void)faceCallbackWithCode:(BDFaceCompletionStatus)status result:(NSDictionary *)result
2注意:result为识别成功后,结果的回调,状态码BDFaceCompletionStatusSuccess为整个采集流程成功结束,此时,result才有数据;BDFaceCompletionStatusImagesSuccess仅仅表示采集动作结束,此时result没有数据。
(3) 动作活体结束:
- (void)livenessProcesssWithCode:(LivenessRemindCode)remindCode
(4)炫彩活体流程回调:
- (void)colorfulProcesssWithCode:(ColorRemindCode)code imageInfo:(NSDictionary *)images
13、运行修复剩余error,根据现有项目改动代码,运行代码;
14、修改BDFaceVerificationController.m,根据自身业务使用情况,将人证核验、人脸比对、活体检测请求代码移动到现有项目中;
15、全局搜索#warning developer,将BDFaceBaseSafeRequestBaseURL替换为自身服务器地址,如下图所示的代码:
16、请求接口改动,最新的流程使用了 SDK->自定义的服务器地址->请求百度人脸服务,请求部分代码接口在BDFaceVerificationController.m查看,具体有以下几个接口:
(1) 人证核验接口
- (void)requestSafelyToCheckIdetifierCardAndPerson:(NSDictionary *)dic
(2) 图片比对接口
- (void)receiveDataFromServerForCompareImage:(NSDictionary *)dic
(3)活体检测接口
- (void)receiveDataFromServerForCheckAlive:(NSDictionary *)dic
17、根据自身业务的使用,修改剩余代码。
七、不使用OCR及身份信息录入
1、下载完示例工程,配置Server地址,运行示例工程代码;点击开始身份核验,走完所有流程,可以出现如下界面:
2、删除如下图所示的库文件:
3、全局搜索 #import <AipOcrSdk/AipOcrSdk.h>,并删除所有引用;
4、搜索 -(void) startOCRSdk,注释如下函数:
5、搜索“OCR 能力加载“,注释以下代码:
6、在- (IBAction)startGatherAction:(UIButton *)sender 里注释以下代码:
1 AppDelegate *appDelegate = (AppDelegate*) [[UIApplication sharedApplication]delegate];
2 if (appDelegate.useOCR == 1) {
3 // OCR 身份证识别页面
4 [self startOCRSdk];
5 } else {
6 // 手动输入页面
7 BDFaceManualPersonalDataConfirmController * ocr = [[BDFaceManualPersonalDataConfirmController alloc] init];
8 if (@available(iOS 13.0, *)) {
9 ocr.modalPresentationStyle = 0;
10 }
11 [self presentViewController:ocr animated:YES completion:nil];
12}
7、在- (IBAction)startGatherAction:(UIButton *)sender 方法里添加如下代码:
1NSArray * colorArr = [[NSArray alloc] initWithObjects:@(FaceLivenessActionTypeLiveEye), @(FaceLivenessActionTypeLiveMouth), nil];
2 int r = arc4random() % [colorArr count];
3 BDFaceColorfulViewController* cvc = [[BDFaceColorfulViewController alloc] init];
4 BDFaceLivingConfigModel* model = [BDFaceLivingConfigModel sharedInstance];
5 [cvc livenesswithList:@[colorArr[r]] order:model.isByOrder numberOfLiveness:model.numOfLiveness];
6 cvc.modalPresentationStyle = UIModalPresentationFullScreen;
7#warning developer 这里需要加入要识别的用户的姓名和身份证号
8 cvc.name = @"";
9 cvc.idCardNumber = @"";
10[self presentViewController:cvc animated:YES completion:nil];
注意:上面的方法里的cvc.name = @"";和cvc.idCardNumber = @""; 引号里需要写上真真实的姓名和身份证,供之后采集人脸后,身份信息和人脸进行比对。
8、最终的- (IBAction)startGatherAction:(UIButton *)sender 函数如下:
9、在Viewcontroller.m 文件的头文件中,加入引用: #import "BDFaceColorfulViewController.h"
10、运行工程,点击下面的Button开始身份认证按钮即可开始人证核验过程。