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

iOS-方案集成指南

本文档介绍了金融级APP实名认证方案iOS端集成开发流程。

一、运行示例工程

1、打开下载的iOS示例工程,如下图所示:

iOS图片1.png

2、全局搜索关键词: #warning developer,找到宏定义BDFaceBaseSafeRequestBaseURL,修改这个值为指定的Server服务地址,具体如下图所示:

iOS图片2.png

3、确认bundleId等信息是否正确,之后连接真机进行运行,之后可以看到如下界面:

iOS图片3.png

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

iOS图片 4.png

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

二、集成步骤

1、将BDFaceSDK文件夹下所有文件拖动到目标项目中,如下图所示

图片5.png

2、将AipBase.framework, AipOcrSdk.framework和IdcardQuality.framework拖动到目标项目,如下所图示

图片 6.png

3、在Build Phases中点击下面的+号,选择NewCopyFilePhases,添加一个CopyFiles,如下图所示

图片 7.png

4、双击上图的CopyFiles,改为Embed Frameworks,同时Destination,改为framework,之后将AipBase.framework, AipOcrSdk.framework和IdcardQuality.framework拖动到下面,如下图所示:

图片 8.png

5、Link Binary With Libraries中添加libc++.tbd、libz.tbd 如下图所示:

图片 9.png

6、info.plist 文件中添加以下key

图片 10.png

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

三、关键代码说明

1、人脸识别SDK鉴权代码如下,canwork方法返回YES,代表人脸SDK鉴权成功。

 NSString* licensePath = [NSString stringWithFormat:@"%@.%@", FACE_LICENSE_NAME, FACE_LICENSE_SUFFIX ];
    [[FaceSDKManager sharedInstance] setLicenseID:FACE_LICENSE_ID andLocalLicenceFile:licensePath andRemoteAuthorize:true];
    NSLog(@"canWork = %d",[[FaceSDKManager sharedInstance] canWork]);
    NSLog(@"version = %@",[[FaceSDKManager sharedInstance] getVersion]);

2、OCR SDK鉴权代码如下

NSString *licenseFile = [[NSBundle mainBundle] pathForResource:FACE_API_ORC_KEY ofType:FACE_SECRET_OCR_KEY];
    NSData *licenseFileData = [NSData dataWithContentsOfFile:licenseFile];
    [[AipOcrService shardService] authWithLicenseFileData:licenseFileData];
    NSLog(@"ocr sd version: %@", [AipOcrService ocrSdkVersion]);

点击开始身份认证,可以成功进入如下界面,没有报错,表示OCR鉴权成功

图片 11.png

3、返回拍照页面,并开始离线识别身份证:

-(void) startOCRSdk {
    [self configCallback];
    // 身份证识别
    [AipCaptureCardVC clearIdCard];
    _vc =
    [AipCaptureCardVC ViewControllerWithCardType:CardTypeLocalIdCardFont
                                 andImageHandler:^(UIImage *image) {
        _idCardImage = image;
        [[AipOcrService shardService] detectIdCardFrontFromImage:image
                                                     withOptions:nil
                                                  successHandler:^(id result){
            _successHandler(result);
        }
                                                     failHandler:_failHandler];
    }];

4、调起人脸识别界面,BDFaceColorfulViewController为人脸识别Controller。注意,如果不适用OCR部分,那么这里需要传入自定义的姓名和身份证号字符串。

- (void)faceColor {
    NSArray * colorArr = [[NSArray alloc] initWithObjects:@(FaceLivenessActionTypeLiveEye), @(FaceLivenessActionTypeLiveMouth), nil];
    int r = arc4random() % [colorArr count];
    BDFaceColorfulViewController* cvc = [[BDFaceColorfulViewController alloc] init];
    BDFaceLivingConfigModel* model = [BDFaceLivingConfigModel sharedInstance];
    [cvc livenesswithList:@[colorArr[r]] order:model.isByOrder numberOfLiveness:model.numOfLiveness];
    cvc.modalPresentationStyle = UIModalPresentationFullScreen;
    cvc.name = _idCardName;
    cvc.idCardNumber = _idCardNumber;
    [self presentViewController:cvc animated:YES completion:nil];
}

5、人脸识别完成结果回调函数

- (void)faceCallbackWithCode:(BDFaceCompletionStatus)status result:(NSDictionary *)result {

    NSLog(@">>>>>>>>>>>faceCallbackWithCode, %ld  %@", (long)status,[self showCompletionStatusWithType:status]);
    MyLog(@"result = %@",result);
    NSDictionary *dic = [self dictionaryWithJsonString:result[@"data"]];
    [[BDFaceImageShow sharedInstance] setAuraLiveColor:[NSString stringWithFormat:@"licenseId:%@",dic[@"licenseId"]]];
    
    if (status == BDFaceCompletionStatusCameraStarted) {
        [self.videoCapture startRecordingVideo];
    } else if (status ==  BDFaceCompletionStatusImagesSuccess) {
        NSLog(@"%@", result);
    } else if (status == BDFaceCompletionStatusSuccess) {
        dispatch_async(dispatch_get_main_queue(), ^{
            [self.remindAnimationView stopActionAnimating];
            BDFaceVerificationController *avc = [[BDFaceVerificationController alloc] init];
            avc.modalPresentationStyle = UIModalPresentationFullScreen;
            avc.name = _name;
            avc.idCardNumber = _idCardNumber;
            avc.receivedData = result;
            if (@available(iOS 13.0, *)) {
                avc.modalPresentationStyle = 0;
            }
            [self closeAction];
            [self.presentingViewController presentViewController:avc animated:YES completion:nil];
        });

    }

注意:BDFaceCompletionStatusSuccess为采集结束,同时只有这个时候加密的信息才会在result中返回,BDFaceCompletionStatusImagesSuccess 只是流程上采集结束了,但是result是没有信息的,使用BDFaceCompletionStatusSuccess这个枚举即可。

6、动作活体返回状态回调:

- (void)livenessProcesssWithCode:(LivenessRemindCode)remindCode {
    
    dispatch_async(dispatch_get_main_queue(), ^{
        self.isAnimating = [self.remindAnimationView isActionAnimating];
    });
    
    switch (remindCode) {
        case LivenessRemindCodeOK:

7、炫彩返回状态回调:

- (void)colorfulProcesssWithCode:(ColorRemindCode)code imageInfo:(NSDictionary *)images {
    __weak typeof(self) weakSelf = self;
    
    NSLog(@">>>>>>>> result code:%ld, info:%@", code, images);

    switch (code) {
       case ColorRemindCodeOK:

8、发请求BaseURL,如下图所示,开发者需要配置自己服务器的Host和端口号,进行相关请求;

图片 12.png

9、进行姓名、身份证号和人脸比较,如下:

- (void)requestSafelyToCheckIdetifierCardAndPerson:(NSDictionary *)dic {
    NSString *finantialVerificationIdCardPersonImageUrl = [NSString stringWithFormat:@"%@%@", BDFaceBaseSafeRequestBaseURL, @"/face/biz-demo/verify"];
    NSString *urlString = [NSString stringWithFormat:@"%@", finantialVerificationIdCardPersonImageUrl];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlString]];
    NSMutableDictionary *parameters = [NSMutableDictionary dictionary];

10、进行图片比对,一般是自身服务器中有图片底库,客户端采集完之后上传一张图片,这两张图片进行比较,注意:imageKey开发者自定义传入(也就是存在服务器中的照片底库标识码)

- (void)requestSafelyToCompareImages:(NSDictionary *)dic {
    NSString *finantialVerificationImageCompareUrl = [NSString stringWithFormat:@"%@%@", BDFaceBaseSafeRequestBaseURL, @"/face/biz-demo/match"];
    NSString *urlString = [NSString stringWithFormat:@"%@", finantialVerificationImageCompareUrl];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlString]];
    NSMutableDictionary *parameters = [NSMutableDictionary dictionary];
    
    NSString *skey = dic[@"skey"];
    NSString *xDeviceId = dic[@"x-device-id"];
    NSString *theDataString = dic[@"data"];
    NSString *appPlatform = @"ios"; // ios 必须是小写,服务端定的
    parameters[BDFaceKeyOfSkey] = skey ?: @"";
    parameters[BDFaceKeyOfXdeviceId] = xDeviceId ?: @"";
    parameters[BDFaceKeyOfApp] = appPlatform ?: @"";

    NSDictionary *tempDataDic = [NSJSONSerialization JSONObjectWithData:[theDataString dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingMutableLeaves error:nil];
    theDataString = tempDataDic[@"data"];
    parameters[BDFaceKeyOfData] = tempDataDic[@"data"] ?: @"";

#warning developer 这里只是联调使用,imageKey需要根据自己代码确定,图片的唯一标识码是什么,不能使用如下一行的代码

 NSString *imageKey = [[NSUserDefaults standardUserDefaults] objectForKey:@"imagekeyfortesting"];
    parameters[BDFaceKeyOfRegisterKey] = imageKey ?: @"";

11、活体检测接口调用,如下图所示:

- (void)requestSafelyToCheckLive:(NSDictionary *)dic {
    NSString *finantialVerificationCheckLiveUrl =  [NSString stringWithFormat:@"%@%@", BDFaceBaseSafeRequestBaseURL, @"/face/biz-demo/faceverify"];
    NSString *urlString = [NSString stringWithFormat:@"%@", finantialVerificationCheckLiveUrl];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlString]];
    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

包含其他头文件,及人脸扫描、活体验证状态码,同时还有执行业务流程的参数枚举等。没有一一列举,具体请参照头文件:

#import "FaceSDKManager.h"
#import "SSFaceDetectionManager.h"

// 参数枚举等
typedef NSString *FaceIdCardType NS_STRING_ENUM;
FOUNDATION_EXPORT FaceIdCardType const KFaceIdCardTypeDefault; // 默认 大陆身份证
FOUNDATION_EXPORT FaceIdCardType const KFaceIdCardTypeMTPIDCard; // 港澳居民来往内地通行证
FOUNDATION_EXPORT FaceIdCardType const KFaceIdCardTypeFPRIDCard; // 外国人永久居留身份证
FOUNDATION_EXPORT FaceIdCardType const KFaceIdCardTypePassport; // 定居国外的中国公民护照

// 活体检测返回状态
typedef NS_ENUM(NSUInteger, LivenessRemindCode) {
    LivenessRemindCodeOK = 0,   //成功
    LivenessRemindCodeBeyondPreviewFrame,    //出框
    LivenessRemindCodeNoFaceDetected, //没有检测到人脸
    LivenessRemindCodeMuchIllumination,
    LivenessRemindCodePoorIllumination,   //光照不足
    LivenessRemindCodeImageBlured,    //图像模糊
    ...
};

5.2 FaceSDKManager.h

图像采集行为和过程中需要的设置,属于全局配置。在原IDL库中FaceSDKManager基础上增加如下两个接口:

/**
 *  SDK云端校验设置
 *  需要云端校验,需提前申请id和secret
 *
 *  @param clientId api key
 *  @param clientSecret api secret
 */
- (void)setBCEClientId:(NSString *)clientId clientSecret:(NSString *)clientSecret;


/**
 *  SDK鉴权方法-文件授权
 *  SDK鉴权方法 必须在使用其他方法之前设置,否则会导致SDK不可用
 *
 *  @param licenseID 授权ID
 *  @param licensePath 本地鉴权文件路径
 *  @param remoteAuthorize 是否远程更新过期鉴权文件
 */
- (void)setLicenseID:(NSString *)licenseID andLocalLicenceFile:(NSString *)licensePath andRemoteAuthorize:(BOOL)remoteAuthorize;

5.3 SSFaceDetectionManager.h

用于进行人脸识别具体行为动作。

@interface SSFaceDetectionManager : NSObject
// 图像返回帧处理代理
@property (nonatomic, weak) id<SSCaptureDataOutputProtocol> delegate;

// 采集流程运行状态
@property (nonatomic, assign, readonly) BOOL runningStatus;

// 风险检测超时时间:-1 关闭风险检测;大于0 风险检测超时时间;0 使用默认超时时间3秒
@property (nonatomic, assign) NSInteger riskDetectionSetting;

// 设置使用镜头,前置/后置
@property (nonatomic, assign) AVCaptureDevicePosition devicePosition;

// 输出形式,AVCaptureSessionPreset类型
@property (nonatomic, copy) NSString *sessionPresent;

// 采集图像区域
@property (nonatomic, assign) CGRect previewRect;

// 探测区域
@property (nonatomic, assign) CGRect detectRect;

// 是否开启声音提醒
@property (nonatomic, assign) BOOL enableSound;

// BDFaceDetectionTypeColorfulLiveness流程中是否开启动作活体,默认开启
@property (nonatomic, assign) BOOL enableLivenessInColorfulFlow;

+ (instancetype)sharedInstance;
- (void)connectPreviewLayer:(AVCaptureVideoPreviewLayer*)pLayer;
/**
 * 创建用于实名认证的参数
 */
- (NSDictionary *)creatFaceVerifyParameters:(NSString *)idCardNumber
                                       name:(NSString *)name
                                 verifyType:(FaceIdCardType)cardType
                                     nation:(NSString *)nation
                                phoneNumber:(NSString *)phoneNumber
                            livenessControl:(FaceLivenessControlType)livenessControl
                            spoofingControl:(FaceSpoofingControlType)spoofingControl
                             qualityControl:(FaceQualityControlType)qualityControl;

/**
 * 创建用于人脸比对的参数
 */
- (NSDictionary *)createFaceMatchParametersWithRegisterImage:(NSString *)registerImageBase64
                                           registerImageType:(FaceRegisterImageType)registerImageType
                                            registerFaceType:(FaceFaceType)registerFaceType
                                                    faceType:(FaceFaceType)faceType
                                                faceSortType:(FaceSortype)faceSortType
                                                 phoneNumber:(NSString *)phoneNumber
                                             livenessControl:(FaceLivenessControlType)livenessControl
                                              qualityControl:(FaceQualityControlType)qualityControl
                                     registerLivenessControl:(FaceLivenessControlType)registerLivenessControl
                                      registerQualityControl:(FaceQualityControlType)registerQualityControl;

/**
 * 创建用于视频录制的参数
 */
- (NSDictionary *)createVideoRecordParametersWithEnableVideoRecording:(BOOL)enableVideoRecording
                                                     enableVideoSound:(BOOL)enableVideoSound
                                                        videoFileName:(NSString *)videoFileName
                                                           imageWidth:(NSUInteger)imageWidth
                                                          imageHeight:(NSUInteger)imageHeight;
/**
 * 开始当前人脸校验流程
 * @param detectionType 业务流程,采集信息用于实名认证、人脸比对
 * @param parameters 流程需要的参数
 * @param flowType 操作流程,人脸采集、人脸活体
 * @param vc 用于进行人脸信息采集的ViewController
 */
- (void)startSessionWithType:(BDFaceResultReportType)detectionType
                  parameters:(NSDictionary *)parameters
                    faceFlow:(BDFaceFlowType)flowType
              viewController:(UIViewController *)vc;


/**
 * 开始当前人脸校验流程,供视频录制时传入参数使用
 * @param detectionType 业务流程,采集信息用于实名认证、人脸比对
 * @param parameters 流程需要的参数
 * @param flowType 操作流程,人脸采集、人脸活体
 * @param vc 用于进行人脸信息采集的ViewController
 * @param videoParameters 需要录制视频的参数
 * @param cameraAutoClose 镜头是否自动关闭
 */
- (void)startSessionWithType:(BDFaceResultReportType)detectionType
                  parameters:(NSDictionary *)parameters
                    faceFlow:(BDFaceFlowType)flowType
              viewController:(UIViewController *)vc
             videoParameters:(NSDictionary *)videoParameters
             cameraAutoClose:(BOOL)cameraAutoClose;

/**
 * 取消当前人脸校验流程
 */
- (void)cancel;

/**
 * 开始视频录制,请与BDFaceCompletionStatusCameraStarted回调后调用
 */
- (void)startRecordingVideo;

/**
 * 结束当前录制,活体验证session流程结束时自动结束,不需要主动调用;BDFaceDetectionTypeVideoRecording 时主动调用
 */
- (void)stopRecordingVideo;

/**
 * 取消录制
 */
- (void)cancelRecording;

/**
 * 活体检测过程中,返回活体总数,当前成功个数,当前活体类型
 */
-(void)livenessProcessHandler:(LivenessProcess)process;

/**
 * 返回无黑边的方法
 * @param array 活体动作数组
 * @param order 是否顺序执行
 * @param numberOfLiveness 活体动作个数
 */
- (void)livenesswithList:(NSArray *)array order:(BOOL)order numberOfLiveness:(NSInteger)numberOfLiveness;

5.4 通过startSession方法开始人脸采集后,通过SSCaptureDataOutputProtocol类型的delegate进行回调

/**
 * 流程返回结果类型
 */
typedef NS_ENUM(NSInteger, BDFaceCompletionStatus) {
    BDFaceCompletionStatusSuccess = 1,  // 成功
    BDFaceCompletionStatusNoRisk = 2,   // 无风险
    BDFaceCompletionStatusImagesSuccess = 3, // 图像采集成功
    BDFaceCompletionStatusCameraStarted = 4, // 相机开始
    
    BDFaceCompletionStatusIsRunning = -1,   // 正在采集图像
    BDFaceCompletionStatusResultFail = -2,  // 云端服务执行失败
    BDFaceCompletionStatusIsRiskDevice = -3,    // 风险设备
    BDFaceCompletionStatusCameraError = -5,    // 没有授权镜头
    BDFaceCompletionStatusTimeout = -6, // 超时
    BDFaceCompletionStatusCancel = -7, // 取消
    BDFaceCompletionStatusVideoRecordingFail = -8, // 视频录制错误
    BDFaceCompletionStatusColorMatchFailed = -9, // 炫彩色彩错误
    BDFaceCompletionStatusVideoColorScoreFailed = -10, // 炫彩分数错误
    BDFaceCompletionStatusSDKNotInit = -13, // SDK未初始化
    BDFaceCompletionStatusLicenseFail = -15, // 授权错误
    BDFaceCompletionStatusNetworkError = -16,    // 网络错误
};

@protocol SSCaptureDataOutputProtocol <NSObject>

// 帧图像回传,用于刷新UI使用
- (void)captureOutputSampleBuffer:(UIImage *)image;

// 本次人脸流程回调
- (void)faceSessionCompletionWithStatus:(BDFaceCompletionStatus)status result:(NSDictionary *)result;

// 活体检测状态
- (void)livenessActionDidFinishWithCode:(LivenessRemindCode)code;

// 人脸识别检测
- (void)detectionActionDidFinishWithCode:(DetectRemindCode)code;

// 炫彩活体状态回调
- (void)colorfulActionDidFinishWithCode:(ColorRemindCode)code imageInfo:(NSDictionary *)imageInfo;

@end

5.5 使用流程

具体代码请参考Demo,以下是流程概述:

// 1. 初始化Face License相关
NSString* licensePath = [NSString stringWithFormat:@"%@.%@", FACE_LICENSE_NAME, FACE_LICENSE_SUFFIX ];
[[FaceSDKManager sharedInstance] setLicenseID:FACE_LICENSE_ID andLocalLicenceFile:licensePath andRemoteAuthorize:YES];

// 2. 初始化Face相关设置属性
[[FaceSDKManager sharedInstance] setColorJudgeAbility:false]; //炫彩颜色判断能力
[[FaceSDKManager sharedInstance] setMaxCropImageNum:1];  // 设置照片采集张数,【注意:推荐设置成1张】

// 3. 设置所需动作活体动作
[[SSFaceDetectionManager sharedInstance] livenesswithList:_livenessArray order:_order numberOfLiveness:_numberOfLiveness];

// 4. 开始炫彩活体流程
NSDictionary *parameters =  [self.videoCapture creatFaceVerifyParameters:@"身份证" name:@"姓名" verifyType:KFaceIdCardTypeDefault nation:nil phoneNumber:@"电话" livenessControl:nil spoofingControl:nil qualityControl:nil]; // 业务参数

NSDictionary *videoParas = [self.videoCapture createVideoRecordParametersWithEnableVideoRecording:YES enableVideoSound:YES videoFileName:@"whatmean" imageWidth:480 imageHeight:640]; // 视频录制参数

[self.videoCapture startSessionWithType:BDFaceResultReportTypeVerifySec parameters:parameters faceFlow:BDFaceDetectionTypeColorfulLiveness viewController:self videoParameters:videoParas cameraAutoClose:YES]; // 开始流程,【注意:faceFlow参数为Colorful】

// 5. 接收回调
- (void)colorfulActionDidFinishWithCode:(ColorRemindCode)code imageInfo:(NSDictionary *)imageInfo {
   // 处理炫彩返回状态提醒
}

- (void)faceSessionCompletionWithStatus:(BDFaceCompletionStatus)status result:(NSDictionary *)result{
// 处理整体流程状态
  if (status == BDFaceCompletionStatusCameraStarted) {
    [self.videoCapture startRecordingVideo]; // 【注意:需要调用方法启动视频录制】
  } else {
    // 其他处理方式请参考demo
  }
}

六、原金融级APP方案升级文档

1、从console平台下载新金融版示例工程代码,运行代码;

2、删除需要升级的项目中的如下framework和bundle

升级2.png

3、将示例工程代码中的如下文件,拷贝到现有工程的BDFaceSDK文件夹目录下;

升级3.png

4、现有工程目录如下:

升级4.png

5、Build Phases中添加libc++.tbd和libz.tbd两个库文件,如下图所示:

升级5.png

6、infoplist文件添加key值 Privacy - Microphone Usage Description,如下图所示:

升级6.png

7、搜索#import "IDLFaceSDK/IDLFaceSDK.h" 和 #import <IDLFaceSDK/IDLFaceSDK.h> 替换为 #import "FaceSDKLibHeader.h" 如下图所示:

升级7.png

8、删除BDFaceLivenessViewController和BDFaceDetectionViewController的.h和.m文件,并删除文中的所有代码引用。

9、删除代码 [IDLFaceLivenessManager sharedInstance].enableSound = YES;

10、全局搜索 IDLFaceDetectionManager 替换为SSFaceDetectionManager 如下图所示:

升级10.png

11、因为改动较大,建议整体替换 BDFaceBaseViewController 和 BDFaceColorfulViewController 的.h和.m文件;

12、关键流程介绍:

(1)开始识别代码:

 - (void)startRecognize {
    NSDictionary *parameters =  [self.videoCapture creatFaceVerifyParameters:self.idCardNumber name:self.name verifyType:KFaceIdCardTypeDefault nation:nil phoneNumber:nil livenessControl:nil spoofingControl:nil qualityControl:nil];
    NSDictionary *videoParas = [self.videoCapture createVideoRecordParametersWithEnableVideoRecording:YES enableVideoSound:YES videoFileName:@"whatmean" imageWidth:480 imageHeight:640];
    
    [self.videoCapture startSessionWithType:BDFaceResultReportTypeVerifySec parameters:parameters faceFlow:BDFaceDetectionTypeColorfulLiveness viewController:self videoParameters:videoParas cameraAutoClose:YES];
}

(2)识别成功回调:

 - (void)faceCallbackWithCode:(BDFaceCompletionStatus)status result:(NSDictionary *)result
注意: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替换为自身服务器地址,如下图所示的代码:

升级15.png

16、请求接口改动,最新的流程使用了 SDK->自定义的服务器地址->请求百度人脸服务,请求部分代码接口在BDFaceVerificationController.m查看,具体有以下几个接口: (1) 人证核验接口 - (void)requestSafelyToCheckIdetifierCardAndPerson:(NSDictionary *)dic

(2) 图片比对接口 - (void)receiveDataFromServerForCompareImage:(NSDictionary *)dic

(3)活体检测接口 - (void)receiveDataFromServerForCheckAlive:(NSDictionary *)dic

17、根据自身业务的使用,修改剩余代码。

七、不使用OCR及身份信息录入

1、下载完示例工程,配置Server地址,运行示例工程代码;点击开始身份核验,走完所有流程,可以出现如下界面:

o1.png

2、删除如下图所示的库文件:

o2.png

3、全局搜索 #import <AipOcrSdk/AipOcrSdk.h>,并删除所有引用;

4、搜索 -(void) startOCRSdk,注释如下函数:

o4.png

5、搜索“OCR 能力加载“,注释以下代码:

o5.png

6、在- (IBAction)startGatherAction:(UIButton *)sender 里注释以下代码:

   AppDelegate *appDelegate = (AppDelegate*) [[UIApplication sharedApplication]delegate];
    if (appDelegate.useOCR == 1) {
        // OCR 身份证识别页面
        [self startOCRSdk];
    } else {
        // 手动输入页面
        BDFaceManualPersonalDataConfirmController * ocr = [[BDFaceManualPersonalDataConfirmController alloc] init];
        if (@available(iOS 13.0, *)) {
            ocr.modalPresentationStyle = 0;
        }
        [self presentViewController:ocr animated:YES completion:nil];
}

7、在- (IBAction)startGatherAction:(UIButton *)sender 方法里添加如下代码:

NSArray * colorArr = [[NSArray alloc] initWithObjects:@(FaceLivenessActionTypeLiveEye), @(FaceLivenessActionTypeLiveMouth), nil];
    int r = arc4random() % [colorArr count];
    BDFaceColorfulViewController* cvc = [[BDFaceColorfulViewController alloc] init];
    BDFaceLivingConfigModel* model = [BDFaceLivingConfigModel sharedInstance];
    [cvc livenesswithList:@[colorArr[r]] order:model.isByOrder numberOfLiveness:model.numOfLiveness];
    cvc.modalPresentationStyle = UIModalPresentationFullScreen;
#warning developer 这里需要加入要识别的用户的姓名和身份证号
    cvc.name = @"";
    cvc.idCardNumber = @"";
[self presentViewController:cvc animated:YES completion:nil];

注意:上面的方法里的cvc.name = @"";和cvc.idCardNumber = @""; 引号里需要写上真真实的姓名和身份证,供之后采集人脸后,身份信息和人脸进行比对。

8、最终的- (IBAction)startGatherAction:(UIButton *)sender 函数如下:

o8.png

9、在Viewcontroller.m 文件的头文件中,加入引用: #import "BDFaceColorfulViewController.h"

10、运行工程,点击下面的Button开始身份认证按钮即可开始人证核验过程。

上一篇
方案集成前准备
下一篇
Android-方案集成指南