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

    IOS

    1、简介

    1.1 功能介绍

    百度安全增强级采集 SDK iOS 版是一种面向 iOS 移动设备的人脸技术开发包,此版SDK包含人脸检测、活体识别等功能。基于该方案,开发者可以轻松的构建包含人脸检测、采集和活体识别的应用。在您使用SDK之前,我们首先为您介绍一下SDK本身及相关人脸能力,以便您能更方便使用人脸服务。

    此版SDK基于在线的安全能力封装为人脸比对和实名认证两个核心流程,主要用于在客户端执行这两种流程。因为这两种流程最终需要向服务器发起请求以完成认证,因此无法在离线环境下使用。

    此版SDK所包含的能力如下:

    • 动作活体检测:通过让用户做出指定人脸配合式的交互动作,识别当前操作者是否为活体,此功能为离线使用,可设定指定动作是否使用及应用顺序。动作包含:眨眼、张嘴、左摇头,右摇头,向上抬头,向下低头六个。可有效抵御高清图片、3D建模、视频等攻击。
    • 人脸质量检测:判断视频流中的图片帧中,哪些图片质量较佳,即人脸图像特征清晰(满足遮挡、姿态、光照、模糊度等校验)。
    • 人脸图像采集:通过本地SDK能力,采集人脸图像,同时经过人脸质量检测,确保采集到的人脸图像符合各条件校验(遮挡、姿态、光照、模糊度等),为设备前端获取有效可分析人脸的主要功能。
    • 授权:SDK的授权判断,授权介质也称为license,在SDK使用中,需要通过license向授权服务器发起请求,判断SDK的使用合法性及使用有效期。
    • 人脸比对和实名认证流程:通过将原子操作封装为安全的流程,在流程中加入多种安全防护能力,能够抵御大多数针对人脸流程的攻击。因为不用自行维护流程,应用程序使用人脸比对和实名认证功能也变得更加简便。

    image.png 为了方便您的开发,我们已经为您准备了多种场景的示例工程,您可以根据业务需要,在后台进行直接下载,目前支持【人脸核身】【人脸闸机/门禁】【人脸登录/考勤】【多人脸识别】,示例工程参考下图:

    image.png

    1.2 兼容性

    • 系统:支持iOS9以上系统。需要开发者通过Deployment Target 来保证支持系统的检测。
    • 机型:手机和平板皆可(暂不支持横屏)
    • 架构:arm64、armv7
    • 网络:支持 WIFI 及移动网络,移动网络支持使用 NET 网关及WAP 网关(CMWAP、CTWAP、UNIWAP、3GWAP)。

    1.3 开发包说明

    文件/文件夹名 说明
    FaceSDK FaceSDK 包、bundle 资源文件、bundle 模型文件、鉴权文件
    Public/Common 视频流处理类
    Public/Utils 图像处理类
    UI/Controller DEMO工程
    UI/View View控制类
    FaceParameterConfig.h 配置信息

    2、集成指南

    2.1 准备工作

    2.1.1 申请license

    人脸SDK License:此license用于SDK离线功能使用,在您的申请人脸SDK的后台页面,全局->产品服务->人脸识别->客户端SDK申请

    人脸控制台路径如下:

    image.png

    点击客户端SDK管理,弹出如下图:创建应用(这里创建应用是为了使用离线SDK,上面创建应用为了使用人脸在线接口,如注册、识别等)

    image.png 在弹出的框中输入授权标识,选择应用类型,应用系统,以及包名,详情请查看输入框右边提示

    image.png

    2.1.2 下载SDK

    image.png

    下载SDK分为自动配置授权信息(创建license后就可以选择为该应用,下载后SDK自动帮您配置授权,不用下载license拷贝到工程中,初始化参数licenseID,包名也帮您配置好了)和未配置授权信息两种方式:

    image.png

    2.2 运行示例工程

    2.2.1 自动配置授权信息集成

    如果您是通过自动配置授权信息下载的示例工程,只需配置好证书即可。查看下项目中的FaceParameterConfig.h文件,已经自动配置

    image.png

    配置好证书,即可运行。注意已经设置好的bundle id不要随意改动。

    2.2.2 未使用自动配置授权信息的集成

    手动导入授权信息。 需要手动导入license文件,配置好bundleID、licenseID等信息:

    image.png

    2.3 添加SDK到工程

    1、 打开或者新建一个项目。

    2、 右键点击项目,会出现一个添加菜单,在菜单中选择『Add Files to“此处是你的项目名字”…… 』,如下图所示:

    image.png

    3、 在添加文件弹出框里面选择申请到的license和SDK添加进来。如下图:

    注意:license为百度官方提供的。

    BDFaceSDK文件夹下包含下面文件:

    • com.baidu.idl.face.faceSDK.bundle
    • com.baidu.idl.face.live.action.image.bundle
    • com.baidu.idl.face.model.faceSDK.bundle
    • idl-key.face-ios
    • idl-license.face-ios
    • FaceSSDKLib(libFaceSSDKLib.a、SSDKLib.h、SSFaceDetectionManager.h、SSFaceSDK.h、SSFaceSDKManager.h)

    image.png

    4、确认下Bundle Identifier 是否是申请license时填报的那一个,注意:license和Bundle Identifier是一一对应关系,填错了会导致SDK不能用。

    image.png 5、 填写正确的FACE_LICENSE_ID。

    (即后台展示的LicenseID)

    在FaceParameterConfig.h文件里面填写拼接好的FACE_LICENSE_ID。

    image.png

    6、 选择链接C++标准库。

    image.png 7、 如果没有使用pod管理第三方库的话,请在Build Setting >Linking > Other Linker Flags 上面加入 –ObjC 选项。如果用了pod请忽略,因为pod会自动添加上。

    image.png

    2.4 权限声明

    需要使用相机权限:编辑Info.plist文件,添加

    Privacy- Camera Usage Description 的Key值,Value为使用相机时候的提示语,可以填写:『使用相机』。

    image.png

    3、接口说明

    3.1 FaceSDK 鉴权初始化

    3.1.1 设置鉴权功能

    - (void)setLicenseID:(NSString *)licenseID andLocalLicenceFile:(NSString *)licensePath andRemoteAuthorize:(BOOL)remoteAuthorize;

    参数:

    • licenseId : 平台申请的 licenseID
    • localLicencePath : 鉴权文件路径
    • remoteAuthorize:是否开启网络鉴权

    返回:

    参考AppDelegate.m 实现,使用方法如下:

        NSString* licensePath = [[NSBundle mainBundle] pathForResource:FACE_LICENSE_NAME ofType:FACE_LICENSE_SUFFIX];
        NSAssert([[NSFileManager defaultManager] fileExistsAtPath:licensePath], @"license文件路径不对,请仔细查看文档");
        [[SSFaceSDKManager sharedInstance] setLicenseID:FACE_LICENSE_ID andLocalLicenceFile:licensePath andRemoteAuthorize:true];

    3.1.2 鉴权成功的凭证

    - (BOOL)canWork

    参数:

    返回:

    • True代表成功,false代表失败

    参考ViewController.m 实现,判断鉴权是否通过:

    if (![[FaceSDKManager sharedInstance] canWork]){
       NSLog(@"授权失败,请检测ID 和 授权文件是否可用");
       return;
    }

    3.2 FaceSDK 功能初始化

    3.2.1 SSFaceSDKManager参数配置

    具体方法详见如下:

    /**
     * 获取版本号
     */
    - (NSString *)getVersion;
    
    /**
     *  重置计数器
     */
    - (void)reset;
    
    /**
     * 获取设备zid 公安验证上传
     */
    - (NSString *)getZtoken;
    
    /**
     *  SDK鉴权方法-文件授权
     *  SDK鉴权方法 必须在使用其他方法之前设置,否则会导致SDK不可用
     *
     *  @param licenseID 授权ID
     *  @param licensePath 本地鉴权文件路径
     *  @param remoteAuthorize 是否远程更新过期鉴权文件
     */
    - (void)setLicenseID:(NSString *)licenseID andLocalLicenceFile:(NSString *)licensePath andRemoteAuthorize:(BOOL)remoteAuthorize;
    
    /**
     *  SDK云端校验设置
     *  需要云端校验,需提前申请id和secret
     *
     *  @param clientId api key
     *  @param clientSecret api secret
     */
    - (void)setBCEClientId:(NSString *)clientId clientSecret:(NSString *)clientSecret;
    
    /**
     *  初始化采集功能
     */
    - (int) initCollect;
    
    /**
     *  卸载采集功能
     */
    - (int)uninitCollect;
    
    /**
     *  判断授权是否通过,true 表示通过,false 表示不通过
     */
    - (BOOL)canWork;
    
    /**
     *  设置预测库耗能模式
     *  默认 LITE_POWER_NO_BIND
     */
    - (void)setLitePower:(int)litePower;
    
    /**
     *  需要检测的最大人脸数目
     *  默认1
     */
    - (void)setMaxDetectNum:(int)detectNum ;
    
    /**
     *  需要检测的最小人脸大小
     *  默认40
     */
    - (void)setMinFaceSize:(int)width;
    
    /**
     *  人脸置信度阈值(检测分值大于该阈值认为是人脸
     *  RGB
     *  默认 0.5f
     */
    - (void)setNotFaceThreshold:(CGFloat)thr ;
    
    /**
     *  质量检测遮挡阈值
     *  默认0.5
     */
    - (void)setOccluThreshold:(CGFloat)thr ;
    
    /**
     * 质量检测遮挡阈值-左眼遮挡置信度
     * 默认0.31
     */
    -(void)setOccluLeftEyeThreshold:(CGFloat)thr ;
    
    /**
     * 质量检测遮挡阈值- 右眼遮挡置信度
     * 默认0.31
     */
    -(void)setOccluRightEyeThreshold:(CGFloat)thr ;
    
    /**
     * 质量检测遮挡阈值-鼻子遮挡置信度
     * 默认0.27
     */
    -(void)setOccluNoseThreshold:(CGFloat)thr ;
    
    /**
     * 质量检测遮挡阈值-嘴巴遮挡置信度
     * 默认0.2
     */
    -(void)setOccluMouthThreshold:(CGFloat)thr ;
    
    /**
     * 质量检测遮挡阈值-左脸遮挡置信度
     * 默认0.48
     */
    -(void)setOccluLeftCheekThreshold:(CGFloat)thr ;
    
    /**
     * 质量检测遮挡阈值-右脸遮挡置信度
     * 默认0.48
     */
    -(void)setOccluRightCheekThreshold:(CGFloat)thr ;
    
    /**
     * 质量检测遮挡阈值-下巴遮挡置信度
     * 默认0.4
     */
    -(void)setOccluChinThreshold:(CGFloat)thr ;
    
    
    /**
     * 最大光照阈值
     */
    - (void)setMaxIllumThreshold:(CGFloat)thr;
    
    /**
     * 最小光照阈值
     */
    - (void)setMinIllumThreshold:(CGFloat)thr ;
    
    /**
     *  质量检测模糊阈值
     *  默认0.5
     */
    - (void)setBlurThreshold:(CGFloat)thr ;
    
    /**
     *  姿态检测阈值
     *  默认pitch=12,yaw=12,row=10
     */
    - (void)setEulurAngleThrPitch:(float)pitch yaw:(float)yaw roll:(float)roll ;
    
    /**
     * 输出图像个数
     * 默认3
     */
    - (void)setMaxCropImageNum:(int)imageNum ;
    
    /**
     * 输出图像宽,设置为有效值(大于0)则对图像进行缩放,否则输出原图抠图结果
     * 默认 480
     */
    - (void)setCropFaceSizeWidth:(CGFloat)width ;
    
    /**
     * 输出图像高,设置为有效值(大于0)则对图像进行缩放,否则输出原图抠图结果
     * 默认 680
     */
    - (void)setCropFaceSizeHeight:(CGFloat)height ;
    
    /**
     * 输出图像,下巴扩展,大于等于0,0:不进行扩展
     * 默认0.1
     */
    - (void)setCropChinExtend:(CGFloat)chinExtend ;
    
    /**
     * 输出图像,额头扩展,大于等于0,0:不进行扩展
     * 默认0.2
     */
    - (void)setCropForeheadExtend:(CGFloat)foreheadExtend ;
    
    /**
     * 输出图像,人脸框与背景比例,大于等于1,1:不进行扩展
     * 默认1.5f
     */
    - (void)setCropEnlargeRatio:(float)cropEnlargeRatio;
    
    /**
     * 动作超时配置
     */
    - (void)setConditionTimeout:(CGFloat)timeout ;
    
    /**
     * 语音间隔提醒配置
     */
    - (void)setIntervalOfVoiceRemind:(CGFloat)timeout;
    
    /**
     * 是否开启口罩检测,非动作活体检测模型true,动作活体检测模型false
     */
    - (void)setIsCheckMouthMask:(BOOL)isCheck;
    
    /**
     * 口罩检测阈值配置,默认0.8。
     * 大于阈值判定为戴口罩,低于阈值判定为未戴口罩
     */
    - (void)setMouthMaskThreshold:(CGFloat)thr ;
    
    /**
     * 设置原始图片缩放比例,默认1不缩放,scale 阈值0~1
     */
    - (void)setImageWithScale:(CGFloat)scale;
    
    /**
     * 设置图片加密类型,type=0 基于base64 加密;type=1 基于百度安全算法加密
     */
    - (void)setImageEncrypteWithType:(int) type;
    
    /**
     *  人脸过远框比例 默认:0.4
     */
    - (void)setMinRect:(float) minRectScale;
    /**
     * 采集动作验证
     * @param image 检测的图片
     * @param isOriginal 是否返回原始图片
     * @param completion 判断采集是否完成,人脸信息状态是否正常
     */
    - (void)detectWithImage:(UIImage *)image isRreturnOriginalValue:(BOOL) isOriginal completion:(void (^)(FaceInfo *faceinfo, ResultCode resultCode))completion;
    
    /**
     * 动作活体动作验证
     * @param image 检测的图片
     * @param actionLiveType 当前要求做的动作
     * @param completion 判断当前动作是否完成,人脸信息状态是否正常
     */
    - (void)livenessWithImage:(UIImage *)image withAction:(FaceLivenessActionType)actionLiveType completion:(void (^)(FaceInfo *faceinfo, FaceLivenessState *state, ResultCode resultCode))completion;
    
    /**
     * 设置活体动作
     * @param array 包含活体动作种类
     * @param order 是否顺序执行
     * @param numberOfLiveness 活体数量
     */
    - (void)livenesswithList:(NSArray *)array order:(BOOL)order numberOfLiveness:(NSInteger)numberOfLiveness;
    
    /**
     * 活体检测过程中,返回活体总数,当前成功个数,当前活体类型
     */
    -(void)livenessProcessHandler:(LivenessProcess)processHandler;

    3.2.2 FaceSDK 初始化

    - (int)initCollect;

    参数:

    返回:

    参考ViewController.m initSDK 方法实现:

    - (void) initSDK {
         if (![[SSFaceSDKManager sharedInstance] canWork]){
            NSLog(@"授权失败,请检测ID 和 授权文件是否可用");
            return;
        }
        
        // 初始化SDK配置参数,可使用默认配置
        // 设置最小检测人脸阈值
        [[SSFaceSDKManager sharedInstance] setMinFaceSize:200];
        // 设置截取人脸图片高
        [[SSFaceSDKManager sharedInstance] setCropFaceSizeWidth:480];
        // 设置截取人脸图片宽
        [[SSFaceSDKManager sharedInstance] setCropFaceSizeHeight:640];
        // 设置人脸遮挡阀值
        [[SSFaceSDKManager sharedInstance] setOccluThreshold:0.5];
        // 设置亮度阀值
        [[SSFaceSDKManager sharedInstance] setMinIllumThreshold:40];
        [[SSFaceSDKManager sharedInstance] setMaxIllumThreshold:240];
        // 设置图像模糊阀值
        [[SSFaceSDKManager sharedInstance] setBlurThreshold:0.3];
        // 设置头部姿态角度
        [[SSFaceSDKManager sharedInstance] setEulurAngleThrPitch:10 yaw:10 roll:10];
        // 设置人脸检测精度阀值
        [[SSFaceSDKManager sharedInstance] setNotFaceThreshold:0.6];
        // 设置抠图的缩放倍数
        [[SSFaceSDKManager sharedInstance] setCropEnlargeRatio:2.5];
        // 设置照片采集张数
        [[SSFaceSDKManager sharedInstance] setMaxCropImageNum:3];
        // 设置超时时间
        [[SSFaceSDKManager sharedInstance] setConditionTimeout:15];
        // 设置开启口罩检测,非动作活体检测可以采集戴口罩图片
        [[SSFaceSDKManager sharedInstance] setIsCheckMouthMask:true];
        // 设置开启口罩检测情况下,非动作活体检测口罩过滤阈值,默认0.8 不需要修改
        [[SSFaceSDKManager sharedInstance] setMouthMaskThreshold:0.8f];
        // 设置原始图缩放比例
        [[SSFaceSDKManager sharedInstance] setImageWithScale:0.8f];
        // 初始化SDK功能函数
        [[SSFaceSDKManager sharedInstance] initCollect];
        // 设置人脸过远框比例
        [[SSFaceSDKManager sharedInstance] setMinRect:0.4];
        
        /// 设置用户设置的配置参数
        [BDFaceAdjustParamsTool setDefaultConfig];
    }

    3.2.3 FaceSDK 释放

    - (int)uninitCollect

    参数:

    返回:

    3.3 人脸采集和活体识别

    人脸采集和活体识别由SSFaceDetectionManager类实现,类结构如下:

    /**
     * 流程返回结果类型
     */
    typedef NS_ENUM(NSInteger, BDFaceCompletionStatus) {
        BDFaceCompletionStatusSuccess = 1,  // 成功
        BDFaceCompletionStatusNoRisk = 2,   // 无风险
        BDFaceCompletionStatusImagesSuccess = 3, // 图像采集成功
        
        BDFaceCompletionStatusIsRunning = -1,   // 正在采集图像
        BDFaceCompletionStatusResultFail = -2,  // 云端服务执行失败
        BDFaceCompletionStatusIsRiskDevice = -3,    // 风险设备
        BDFaceCompletionStatusCameraError = -5,    // 没有授权镜头
        BDFaceCompletionStatusTimeout = -6, // 超时
        BDFaceCompletionStatusCancel = -7, // 取消
        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;
    
    @end
    @interface SSFaceDetectionManager : NSObject
    
    // 图像返回帧处理代理
    @property (nonatomic, weak) id<SSCaptureDataOutputProtocol> delegate;
    
    // 采集流程运行状态
    @property (nonatomic, assign, readonly) BOOL runningStatus;
    
    // 风险检测超时时间,默认3秒
    @property (nonatomic, assign) NSInteger riskDetectionSetting;
    
    // AVCaptureSessionPreset类型枚举,支持低版本所以使用NSString
    @property (nonatomic, copy) NSString *sessionPresent;
    
    // 采集图像区域
    @property (nonatomic, assign) CGRect previewRect;
    
    // 探测区域
    @property (nonatomic, assign) CGRect detectRect;
    
    // 是否开启声音提醒
    @property (nonatomic, assign) BOOL enableSound;
    
    // 返回图片类型
    @property (nonatomic, assign) BDFaceOutputImageType outputImageType;
    
    
    + (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;
    
    
    /**
     * 开始当前人脸校验流程
     * @param detectionType 业务流程,采集信息用于实名认证、人脸比对
     * @param parameters 流程需要的参数
     * @param flowType 操作流程,人脸采集、人脸活体
     * @param vc 用于进行人脸信息采集的ViewController
     */
    - (void)startSessionWithType:(BDFaceResultReportType)detectionType parameters:(NSDictionary *)parameters faceFlow:(BDFaceFlowType)flowType viewController:(UIViewController *)vc;
    
    /**
     * 取消当前人脸校验流程
     */
    - (void)cancel;
    
    @end

    3.3.1 流程介绍

    整体流程如下:

    • 通过createFaceVerify/Match 两个方法,创建用于进行人脸识别和人脸比对的参数
    • 调用startSessionWithType方法启动人脸流程
    • SSCaptureDataOutputProtocol代理的方法会收到回调,来通知具体步骤和结果
    • 最终在faceSessionCompletionWithStatus回调方法中通知人脸过程成功或失败

    具体过程参数和结果中的枚举,请参考.h头文件中的注释,及Demo中的代码。

    3.3.2 参数介绍

    previewRectdetctRect是为了做距离检测而定义的,为了在上层封装判断脸是否在框内/离太远/离太近。

    • delegate:处理在镜头打开过程中的回调,包括视频图像和人脸识别的状态结果
    • previewRect: 人脸图片大小,间接定义的最大距离的 maxRect 和最小距离的 minRect。
    • detectRect:人脸检测区域大小,实际采集区域
    • riskDetectionSetting:风险检测超时时间,默认3秒,设置为0时跳过风险检测
    • sessionPresent:视频流输出格式,使用AVCaptureSessionPreset类型枚举
    • enableSound:采集过程中是否开启声音通知
    • outputImageType:返回图片类型,可以返回原图或抠图

    3.3.3 视频流展示方式

    视频流返回后有两种UI展现方式:

    (1)UIImage展示

    - (void)captureOutputSampleBuffer:(UIImage *)image;通过此方法回调的UIImage,渲染到主屏幕,实时在主线程刷新即可。

    (2)PreviewLayer展示(建议方式)

    使用[SSFaceDetectionManager sharedInstance];创建完detectionManager后,通过设置- (void)connectPreviewLayer:(AVCaptureVideoPreviewLayer*)pLayer;来进行PreviewLayer关联,后续镜头采集到的图像自动穿到到主界面的UI上展示。

    3.3.4 Demo代码片段

    参考BDFaceBaseViewController.m和BDFaceLivingConfigViewController.m实现,使用方法如下:

    // 初始化Layer
    self.videoPreview = [[UIView alloc]initWithFrame:self.view.frame];
    self.vPreviewLayer = [[AVCaptureVideoPreviewLayer alloc]init];
    self.vPreviewLayer.frame = self.view.frame;
    self.vPreviewLayer.videoGravity = AVLayerVideoGravityResizeAspect;
    
    [self.videoPreview.layer addSublayer:self.vPreviewLayer];
    [self.view addSubview:self.videoPreview];
    
    // 初始化采集类
    self.videoCapture = [SSFaceDetectionManager sharedInstance];
    self.videoCapture.previewRect = self.previewRect;
    self.videoCapture.detectRect = self.detectRect;
    self.videoCapture.delegate = self;
    self.videoCapture.riskDetectionSetting = 3;
    self.videoCapture.enableSound = NO;
    [self.videoCapture connectPreviewLayer:self.vPreviewLayer];
    
    // 创建人脸识别参数
    NSDictionary *parameters =  [self.videoCapture creatFaceVerifyParameters:@"身份证号" name:@"姓名" verifyType:KFaceIdCardTypeDefault nation:nil phoneNumber:@"电话" livenessControl:nil spoofingControl:nil qualityControl:nil];
    
    // 执行人脸识别流程
    [self.videoCapture startSessionWithType:BDFaceResultReportTypeVerifySec parameters:parameters faceFlow:BDFaceDetectionTypeLiveness viewController:self];
    
    // 流程回调处理
    - (void)faceCallbackWithCode:(BDFaceCompletionStatus)status result:(NSDictionary *)result {
        if (status == BDFaceCompletionStatusSuccess) {
           // 流程成功
        } else if(status < 0) {
          // 流程异常
        }  
    }

    image.png image.png

    说明:

    • 检测图片中的人脸信息,完成人脸图像采集和人脸活体检测,返回检测状态和结果,通过SSCaptureDataOutputProtocol进行回调。
    // 帧图像回传,用于刷新UI使用
    - (void)captureOutputSampleBuffer:(UIImage *)image;
    
    // 本次人脸流程回调
    - (void)faceSessionCompletionWithStatus:(BDFaceCompletionStatus)status result:(NSDictionary *)result;
    
    // 活体检测状态
    - (void)livenessActionDidFinishWithCode:(LivenessRemindCode)code;
    
    // 人脸识别检测
    - (void)detectionActionDidFinishWithCode:(DetectRemindCode)code;

    4、常见问题

    Q:鉴权问题。提示「验证失败」 A:先确定网络情况是否正常,本地鉴权文件失效了才走网络鉴权。定位错误码,排查鉴权失败的原因。一般是 licenseID 和 bundleID 配置不一致导致的鉴权失败。请注意上线前授权文件一定要更新。

    Q:license 文件失效了,不能用了怎么办? A:License 文件申请时候有期限,如过期会导致校验失效,需要在后台进行申请延期。

    Q:使用 iOS 采集端,采集到的图片是斜着的,这个正常吗,会影响识别吗? A:不会影响识别。有黑边和倾斜是因为图片质量算法造成的,我们是按 1:3 对图像进行背景填充使人脸居中,为的是更好的识别图像。

    更多问题请点击 [常见问题](

    上一篇
    Android
    下一篇
    离线识别SDK