开放能力
开发平台
行业应用
生态合作
开发与教学
资讯 社区 控制台
技术能力
语音技术
图像技术
文字识别
人脸与人体识别
视频技术
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-方案集成指南