人脸识别可以检测出照片中的人脸。相关概念的说明如下:
名称 | 说明 |
---|---|
enroll/注册 | 上传包含一张人脸的图片到云端,引擎对其进行特征抽取,生成一个与之对应的模型,返回模型id(gid)。 |
verify/验证 | 注册成功后,上传包含一张人脸的图片到云端,引擎将其与所注册的人脸模型进行比对,验证是否为同一个人,返回验证结果。 |
delete/删除 | 删除注册的人脸模型 |
auth_id/用户id | 由应用传入,用于标识用户身份,长度为6-18个字符(由英文字母、数字、下划线组成,不能以数字开头),注:注册和验证都必须指定auth_id. |
为了获得较高的准确率,请确保输入的图片满足以下要求:
项目 | 要求 |
---|---|
色彩、格式 | 彩色,PNG、JPG、BMP格式的图片。 |
人脸大小 、角度 | 大小应超过100*100像素,可以允许一定程度的侧脸,为保证识别准确率,最好使用正脸图片。 |
光照 | 均匀光照,可允许部分阴影。 |
遮挡物 | 脸部尽量无遮挡,眼镜等物品会一定程度上影响准确率。 |
在人脸识别过程的主要参数有:
人脸识别会话类型(MFV_SST):λ 会话类型,包括注册(enroll),验证(verify),删除(delete)
用户ID(AUTH_ID):标识每个使用人脸功能的终端用户的唯一ID
业务场景(MFV_SCENES):业务类型,人脸业务为ifr
1.1. 人脸注册
人脸注册,示例代码如下:
// 人脸参数
// 设置sub 参数请求业务类型
[self.identityVerifier setParameter:@"mfv" forKey:[IFlySpeechConstant MFV_SUB]];
// 设置scenes,ifr(人脸)
// 指明注册的特征种类
[self.identityVerifier setParameter:@"ifr" forKey:[IFlySpeechConstant MFV_SCENES]];
NSString* auth_id=self.authIdLabel.text;
[self.identityVerifier setParameter:@"enroll" forKey:[IFlySpeechConstant MFV_SST]];
// 设置delegate ,auth_id,开始会话
[self.identityVerifier setParameter:auth_id forKey:[IFlySpeechConstant MFV_AUTH_ID]];
[self.identityVerifier startWorking];
// 人脸数据参数
NSString* dwtParams=[NSString stringWithFormat:@"%@=%@,",[IFlySpeechConstant MFV_SST],@"enroll"];
dwtParams=[dwtParams stringByAppendingFormat:@"%@=%@,",[IFlySpeechConstant MFV_AUTH_ID],auth_id];
// 压缩人脸数据并写入
NSData* data=[self.face compressedData];
[self.identityVerifier write:@"ifr" data:data offset:0 length:(int)[data length] withParams:dwtParams];
[self.identityVerifier stopWrite:@"ifr"];
// 实现IFlyIdentityVerifierDelegate协议
// 消息回调
- (void)onEvent:(int)eventType arg1:(int)arg1 arg2:(int)arg2 extra:(id)obj;
// 结果回调,results中包含有json格式结果,字段说明参考附录身份验证结果说明。
- (void)onResults:(IFlyIdentityResult *)results isLast:(BOOL)isLast{}
// 结束回调,没有错误时,error为nil
- (void) onCompleted:(IFlySpeechError*) error{}
1.2. 人脸验证
人脸验证,示例代码如下:
// 设置会话场景
[self.identityVerifier setParameter:@"ifr" forKey:[IFlySpeechConstant MFV_SCENES]];
// 设置会话类型
[self.identityVerifier setParameter:@"verify" forKey:[IFlySpeechConstant MFV_SST]];
// 用户id
[self.identityVerifier setParameter:auth_id forKey:[IFlySpeechConstant MFV_AUTH_ID]];
// 人脸数据参数
NSString* dwtParams=[NSString stringWithFormat:@"%@=%@,",[IFlySpeechConstant MFV_AUTH_ID],auth_id];
dwtParams=[dwtParams stringByAppendingFormat:@"%@=%@,",[IFlySpeechConstant MFV_SST],@"verify"];
// 压缩人脸数据并写入
[self.identityVerifier startWorking];
NSData* data=[self.face compressedData];
[self.identityVerifier write:@"ifr" data:data offset:0 length:(int)[data length] withParams:dwtParams];
[self.identityVerifier stopWrite:@"ifr"];
// 实现IFlyIdentityVerifierDelegate协议
// 消息回调
- (void)onEvent:(int)eventType arg1:(int)arg1 arg2:(int)arg2 extra:(id)obj;
// 结果回调,results中包含有json格式结果,字段说明参考附录身份验证结果说明。
- (void)onResults:(IFlyIdentityResult *)results isLast:(BOOL)isLast{}
// 结束回调,没有错误时,error为nil
- (void) onCompleted:(IFlySpeechError*) error{}
1.3. 人脸删除
人脸验证,示例代码如下:
// 设置会话场景
[self.identityVerifier setParameter:@"ifr" forKey:[IFlySpeechConstant MFV_SCENES]];
// 用户id
[self.identityVerifier setParameter:auth_id forKey:[IFlySpeechConstant MFV_AUTH_ID]];
// 人脸数据参数
NSString* dwtParams=[NSString stringWithFormat:@"%@=%@,",[IFlySpeechConstant MFV_AUTH_ID],auth_id];
// 删除人脸数据
[self.identityVerifier execute:@"ifr" cmd:@"delete" params:dwtParams];
// 实现IFlyIdentityVerifierDelegate协议
// 消息回调
- (void)onEvent:(int)eventType arg1:(int)arg1 arg2:(int)arg2 extra:(id)obj;
// 结果回调,results中包含有json格式结果,字段说明参考附录身份验证结果说明。
- (void)onResults:(IFlyIdentityResult *)results isLast:(BOOL)isLast{}
// 结束回调,没有错误时,error为nil
- (void) onCompleted:(IFlySpeechError*) error{}
1.4. 安全性问题
在人脸识别中,最重要的问题,可能是图片的可复制重复使用的问题。根据前文可知道, MSC SDK 在人脸识别时,并不是直接使用摄像头等硬件,只要应用传入二进制的图片数据即可。这时,在验证时,即使用一张他人照片,MSC SDK 也是无法分辨的;同时,应用即使是使用摄像头来拍摄实时照片,也有可能被用户使用照片来欺骗。所以,在这样的情况下,人为的管理则显得尤其重要:如要求用户验证时,有管理员在场保证其不使用他人照片(在公司打卡、门禁的场景)等。