IOS
1、简介
1.1 功能介绍
百度安全增强级采集 SDK iOS 版是一种面向 iOS 移动设备的人脸技术开发包,此版SDK包含人脸检测、活体识别等功能。基于该方案,开发者可以轻松的构建包含人脸检测、采集和活体识别的应用。在您使用SDK之前,我们首先为您介绍以下SDK本身及相关人脸能力,以便您能更方便使用人脸服务。
此版SDK基于在线的安全能力封装为人脸比对和实名认证两个核心流程,主要用于在客户端执行这两种流程。因为这两种流程最终需要向服务器发起请求以完成认证,因此无法在离线环境下使用。
此版SDK所包含的能力如下:
- 动作活体检测:通过让用户做出指定人脸配合式的交互动作,识别当前操作者是否为活体,此功能为离线使用,可设定指定动作是否使用及应用顺序。动作包含:眨眼、张嘴、左摇头,右摇头,向上抬头,向下低头六个。可有效抵御高清图片、3D建模、视频等攻击。
- 人脸质量检测:判断视频流中的图片帧中,哪些图片质量较佳,即人脸图像特征清晰(满足遮挡、姿态、光照、模糊度等校验)。
- 人脸图像采集:通过本地SDK能力,采集人脸图像,同时经过人脸质量检测,确保采集到的人脸图像符合各条件校验(遮挡、姿态、光照、模糊度等),为设备前端获取有效可分析人脸的主要功能。
- 授权:SDK的授权判断,授权介质也称为license,在SDK使用中,需要通过license向授权服务器发起请求,判断SDK的使用合法性及使用有效期。
- 人脸比对和实名认证流程:通过将原子操作封装为安全的流程,在流程中加入多种安全防护能力,能够抵御大多数针对人脸流程的攻击。因为不用自行维护流程,应用程序使用人脸比对和实名认证功能也变得更加简便。
为了方便您的开发,我们已经为您准备了多种场景的示例工程,您可以根据业务需要,在后台进行直接下载,目前支持【人脸核身】【人脸闸机/门禁】【人脸登录/考勤】【多人脸识别】,示例工程参考下图:
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申请
人脸控制台路径如下:
点击客户端SDK管理,弹出如下图:创建应用(这里创建应用是为了使用离线SDK,上面创建应用为了使用人脸在线接口,如注册、识别等)
在弹出的框中输入授权标识,选择应用类型,应用系统,以及包名,详情请查看输入框右边提示
2.1.2 下载SDK
下载SDK分为自动配置授权信息(创建license后就可以选择为该应用,下载后SDK自动帮您配置授权,不用下载license拷贝到工程中,初始化参数licenseID,包名也帮您配置好了)和未配置授权信息两种方式:
2.2 运行示例工程
2.2.1 自动配置授权信息集成
如果您是通过自动配置授权信息下载的示例工程,只需配置好证书即可。查看下项目中的FaceParameterConfig.h
文件,已经自动配置
配置好证书,即可运行。注意已经设置好的bundle id不要随意改动。
2.2.2 未使用自动配置授权信息的集成
手动导入授权信息。 需要手动导入license文件,配置好bundleID、licenseID等信息:
2.3 添加SDK到工程
1、 打开或者新建一个项目。
2、 右键点击项目,会出现一个添加菜单,在菜单中选择『Add Files to“此处是你的项目名字”…… 』,如下图所示:
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)
4、确认下Bundle Identifier 是否是申请license时填报的那一个,注意:license和Bundle Identifier是一一对应关系,填错了会导致SDK不能用。
5、 填写正确的FACE_LICENSE_ID。
(即后台展示的LicenseID)
在FaceParameterConfig.h文件里面填写拼接好的FACE_LICENSE_ID。
6、 选择链接C++标准库。
7、 如果没有使用pod管理第三方库的话,请在Build Setting >Linking > Other Linker Flags 上面加入 –ObjC 选项。如果用了pod请忽略,因为pod会自动添加上。
2.4 权限声明
需要使用相机权限:编辑Info.plist文件,添加
Privacy- Camera Usage Description 的Key值,Value为使用相机时候的提示语,可以填写:『使用相机』。
3、接口说明
3.1 FaceSDK 鉴权初始化
3.1.1 设置鉴权功能
1- (void)setLicenseID:(NSString *)licenseID andLocalLicenceFile:(NSString *)licensePath andRemoteAuthorize:(BOOL)remoteAuthorize;
参数:
- licenseId : 平台申请的 licenseID
- localLicencePath : 鉴权文件路径
- remoteAuthorize:是否开启网络鉴权
返回:
- 无
参考AppDelegate.m 实现,使用方法如下:
1 NSString* licensePath = [[NSBundle mainBundle] pathForResource:FACE_LICENSE_NAME ofType:FACE_LICENSE_SUFFIX];
2 NSAssert([[NSFileManager defaultManager] fileExistsAtPath:licensePath], @"license文件路径不对,请仔细查看文档");
3 [[SSFaceSDKManager sharedInstance] setLicenseID:FACE_LICENSE_ID andLocalLicenceFile:licensePath andRemoteAuthorize:true];
3.1.2 鉴权成功的凭证
1- (BOOL)canWork
参数:
- 无
返回:
- True代表成功,false代表失败
参考ViewController.m 实现,判断鉴权是否通过:
1if (![[FaceSDKManager sharedInstance] canWork]){
2 NSLog(@"授权失败,请检测ID 和 授权文件是否可用");
3 return;
4}
3.2 FaceSDK 功能初始化
3.2.1 SSFaceSDKManager参数配置
具体方法详见如下:
1/**
2 * 获取版本号
3 */
4- (NSString *)getVersion;
5
6/**
7 * 重置计数器
8 */
9- (void)reset;
10
11/**
12 * 获取设备zid 公安验证上传
13 */
14- (NSString *)getZtoken;
15
16/**
17 * SDK鉴权方法-文件授权
18 * SDK鉴权方法 必须在使用其他方法之前设置,否则会导致SDK不可用
19 *
20 * @param licenseID 授权ID
21 * @param licensePath 本地鉴权文件路径
22 * @param remoteAuthorize 是否远程更新过期鉴权文件
23 */
24- (void)setLicenseID:(NSString *)licenseID andLocalLicenceFile:(NSString *)licensePath andRemoteAuthorize:(BOOL)remoteAuthorize;
25
26/**
27 * SDK云端校验设置
28 * 需要云端校验,需提前申请id和secret
29 *
30 * @param clientId api key
31 * @param clientSecret api secret
32 */
33- (void)setBCEClientId:(NSString *)clientId clientSecret:(NSString *)clientSecret;
34
35/**
36 * 初始化采集功能
37 */
38- (int) initCollect;
39
40/**
41 * 卸载采集功能
42 */
43- (int)uninitCollect;
44
45/**
46 * 判断授权是否通过,true 表示通过,false 表示不通过
47 */
48- (BOOL)canWork;
49
50/**
51 * 设置预测库耗能模式
52 * 默认 LITE_POWER_NO_BIND
53 */
54- (void)setLitePower:(int)litePower;
55
56/**
57 * 需要检测的最大人脸数目
58 * 默认1
59 */
60- (void)setMaxDetectNum:(int)detectNum ;
61
62/**
63 * 需要检测的最小人脸大小
64 * 默认40
65 */
66- (void)setMinFaceSize:(int)width;
67
68/**
69 * 人脸置信度阈值(检测分值大于该阈值认为是人脸
70 * RGB
71 * 默认 0.5f
72 */
73- (void)setNotFaceThreshold:(CGFloat)thr ;
74
75/**
76 * 质量检测遮挡阈值
77 * 默认0.5
78 */
79- (void)setOccluThreshold:(CGFloat)thr ;
80
81/**
82 * 质量检测遮挡阈值-左眼遮挡置信度
83 * 默认0.31
84 */
85-(void)setOccluLeftEyeThreshold:(CGFloat)thr ;
86
87/**
88 * 质量检测遮挡阈值- 右眼遮挡置信度
89 * 默认0.31
90 */
91-(void)setOccluRightEyeThreshold:(CGFloat)thr ;
92
93/**
94 * 质量检测遮挡阈值-鼻子遮挡置信度
95 * 默认0.27
96 */
97-(void)setOccluNoseThreshold:(CGFloat)thr ;
98
99/**
100 * 质量检测遮挡阈值-嘴巴遮挡置信度
101 * 默认0.2
102 */
103-(void)setOccluMouthThreshold:(CGFloat)thr ;
104
105/**
106 * 质量检测遮挡阈值-左脸遮挡置信度
107 * 默认0.48
108 */
109-(void)setOccluLeftCheekThreshold:(CGFloat)thr ;
110
111/**
112 * 质量检测遮挡阈值-右脸遮挡置信度
113 * 默认0.48
114 */
115-(void)setOccluRightCheekThreshold:(CGFloat)thr ;
116
117/**
118 * 质量检测遮挡阈值-下巴遮挡置信度
119 * 默认0.4
120 */
121-(void)setOccluChinThreshold:(CGFloat)thr ;
122
123
124/**
125 * 最大光照阈值
126 */
127- (void)setMaxIllumThreshold:(CGFloat)thr;
128
129/**
130 * 最小光照阈值
131 */
132- (void)setMinIllumThreshold:(CGFloat)thr ;
133
134/**
135 * 质量检测模糊阈值
136 * 默认0.5
137 */
138- (void)setBlurThreshold:(CGFloat)thr ;
139
140/**
141 * 姿态检测阈值
142 * 默认pitch=12,yaw=12,row=10
143 */
144- (void)setEulurAngleThrPitch:(float)pitch yaw:(float)yaw roll:(float)roll ;
145
146/**
147 * 输出图像个数
148 * 默认3
149 */
150- (void)setMaxCropImageNum:(int)imageNum ;
151
152/**
153 * 输出图像宽,设置为有效值(大于0)则对图像进行缩放,否则输出原图抠图结果
154 * 默认 480
155 */
156- (void)setCropFaceSizeWidth:(CGFloat)width ;
157
158/**
159 * 输出图像高,设置为有效值(大于0)则对图像进行缩放,否则输出原图抠图结果
160 * 默认 680
161 */
162- (void)setCropFaceSizeHeight:(CGFloat)height ;
163
164/**
165 * 输出图像,下巴扩展,大于等于0,0:不进行扩展
166 * 默认0.1
167 */
168- (void)setCropChinExtend:(CGFloat)chinExtend ;
169
170/**
171 * 输出图像,额头扩展,大于等于0,0:不进行扩展
172 * 默认0.2
173 */
174- (void)setCropForeheadExtend:(CGFloat)foreheadExtend ;
175
176/**
177 * 输出图像,人脸框与背景比例,大于等于1,1:不进行扩展
178 * 默认1.5f
179 */
180- (void)setCropEnlargeRatio:(float)cropEnlargeRatio;
181
182/**
183 * 动作超时配置
184 */
185- (void)setConditionTimeout:(CGFloat)timeout ;
186
187/**
188 * 语音间隔提醒配置
189 */
190- (void)setIntervalOfVoiceRemind:(CGFloat)timeout;
191
192/**
193 * 是否开启口罩检测,非动作活体检测模型true,动作活体检测模型false
194 */
195- (void)setIsCheckMouthMask:(BOOL)isCheck;
196
197/**
198 * 口罩检测阈值配置,默认0.8。
199 * 大于阈值判定为戴口罩,低于阈值判定为未戴口罩
200 */
201- (void)setMouthMaskThreshold:(CGFloat)thr ;
202
203/**
204 * 设置原始图片缩放比例,默认1不缩放,scale 阈值0~1
205 */
206- (void)setImageWithScale:(CGFloat)scale;
207
208/**
209 * 设置图片加密类型,type=0 基于base64 加密;type=1 基于百度安全算法加密
210 */
211- (void)setImageEncrypteWithType:(int) type;
212
213/**
214 * 人脸过远框比例 默认:0.4
215 */
216- (void)setMinRect:(float) minRectScale;
217/**
218 * 采集动作验证
219 * @param image 检测的图片
220 * @param isOriginal 是否返回原始图片
221 * @param completion 判断采集是否完成,人脸信息状态是否正常
222 */
223- (void)detectWithImage:(UIImage *)image isRreturnOriginalValue:(BOOL) isOriginal completion:(void (^)(FaceInfo *faceinfo, ResultCode resultCode))completion;
224
225/**
226 * 动作活体动作验证
227 * @param image 检测的图片
228 * @param actionLiveType 当前要求做的动作
229 * @param completion 判断当前动作是否完成,人脸信息状态是否正常
230 */
231- (void)livenessWithImage:(UIImage *)image withAction:(FaceLivenessActionType)actionLiveType completion:(void (^)(FaceInfo *faceinfo, FaceLivenessState *state, ResultCode resultCode))completion;
232
233/**
234 * 设置活体动作
235 * @param array 包含活体动作种类
236 * @param order 是否顺序执行
237 * @param numberOfLiveness 活体数量
238 */
239- (void)livenesswithList:(NSArray *)array order:(BOOL)order numberOfLiveness:(NSInteger)numberOfLiveness;
240
241/**
242 * 活体检测过程中,返回活体总数,当前成功个数,当前活体类型
243 */
244-(void)livenessProcessHandler:(LivenessProcess)processHandler;
3.2.2 FaceSDK 初始化
1- (int)initCollect;
参数:
- 无
返回:
- 无
参考ViewController.m initSDK 方法实现:
1- (void) initSDK {
2 if (![[SSFaceSDKManager sharedInstance] canWork]){
3 NSLog(@"授权失败,请检测ID 和 授权文件是否可用");
4 return;
5 }
6
7 // 初始化SDK配置参数,可使用默认配置
8 // 设置最小检测人脸阈值
9 [[SSFaceSDKManager sharedInstance] setMinFaceSize:200];
10 // 设置截取人脸图片高
11 [[SSFaceSDKManager sharedInstance] setCropFaceSizeWidth:480];
12 // 设置截取人脸图片宽
13 [[SSFaceSDKManager sharedInstance] setCropFaceSizeHeight:640];
14 // 设置人脸遮挡阈值
15 [[SSFaceSDKManager sharedInstance] setOccluThreshold:0.5];
16 // 设置亮度阈值
17 [[SSFaceSDKManager sharedInstance] setMinIllumThreshold:40];
18 [[SSFaceSDKManager sharedInstance] setMaxIllumThreshold:240];
19 // 设置图像模糊阈值
20 [[SSFaceSDKManager sharedInstance] setBlurThreshold:0.3];
21 // 设置头部姿态角度
22 [[SSFaceSDKManager sharedInstance] setEulurAngleThrPitch:10 yaw:10 roll:10];
23 // 设置人脸检测精度阈值
24 [[SSFaceSDKManager sharedInstance] setNotFaceThreshold:0.6];
25 // 设置抠图的缩放倍数
26 [[SSFaceSDKManager sharedInstance] setCropEnlargeRatio:2.5];
27 // 设置照片采集张数
28 [[SSFaceSDKManager sharedInstance] setMaxCropImageNum:3];
29 // 设置超时时间
30 [[SSFaceSDKManager sharedInstance] setConditionTimeout:15];
31 // 设置开启口罩检测,非动作活体检测可以采集戴口罩图片
32 [[SSFaceSDKManager sharedInstance] setIsCheckMouthMask:true];
33 // 设置开启口罩检测情况下,非动作活体检测口罩过滤阈值,默认0.8 不需要修改
34 [[SSFaceSDKManager sharedInstance] setMouthMaskThreshold:0.8f];
35 // 设置原始图缩放比例
36 [[SSFaceSDKManager sharedInstance] setImageWithScale:0.8f];
37 // 初始化SDK功能函数
38 [[SSFaceSDKManager sharedInstance] initCollect];
39 // 设置人脸过远框比例
40 [[SSFaceSDKManager sharedInstance] setMinRect:0.4];
41
42 /// 设置用户设置的配置参数
43 [BDFaceAdjustParamsTool setDefaultConfig];
44}
3.2.3 FaceSDK 释放
1- (int)uninitCollect
参数:
- 无
返回:
- 无
3.3 人脸采集和活体识别
人脸采集和活体识别由SSFaceDetectionManager类实现,类结构如下:
1/**
2 * 流程返回结果类型
3 */
4typedef NS_ENUM(NSInteger, BDFaceCompletionStatus) {
5 BDFaceCompletionStatusSuccess = 1, // 成功
6 BDFaceCompletionStatusNoRisk = 2, // 无风险
7 BDFaceCompletionStatusImagesSuccess = 3, // 图像采集成功
8
9 BDFaceCompletionStatusIsRunning = -1, // 正在采集图像
10 BDFaceCompletionStatusResultFail = -2, // 云端服务执行失败
11 BDFaceCompletionStatusIsRiskDevice = -3, // 风险设备
12 BDFaceCompletionStatusCameraError = -5, // 没有授权镜头
13 BDFaceCompletionStatusTimeout = -6, // 超时
14 BDFaceCompletionStatusCancel = -7, // 取消
15 BDFaceCompletionStatusSDKNotInit = -13, // SDK未初始化
16 BDFaceCompletionStatusLicenseFail = -15, // 授权错误
17 BDFaceCompletionStatusNetworkError = -16, // 网络错误
18};
19
20@protocol SSCaptureDataOutputProtocol <NSObject>
21
22// 帧图像回传,用于刷新UI使用
23- (void)captureOutputSampleBuffer:(UIImage *)image;
24
25// 本次人脸流程回调
26- (void)faceSessionCompletionWithStatus:(BDFaceCompletionStatus)status result:(NSDictionary *)result;
27
28// 活体检测状态
29- (void)livenessActionDidFinishWithCode:(LivenessRemindCode)code;
30
31// 人脸识别检测
32- (void)detectionActionDidFinishWithCode:(DetectRemindCode)code;
33
34@end
35@interface SSFaceDetectionManager : NSObject
36
37// 图像返回帧处理代理
38@property (nonatomic, weak) id<SSCaptureDataOutputProtocol> delegate;
39
40// 采集流程运行状态
41@property (nonatomic, assign, readonly) BOOL runningStatus;
42
43// 风险检测超时时间,默认3秒
44@property (nonatomic, assign) NSInteger riskDetectionSetting;
45
46// AVCaptureSessionPreset类型枚举,支持低版本所以使用NSString
47@property (nonatomic, copy) NSString *sessionPresent;
48
49// 采集图像区域
50@property (nonatomic, assign) CGRect previewRect;
51
52// 探测区域
53@property (nonatomic, assign) CGRect detectRect;
54
55// 是否开启声音提醒
56@property (nonatomic, assign) BOOL enableSound;
57
58// 返回图片类型
59@property (nonatomic, assign) BDFaceOutputImageType outputImageType;
60
61
62+ (instancetype)sharedInstance;
63
64- (void)connectPreviewLayer:(AVCaptureVideoPreviewLayer*)pLayer;
65/**
66 * 创建用于实名认证的参数
67 */
68- (NSDictionary *)creatFaceVerifyParameters:(NSString *)idCardNumber
69 name:(NSString *)name
70 verifyType:(FaceIdCardType)cardType
71 nation:(NSString *)nation
72 phoneNumber:(NSString *)phoneNumber
73 livenessControl:(FaceLivenessControlType)livenessControl
74 spoofingControl:(FaceSpoofingControlType)spoofingControl
75 qualityControl:(FaceQualityControlType)qualityControl;
76
77/**
78 * 创建用于人脸比对的参数
79 */
80- (NSDictionary *)createFaceMatchParametersWithRegisterImage:(NSString *)registerImageBase64
81 registerImageType:(FaceRegisterImageType)registerImageType
82 registerFaceType:(FaceFaceType)registerFaceType
83 faceType:(FaceFaceType)faceType
84 faceSortType:(FaceSortype)faceSortType
85 phoneNumber:(NSString *)phoneNumber
86 livenessControl:(FaceLivenessControlType)livenessControl
87 qualityControl:(FaceQualityControlType)qualityControl
88 registerLivenessControl:(FaceLivenessControlType)registerLivenessControl
89 registerQualityControl:(FaceQualityControlType)registerQualityControl;
90
91
92/**
93 * 开始当前人脸校验流程
94 * @param detectionType 业务流程,采集信息用于实名认证、人脸比对
95 * @param parameters 流程需要的参数
96 * @param flowType 操作流程,人脸采集、人脸活体
97 * @param vc 用于进行人脸信息采集的ViewController
98 */
99- (void)startSessionWithType:(BDFaceResultReportType)detectionType parameters:(NSDictionary *)parameters faceFlow:(BDFaceFlowType)flowType viewController:(UIViewController *)vc;
100
101/**
102 * 取消当前人脸校验流程
103 */
104- (void)cancel;
105
106@end
3.3.1 流程介绍
整体流程如下:
- 通过createFaceVerify/Match 两个方法,创建用于进行人脸识别和人脸比对的参数
- 调用startSessionWithType方法启动人脸流程
- SSCaptureDataOutputProtocol代理的方法会收到回调,来通知具体步骤和结果
- 最终在faceSessionCompletionWithStatus回调方法中通知人脸过程成功或失败
具体过程参数和结果中的枚举,请参考.h头文件中的注释,及Demo中的代码。
3.3.2 参数介绍
previewRect
与detctRect
是为了做距离检测而定义的,为了在上层封装判断脸是否在框内/离太远/离太近。
- 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实现,使用方法如下:
1// 初始化Layer
2self.videoPreview = [[UIView alloc]initWithFrame:self.view.frame];
3self.vPreviewLayer = [[AVCaptureVideoPreviewLayer alloc]init];
4self.vPreviewLayer.frame = self.view.frame;
5self.vPreviewLayer.videoGravity = AVLayerVideoGravityResizeAspect;
6
7[self.videoPreview.layer addSublayer:self.vPreviewLayer];
8[self.view addSubview:self.videoPreview];
9
10// 初始化采集类
11self.videoCapture = [SSFaceDetectionManager sharedInstance];
12self.videoCapture.previewRect = self.previewRect;
13self.videoCapture.detectRect = self.detectRect;
14self.videoCapture.delegate = self;
15self.videoCapture.riskDetectionSetting = 3;
16self.videoCapture.enableSound = NO;
17[self.videoCapture connectPreviewLayer:self.vPreviewLayer];
18
19// 创建人脸识别参数
20NSDictionary *parameters = [self.videoCapture creatFaceVerifyParameters:@"身份证号" name:@"姓名" verifyType:KFaceIdCardTypeDefault nation:nil phoneNumber:@"电话" livenessControl:nil spoofingControl:nil qualityControl:nil];
21
22// 执行人脸识别流程
23[self.videoCapture startSessionWithType:BDFaceResultReportTypeVerifySec parameters:parameters faceFlow:BDFaceDetectionTypeLiveness viewController:self];
24
25// 流程回调处理
26- (void)faceCallbackWithCode:(BDFaceCompletionStatus)status result:(NSDictionary *)result {
27 if (status == BDFaceCompletionStatusSuccess) {
28 // 流程成功
29 } else if(status < 0) {
30 // 流程异常
31 }
32}
说明:
- 检测图片中的人脸信息,完成人脸图像采集和人脸活体检测,返回检测状态和结果,通过SSCaptureDataOutputProtocol进行回调。
1// 帧图像回传,用于刷新UI使用
2- (void)captureOutputSampleBuffer:(UIImage *)image;
3
4// 本次人脸流程回调
5- (void)faceSessionCompletionWithStatus:(BDFaceCompletionStatus)status result:(NSDictionary *)result;
6
7// 活体检测状态
8- (void)livenessActionDidFinishWithCode:(LivenessRemindCode)code;
9
10// 人脸识别检测
11- (void)detectionActionDidFinishWithCode:(DetectRemindCode)code;
4、常见问题
Q:鉴权问题。提示「验证失败」 A:先确定网络情况是否正常,本地鉴权文件失效了才走网络鉴权。定位错误码,排查鉴权失败的原因。一般是 licenseID 和 bundleID 配置不一致导致的鉴权失败。请注意上线前授权文件一定要更新。
Q:license 文件失效了,不能用了怎么办? A:License 文件申请时候有期限,如过期会导致校验失效,需要在后台进行申请延期。
Q:使用 iOS 采集端,采集到的图片是斜着的,这个正常吗,会影响识别吗? A:不会影响识别。有黑边和倾斜是因为图片质量算法造成的,我们是按 1:3 对图像进行背景填充使人脸居中,为的是更好的识别图像。
更多问题请点击 [常见问题](