人脸识别可以检测出照片中的人脸。相关概念的说明如下:

名称 说明
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. 人脸注册

1. 人脸注册,示例代码如下:

3. // 人脸参数
4. // 设置sub 参数请求业务类型
5. [self.identityVerifier setParameter:@"mfv" forKey:[IFlySpeechConstant MFV_SUB]];

7. // 设置scenes,ifr(人脸)
8. // 指明注册的特征种类
9. [self.identityVerifier setParameter:@"ifr" forKey:[IFlySpeechConstant MFV_SCENES]];
10. NSString* auth_id=self.authIdLabel.text;
11. [self.identityVerifier setParameter:@"enroll" forKey:[IFlySpeechConstant MFV_SST]];

13. // 设置delegate ,auth_id,开始会话
14. [self.identityVerifier setParameter:auth_id forKey:[IFlySpeechConstant MFV_AUTH_ID]];
15. [self.identityVerifier startWorking];

17. // 人脸数据参数
18. NSString* dwtParams=[NSString stringWithFormat:@"%@=%@,",[IFlySpeechConstant MFV_SST],@"enroll"];
19. dwtParams=[dwtParams stringByAppendingFormat:@"%@=%@,",[IFlySpeechConstant MFV_AUTH_ID],auth_id];

21. // 压缩人脸数据并写入
22. NSData* data=[self.face compressedData];
23. [self.identityVerifier write:@"ifr" data:data offset:0 length:(int)[data length] withParams:dwtParams];
24. [self.identityVerifier stopWrite:@"ifr"];

26. // 实现IFlyIdentityVerifierDelegate协议
27. // 消息回调
28. - (void)onEvent:(int)eventType arg1:(int)arg1 arg2:(int)arg2 extra:(id)obj;

30. // 结果回调,results中包含有json格式结果,字段说明参考附录身份验证结果说明。
31. - (void)onResults:(IFlyIdentityResult *)results isLast:(BOOL)isLast{}

33. // 结束回调,没有错误时,error为nil
34. - (void) onCompleted:(IFlySpeechError*) error{}

1.2. 人脸验证

1. 人脸验证,示例代码如下:

3. // 设置会话场景
4. [self.identityVerifier setParameter:@"ifr" forKey:[IFlySpeechConstant MFV_SCENES]];

6. // 设置会话类型
7. [self.identityVerifier setParameter:@"verify" forKey:[IFlySpeechConstant MFV_SST]];

9. // 用户id
10. [self.identityVerifier setParameter:auth_id forKey:[IFlySpeechConstant MFV_AUTH_ID]];
11. // 人脸数据参数
12. NSString* dwtParams=[NSString stringWithFormat:@"%@=%@,",[IFlySpeechConstant MFV_AUTH_ID],auth_id];
13. dwtParams=[dwtParams stringByAppendingFormat:@"%@=%@,",[IFlySpeechConstant MFV_SST],@"verify"];

15. // 压缩人脸数据并写入
16. [self.identityVerifier startWorking];
17. NSData* data=[self.face compressedData];
18. [self.identityVerifier write:@"ifr" data:data offset:0 length:(int)[data length] withParams:dwtParams];
19. [self.identityVerifier stopWrite:@"ifr"];

21. // 实现IFlyIdentityVerifierDelegate协议

23. // 消息回调
24. - (void)onEvent:(int)eventType arg1:(int)arg1 arg2:(int)arg2 extra:(id)obj;

26. // 结果回调,results中包含有json格式结果,字段说明参考附录身份验证结果说明。
27. - (void)onResults:(IFlyIdentityResult *)results isLast:(BOOL)isLast{}

29. // 结束回调,没有错误时,error为nil
30. - (void) onCompleted:(IFlySpeechError*) error{}

1.3. 人脸删除

1. 人脸验证,示例代码如下:

3. // 设置会话场景
4. [self.identityVerifier setParameter:@"ifr" forKey:[IFlySpeechConstant MFV_SCENES]];

6. // 用户id
7. [self.identityVerifier setParameter:auth_id forKey:[IFlySpeechConstant MFV_AUTH_ID]];

9. // 人脸数据参数
10. NSString* dwtParams=[NSString stringWithFormat:@"%@=%@,",[IFlySpeechConstant MFV_AUTH_ID],auth_id];

12. // 删除人脸数据
13. [self.identityVerifier execute:@"ifr" cmd:@"delete" params:dwtParams];

15. // 实现IFlyIdentityVerifierDelegate协议
16. // 消息回调
17. - (void)onEvent:(int)eventType arg1:(int)arg1 arg2:(int)arg2 extra:(id)obj;

19. // 结果回调,results中包含有json格式结果,字段说明参考附录身份验证结果说明。
20. - (void)onResults:(IFlyIdentityResult *)results isLast:(BOOL)isLast{}

22. // 结束回调,没有错误时,error为nil
23. - (void) onCompleted:(IFlySpeechError*) error{}

1.4. 安全性问题

在人脸识别中,最重要的问题,可能是图片的可复制重复使用的问题。根据前文可知道, MSC SDK 在人脸识别时,并不是直接使用摄像头等硬件,只要应用传入二进制的图片数据即可。这时,在验证时,即使用一张他人照片,MSC SDK 也是无法分辨的;同时,应用即使是使用摄像头来拍摄实时照片,也有可能被用户使用照片来欺骗。所以,在这样的情况下,人为的管理则显得尤其重要:如要求用户验证时,有管理员在场保证其不使用他人照片(在公司打卡、门禁的场景)等。