[TOC]

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

名称说明
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. 人脸注册,示例代码如下:
  2. // 人脸参数
  3. // 设置sub 参数请求业务类型
  4. [self.identityVerifier setParameter:@"mfv" forKey:[IFlySpeechConstant MFV_SUB]];
  5. // 设置scenes,ifr(人脸)
  6. // 指明注册的特征种类
  7. [self.identityVerifier setParameter:@"ifr" forKey:[IFlySpeechConstant MFV_SCENES]];
  8. NSString* auth_id=self.authIdLabel.text;
  9. [self.identityVerifier setParameter:@"enroll" forKey:[IFlySpeechConstant MFV_SST]];
  10. // 设置delegate ,auth_id,开始会话
  11. [self.identityVerifier setParameter:auth_id forKey:[IFlySpeechConstant MFV_AUTH_ID]];
  12. [self.identityVerifier startWorking];
  13. // 人脸数据参数
  14. NSString* dwtParams=[NSString stringWithFormat:@"%@=%@,",[IFlySpeechConstant MFV_SST],@"enroll"];
  15. dwtParams=[dwtParams stringByAppendingFormat:@"%@=%@,",[IFlySpeechConstant MFV_AUTH_ID],auth_id];
  16. // 压缩人脸数据并写入
  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"];
  20. // 实现IFlyIdentityVerifierDelegate协议
  21. // 消息回调
  22. - (void)onEvent:(int)eventType arg1:(int)arg1 arg2:(int)arg2 extra:(id)obj;
  23. // 结果回调,results中包含有json格式结果,字段说明参考附录身份验证结果说明。
  24. - (void)onResults:(IFlyIdentityResult *)results isLast:(BOOL)isLast{}
  25. // 结束回调,没有错误时,error为nil
  26. - (void) onCompleted:(IFlySpeechError*) error{}

1.2. 人脸验证

  1. 人脸验证,示例代码如下:
  2. // 设置会话场景
  3. [self.identityVerifier setParameter:@"ifr" forKey:[IFlySpeechConstant MFV_SCENES]];
  4. // 设置会话类型
  5. [self.identityVerifier setParameter:@"verify" forKey:[IFlySpeechConstant MFV_SST]];
  6. // 用户id
  7. [self.identityVerifier setParameter:auth_id forKey:[IFlySpeechConstant MFV_AUTH_ID]];
  8. // 人脸数据参数
  9. NSString* dwtParams=[NSString stringWithFormat:@"%@=%@,",[IFlySpeechConstant MFV_AUTH_ID],auth_id];
  10. dwtParams=[dwtParams stringByAppendingFormat:@"%@=%@,",[IFlySpeechConstant MFV_SST],@"verify"];
  11. // 压缩人脸数据并写入
  12. [self.identityVerifier startWorking];
  13. NSData* data=[self.face compressedData];
  14. [self.identityVerifier write:@"ifr" data:data offset:0 length:(int)[data length] withParams:dwtParams];
  15. [self.identityVerifier stopWrite:@"ifr"];
  16. // 实现IFlyIdentityVerifierDelegate协议
  17. // 消息回调
  18. - (void)onEvent:(int)eventType arg1:(int)arg1 arg2:(int)arg2 extra:(id)obj;
  19. // 结果回调,results中包含有json格式结果,字段说明参考附录身份验证结果说明。
  20. - (void)onResults:(IFlyIdentityResult *)results isLast:(BOOL)isLast{}
  21. // 结束回调,没有错误时,error为nil
  22. - (void) onCompleted:(IFlySpeechError*) error{}

1.3. 人脸删除

  1. 人脸验证,示例代码如下:
  2. // 设置会话场景
  3. [self.identityVerifier setParameter:@"ifr" forKey:[IFlySpeechConstant MFV_SCENES]];
  4. // 用户id
  5. [self.identityVerifier setParameter:auth_id forKey:[IFlySpeechConstant MFV_AUTH_ID]];
  6. // 人脸数据参数
  7. NSString* dwtParams=[NSString stringWithFormat:@"%@=%@,",[IFlySpeechConstant MFV_AUTH_ID],auth_id];
  8. // 删除人脸数据
  9. [self.identityVerifier execute:@"ifr" cmd:@"delete" params:dwtParams];
  10. // 实现IFlyIdentityVerifierDelegate协议
  11. // 消息回调
  12. - (void)onEvent:(int)eventType arg1:(int)arg1 arg2:(int)arg2 extra:(id)obj;
  13. // 结果回调,results中包含有json格式结果,字段说明参考附录身份验证结果说明。
  14. - (void)onResults:(IFlyIdentityResult *)results isLast:(BOOL)isLast{}
  15. // 结束回调,没有错误时,error为nil
  16. - (void) onCompleted:(IFlySpeechError*) error{}

1.4. 安全性问题

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