[TOC]
多生物特征融合验证(Multi-biometrics Fusion Verification,简称MFV)平台是科大讯飞推出的新一代个人身份验证平台。功能上支持**1:1单一验证,1:1 融合验证,1:N鉴别**。生物特征上支持**人脸、声纹**,并将在未来支持指纹、虹膜等其他特征信息。
## 基本介绍
MFV目前提供的功能组合如下表所示:
| |1:1单一验证 |1:1融合验证|1:N鉴别|
| --- | --- | --- | --- |
|人脸 | 人脸验证 |人脸声纹融合验证|人脸鉴别|
|声纹 |声纹验证 |人脸声纹融合验证|声纹鉴别|
MFV相关的概念如下表所示:
| 概念| 英文标识| 说明|
|:---:|:---:|---|
| 用户id| auth_id| 用户身份的唯一标识。|
|组id| group_id| 组的唯一标识。<br>组被用来限定1:N鉴别的用户范围。|
|特征注册| enroll| 上传用户特征数据,在云端生成特征模型。<br>其中,人脸图像数据的大小应控制在200K以下。|
|特征验证| verify| 上传用户特征数据,云端将其与已注册的特征模型<br>进行比对,返回结果(相似度、是否通过验证等)。|
|融合验证| mixed verify| 上传用户多项特征数据,云端将其与已注册的多项<br>特征模型进行比对,返回结果(综合相似度、是否通过验证等)。|
|特征鉴别| identify| 上传用户特征数据,并指定鉴别组id,云端将上传<br>数据与组内用户对应的已注册的特征模型进行比对,<br>返回结果(相似度排行、用户名称)。|
|业务场景| scenes| 会话的场景。<br>包括:人脸(ifr),声纹(ivp),<br>人脸声纹融合(ifr \| ivp),组管理(ipt)。|
|业务类型| sst| 会话的业务类型。<br>在不同的会话场景(scenes)下有不同的业务类型。|
|子业务类型| ssub| 子业务类型。<br>包括:人脸(ifr),声纹(ivp),组管理(ipt)。|
MFV业务场景与业务类型组合:
| 场景类型 | 人脸(ifr) | 声纹(ivp) | 人脸声纹融合<br>(ifr \| ivp) | 组管理(ipt) |
|:---:|:---:|:---:|:---:|:---:|
|注册|√|√|-|-|
|验证|√|√|√|-|
|鉴别|√|√|-|-|
子业务操作组合:
| |人脸(ifr)|声纹(ivp)|组管理(ipt)|
|:---:|:---:|:---:|:---:|
|创建|-|-|√|
|加入|-|-|√|
|查询|-|√|√|
|删除|√|√|√|
|密码下载|-|√|-|
## 功能使用
**1:1验证:**
> 1. 首次使用需先进行特征注册。
>2. 开始验证。设定各项参数,接着开启会话,上传待验证的生物特征数据,最后获取验证结果并解析。
**1:N鉴别:**
> 1. 首次使用需先进行特征注册。
>2. 创建组。
>3. 将相关的用户id加入到组中。
>4. 开始鉴别。指定鉴别组id及各项参数,接着开启会话,上传待鉴别的生物特征数据,最后获取鉴别结果并解析。
### 特征注册
**人脸注册流程:**
> 1. 设置参数:业务场景“人脸(ifr)”,业务类型“注册(enroll)”,用户id(auth_id)。
>2. 设置监听,开启会话。
>3. 指定子业务类型“人脸(ifr)”、人脸数据内容及数据长度,然后上传数据。
>4. 待会话监听器返回结果,此次注册操作结束。
**人脸注册示例代码:**
~~~
// 取消上次会话、清空参数
[self.identityVerifier cancel];
[self.identityVerifier setParameter:nil forKey:[IFlySpeechConstant PARAMS]];
// 人脸参数
// 设置sub 参数请求业务类型
[self.identityVerifier setParameter:@"mfv" forKey:[IFlySpeechConstant MFV_SUB]];
// 设置scenes,
// 有“ifr(人脸)”,“ivp(声纹)”,“ifr|ivp(人脸和声纹)”三种取值,
// 指明注册的特征种类
[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"];
// 回调接口定义如下, 使用方法参考demo源码;
// 错误回调
- (void)onError:(IFlySpeechError *)error{}
// 结果回调,results中包含有json格式结果,字段说明参考附录身份验证结果说明。
- (void)onResults:(IFlyIdentityResult *)results isLast:(BOOL)isLast{}
// 扩展接口,用于抛出音量和vad_eos消息
- (void)onEvent:(int)eventType arg1:(int)arg1 arg2:(int)arg2 extra:(id)obj{}
~~~
**声纹注册:**
> 1. 从云端下载声纹注册所用的数字密码文本。
>2. 设置参数:业务场景“声纹(ivp)”,业务类型“注册(enroll)”,用户id(auth_id)。
>3. 设置监听,开启会话。
>4. 指定子业务类型“声纹(ifr)”,设定声纹注册相关参数“训练次数(rgn)、密码内容(ptxt)、密码类型(pwdt)”,并指定声纹数据内容及长度,然后上传数据。
>5. 待会话监听器返回结果,此次注册操作结束。
**声纹注册示例代码:**
~~~
// 下载声纹密码
// 取消上次会话、清空参数
[self.identityVerifier cancel];
[self.identityVerifier setParameter:nil forKey:[IFlySpeechConstant
PARAMS]];
// 设置scenes 为“ivp(声纹)”
[self.identityVerifier setParameter:@"ivp" forKey:[IFlySpeechConstant MFV_SCENES]];
// 设置密码参数
NSString* params=[NSString stringWithFormat:@"%@=%d,%@=%d,",[IFlySpeechConstant MFV_PWDT],3,[IFlySpeechConstant MFV_RGN],TOTAL_TIMES];
// 执行获取密码操作
[self.identityVerifier execute:@"ivp" cmd:@"download" params:params];
// 声纹注册
// 取消上次会话、清空参数
[self.identityVerifier cancel];
[self.identityVerifier setParameter:nil forKey:[IFlySpeechConstant PARAMS]];
// 设置sub 参数请求业务类型,可选值:
// mfv(默认,融合验证),ivp(声纹),ifr(人脸)
[self.identityVerifier setParameter:@"mfv" forKey:[IFlySpeechConstant MFV_SUB]];
// 设置scenes,
// 有“ifr(人脸)”,“ivp(声纹)”,“ifr|ivp(人脸和声纹)”三种取值,
// 指明注册的特征种类
[self.identityVerifier setParameter:@"ivp" forKey:[IFlySpeechConstant MFV_SCENES]];
// 设置delegate ,auth_id,开始会话
self.identityVerifier.delegate=self;
[self.identityVerifier setParameter:auth_id forKey:[IFlySpeechConstant MFV_AUTH_ID]];
[self.identityVerifier startWorking];
// 准备声纹注册相关参数,如训练次数、密码内容和密码类型等
// 注意:注册时使用的源码需要先从语音云下载再使用,详情参见demo源码;
NSString* dwtParams=nil;
dwtParams=[NSString stringWithFormat:@"%@=%@,",[IFlySpeechConstant MFV_SST],@"enroll"];
dwtParams=[dwtParams stringByAppendingFormat:@"%@=%@,",[IFlySpeechConstant MFV_RGN],@"5"];
NSString* dlPtxt=[numberPasswords componentsJoinedByString:@"-"];
dwtParams=[dwtParams stringByAppendingFormat:@"%@=%@,",[IFlySpeechConstant MFV_PTXT],dlPtxt];
dwtParams=[dwtParams stringByAppendingFormat:@"%@=%@,",[IFlySpeechConstant MFV_PWDT],@"3"];
// 开启VAD 功能 设置VAD_BOS(前端点) VAD_EOS(后端点) 设置采样率
dwtParams=[dwtParams stringByAppendingFormat:@"%@=%@,",[IFlySpeechConstant VAD_ENABLE],@"1"];
dwtParams=[dwtParams stringByAppendingFormat:@"%@=%@,",[IFlySpeechConstant VAD_BOS],@"10000"];
dwtParams=[dwtParams stringByAppendingFormat:@"%@=%@,",[IFlySpeechConstant VAD_EOS],@"2000"];
dwtParams=[dwtParams stringByAppendingFormat:@"%@=%@,",[IFlySpeechConstant MFV_DATA_FORMAT],@"16000"];
// 写入音频数据,data为音频数据
// 需要开发者自行从外部录音机IFlyPcmRecorder获取,获取方法详
// 见demo源码。
// writeData可以连续多次调用,调用的时候要指定子业务类型、子业务参数、写入
// 数据及长度
NSData *audioBuffer = [NSData dataWithBytes:buffer length:size];
[self.identityVerifier write:@"ivp" data:audioBuffer offset:0 length:(int)[audioBuffer length] withParams:dwtParams];
// 写入完成后,需要调用stopWrite停止写入,在停止的时候同样需要指定子业务类型。
// 只有stopWrite之后,才会触发delegate的回调接口,返回结果或者错误。
[self.identityVerifier stopWrite:@"ivp"];
// 回调接口定义如下, 使用方法参考demo源码;
// 错误回调
- (void)onError:(IFlySpeechError *)error{}
// 结果回调,results中包含有json格式结果,字段说明参考附录身份验证结果说明。
- (void)onResults:(IFlyIdentityResult *)results isLast:(BOOL)isLast{}
// 扩展接口,用于抛出音量和vad_eos消息
- (void)onEvent:(int)eventType arg1:(int)arg1 arg2:(int)arg2 extra:(id)obj{}
~~~
### 特征验证
根据场景不同,特征验证又分为**人脸验证、声纹验证以及人脸声纹融合验证**。验证的过程和注册的过程很相似,以下是**融合验证**的示例代码。
~~~
// 取消上次会话、清空参数
[self.identityVerifier cancel];
[self.identityVerifier setParameter:nil forKey:[IFlySpeechConstant PARAMS]];
// 设置sst为verify
[self.identityVerifier setParameter:@"verify" forKey:[IFlySpeechConstant MFV_SST]];
// 设置scenes,有“ifr(人脸)”,“ivp(声纹)”,“ifr|ivp(人脸和声纹)”三种取值,指明验证的// 特征种类,这里设置为“人脸+声纹”融合验证
[self.identityVerifier setParameter:@"ivp|ifr" forKey:[IFlySpeechConstant MFV_SCENES]];
[self.identityVerifier setParameter:@"mix" forKey:[IFlySpeechConstant MFV_VCM]];
// 设置delegate 、auth_id,开始会话
self.identityVerifier.delegate=self;
[self.identityVerifier setParameter:auth_id forKey:[IFlySpeechConstant MFV_AUTH_ID]];
[self.identityVerifier startWorking];
// 准备人脸参数
NSString* dwtParams=[NSString stringWithFormat:@"%@=%@,",[IFlySpeechConstant MFV_AUTH_ID],auth_id];
dwtParams=[dwtParams stringByAppendingFormat:@"%@=%@,",[IFlySpeechConstant MFV_SST],@"verify"];
// 写入人脸照片数据,imageData为bitmap格式
NSData* data= UIImageJPEGRepresentation(self.face, 1.0);
[self.identityVerifier write:@"ifr" data:data offset:0 length:(int)[data length] withParams:dwtParams];
[self.identityVerifier stopWrite:@"ifr"];
// 准备声纹验证相关参数,如密码内容和密码类型等
NSString* dwtParams=nil;
dwtParams=[NSString stringWithFormat:@"%@=%@,",[IFlySpeechConstant MFV_SST],@"verify"];
NSString* ptxt=self.numberLabel.text;
dwtParams=[dwtParams stringByAppendingFormat:@"%@=%@,",[IFlySpeechConstant MFV_PTXT],ptxt];
dwtParams=[dwtParams stringByAppendingFormat:@"%@=%@,",[IFlySpeechConstant MFV_PWDT],@"3"];
dwtParams=[dwtParams stringByAppendingFormat:@"%@=%@,",[IFlySpeechConstant VAD_ENABLE],@"1"];
dwtParams=[dwtParams stringByAppendingFormat:@"%@=%@,",[IFlySpeechConstant VAD_BOS],@"10000"];
dwtParams=[dwtParams stringByAppendingFormat:@"%@=%@,",[IFlySpeechConstant VAD_EOS],@"2000"];
dwtParams=[dwtParams stringByAppendingFormat:@"%@=%@,",[IFlySpeechConstant MFV_DATA_FORMAT],@"16000"];
// 写入音频数据,data为音频数据,需要开发者自行从外部录音机PcmRecorder获取,
// 获取方法详见demo源码。writeData可以连续多次调用。
// 调用的时候要指定子业务类型、子业务参数、写入数据及长度
NSData *audioBuffer = [NSData dataWithBytes:buffer length:size];
[self.identityVerifier write:@"ivp" data:audioBuffer offset:0 length:(int)[audioBuffer length] withParams:dwtParams];
// 音频数据写入完成
[self.identityVerifier stopWrite:@"ivp"];
// 回调接口定义如下, 使用方法参考demo源码;
// 错误回调
- (void)onError:(IFlySpeechError *)error{}
// 结果回调,results中包含有json格式结果,字段说明参考附录身份验证结果说明。
- (void)onResults:(IFlyIdentityResult *)results isLast:(BOOL)isLast{}
// 扩展接口,用于抛出音量和vad_eos消息
- (void)onEvent:(int)eventType arg1:(int)arg1 arg2:(int)arg2 extra:(id)obj{}
~~~
### 特征鉴别
根据场景不同,特征鉴别分为**人脸鉴别和声纹鉴别**。两种鉴别流程相同,以**人脸鉴别**为例。
~~~
// 取消上次会话、清空参数
[self.identityVerifier cancel];
[self.identityVerifier setParameter:nil forKey:[IFlySpeechConstant PARAMS]];
// 设置业务场景
[self.identityVerifier setParameter:@"ifr" forKey:[IFlySpeechConstant MFV_SCENES]];
// 设置业务类型
[self.identityVerifier setParameter:@"identify" forKey:[IFlySpeechConstant MFV_SST]];
// 设置写入数据参数
NSString* dwtParams=[NSString stringWithFormat:@"%@=%@,group_id=%@,topc=3",[IFlySpeechConstant MFV_SST],@"identify",self.groupID];
// 开始会话
[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"];
// 回调接口定义如下, 使用方法参考demo源码;
// 错误回调
- (void)onError:(IFlySpeechError *)error{}
// 结果回调,results中包含有json格式结果,字段说明参考附录身份验证结果说明。
- (void)onResults:(IFlyIdentityResult *)results isLast:(BOOL)isLast{}
// 扩展接口,用于抛出音量和vad_eos消息
- (void)onEvent:(int)eventType arg1:(int)arg1 arg2:(int)arg2 extra:(id)obj{}
~~~
### 模型操作
声纹模型目前支持的操作有**查询(query)、删除(delete)、密码下载(download)**三种。人脸模型目前支持**删除(delete)**操作。
声纹密码下载(download),已经在声纹模型注册的过程中展示,此处不再赘述。
以**声纹模型查询**为例:
~~~
// 取消上次会话、清空参数
[self.identityVerifier cancel];
[self.identityVerifier setParameter:nil forKey:[IFlySpeechConstant PARAMS]];
// 设置场景为声纹
[self.identityVerifier setParameter:@"ivp" forKey:[IFlySpeechConstant MFV_SCENES]];
// 准备声纹验证相关参数,即密码内容和密码类型
[self.identityVerifier setParameter:[NSString stringWithFormat:@"%d",TOTAL_TIMES] forKey:[IFlySpeechConstant MFV_RGN]];
NSString* params=[NSString stringWithFormat:@"%@=%d,",[IFlySpeechConstant MFV_PWDT],3];
[self.identityVerifier setParameter:auth_id forKey:[IFlySpeechConstant MFV_AUTH_ID]];
// 调用execute方法执行操作。第一个参数为子业务类型,取值为“ivp”、“ifr”,// 第二个参数为操作类型,支持“query”(查询)、“delete”(删除)和
//“download”(密码下载)三种。
// 声纹密码下载也是通过调用execute方法,具体实现见IFlyMFVDemo源码。
[self.identityVerifier execute:@"ivp" cmd:@"query" params:params];
// 回调接口定义如下, 使用方法参考demo源码;
// 错误回调
- (void)onError:(IFlySpeechError *)error{}
// 结果回调,results中包含有json格式结果,字段说明参考附录身份验证结果说明。
- (void)onResults:(IFlyIdentityResult *)results isLast:(BOOL)isLast{}
// 扩展接口,用于抛出音量和vad_eos消息
- (void)onEvent:(int)eventType arg1:(int)arg1 arg2:(int)arg2 extra:(id)obj{}
~~~
### 组管理
组管理目前支持的操作有:**创建组、删除组、查询组用户、用户加入组以及用户退出组**。
**创建组**示例代码:
~~~
// 取消上次会话、清空参数
[self.identityVerifier cancel];
[self.identityVerifier setParameter:nil forKey:[IFlySpeechConstant PARAMS]];
// 设置会话场景
[self.identityVerifier setParameter:@"ipt" forKey:[IFlySpeechConstant MFV_SCENES]];
// 用户id
NSString* authId=self.authIdLabel.text;
[self.identityVerifier setParameter:authId forKey:[IFlySpeechConstant MFV_AUTH_ID]];
// 设置模型参数,若无可以传空字符串
NSString* params =[NSString stringWithFormat:@"auth_id=%@,scope=group,group_name=%@",authId,self.groupNameText.text];
// 执行模型操作
[self.identityVerifier execute:@"ipt" cmd:@"add" params:params];
// 回调接口定义如下, 使用方法参考demo源码;
// 错误回调
- (void)onError:(IFlySpeechError *)error;
// 结果回调,results中包含有json格式结果,字段说明参考附录身份验证结果说明。
- (void)onResults:(IFlyIdentityResult *)results isLast:(BOOL)isLast{}
// 扩展接口,用于抛出音量和vad_eos消息
- (void)onEvent:(int)eventType arg1:(int)arg1 arg2:(int)arg2 extra:(id)obj{}
~~~
**删除组**示例代码:
~~~
// 取消上次会话、清空参数
[self.identityVerifier cancel];
[self.identityVerifier setParameter:nil forKey:[IFlySpeechConstant PARAMS]];
// 设置会话场景
[self.identityVerifier setParameter:@"ipt" forKey:[IFlySpeechConstant MFV_SCENES]];
// 用户id
NSString* authId=self.authIdLabel.text;
[self.identityVerifier setParameter:authId forKey:[IFlySpeechConstant MFV_AUTH_ID]];
// 设置模型参数,若无可以传空字符传
NSString* params =[NSString stringWithFormat:@"scope=group,group_id=%@",self.groupIdText.text];
// 执行模型操作
[self.identityVerifier execute:@"ipt" cmd:@"delete" params:params];
// 回调接口定义如下, 使用方法参考demo源码;
// 错误回调
- (void)onError:(IFlySpeechError *)error{}
// 结果回调,results中包含有json格式结果,字段说明参考附录身份验证结果说明。
- (void)onResults:(IFlyIdentityResult *)results isLast:(BOOL)isLast{}
// 扩展接口,用于抛出音量和vad_eos消息
- (void)onEvent:(int)eventType arg1:(int)arg1 arg2:(int)arg2 extra:(id)obj{}
~~~
**查询组用户**示例代码:
~~~
// 取消上次会话、清空参数
[self.identityVerifier cancel];
[self.identityVerifier setParameter:nil forKey:[IFlySpeechConstant PARAMS]];
// 设置会话场景
[self.identityVerifier setParameter:@"ipt" forKey:[IFlySpeechConstant MFV_SCENES]];
// 用户id
NSString* authId=self.authIdLabel.text;
[self.identityVerifier setParameter:authId forKey:[IFlySpeechConstant MFV_AUTH_ID]];
// 设置模型参数,若无可以传空字符传
NSString* params =[NSString stringWithFormat:@"auth_id=%@,scope=group,group_id=%@",authId,self.groupIdText.text];
// 执行模型操作
[self.identityVerifier execute:@"ipt" cmd:@"query" params:params];
// 回调接口定义如下, 使用方法参考demo源码;
// 错误回调
- (void)onError:(IFlySpeechError *)error{}
// 结果回调,results中包含有json格式结果,字段说明参考附录身份验证结果说明。
- (void)onResults:(IFlyIdentityResult *)results isLast:(BOOL)isLast{}
// 扩展接口,用于抛出音量和vad_eos消息
- (void)onEvent:(int)eventType arg1:(int)arg1 arg2:(int)arg2 extra:(id)obj{}
~~~
**用户加入组**示例代码:
~~~
// 取消上次会话、清空参数
[self.identityVerifier cancel];
[self.identityVerifier setParameter:nil forKey:[IFlySpeechConstant PARAMS]];
// 设置会话场景
[self.identityVerifier setParameter:@"ipt" forKey:[IFlySpeechConstant MFV_SCENES]];
// 用户id
NSString* authId=self.authIdLabel.text;
[self.identityVerifier setParameter:authId forKey:[IFlySpeechConstant MFV_AUTH_ID]];
// 设置模型参数,若无可以传空字符传
NSString* params =[NSString stringWithFormat:@"auth_id=%@,scope=person,group_id=%@",authId,self.groupIdText.text];
// 执行模型操作
[self.identityVerifier execute:@"ipt" cmd:@"add" params:params];
// 回调接口定义如下, 使用方法参考demo源码;
// 错误回调
- (void)onError:(IFlySpeechError *)error;
// 结果回调,results中包含有json格式结果,字段说明参考附录身份验证结果说明。
- (void)onResults:(IFlyIdentityResult *)results isLast:(BOOL)isLast;
// 扩展接口,用于抛出音量和vad_eos消息
- (void)onEvent:(int)eventType arg1:(int)arg1 arg2:(int)arg2 extra:(id)obj;
~~~
**用户退出组**示例代码:
~~~
// 取消上次会话、清空参数
[self.identityVerifier cancel];
[self.identityVerifier setParameter:nil forKey:[IFlySpeechConstant PARAMS]];
// 设置会话场景
[self.identityVerifier setParameter:@"ipt" forKey:[IFlySpeechConstant MFV_SCENES]];
// 用户id
NSString* authId=self.authIdLabel.text;
[self.identityVerifier setParameter:authId forKey:[IFlySpeechConstant MFV_AUTH_ID]];
// 设置模型参数,若无可以传空字符传
NSString* params =[NSString stringWithFormat:@"auth_id=%@,scope=person,group_id=%@",authId,self.groupIdText.text];
// 执行模型操作
[self.identityVerifier execute:@"ipt" cmd:@"delete" params:params];
// 回调接口定义如下, 使用方法参考demo源码;
// 错误回调
- (void)onError:(IFlySpeechError *)error[]
// 结果回调,results中包含有json格式结果,字段说明参考附录身份验证结果说明。
- (void)onResults:(IFlyIdentityResult *)results isLast:(BOOL)isLast{}
// 扩展接口,用于抛出音量和vad_eos消息
- (void)onEvent:(int)eventType arg1:(int)arg1 arg2:(int)arg2 extra:(id)obj{}
~~~
## 参数设置
多生物特征融合验证平台的参数分为两种,分别为MFV主参数和子业务参数。
MFV主参数通过IFlyIdentityVerifier 的- (BOOL)setParameter:(NSString *)value forKey:(NSString *)key方法进行设置,参数如下表所示:
|名称 |说明| 取值范围| 默认值|
|:---:|---|---|---|
|auth_id| 用户id,用户身份的唯一标识| 自拟,长度6-18位,仅包括英文、数字| 无|
|group_id| 通过组管理功能创建的鉴别组的唯一标识| 长度20以内的字符串,由组管理功能创建得到,或由他人告知| 无,在鉴别场景下必须指定|
|scenes| 会话场景| ifr(人脸),ivp(声纹),ifr \| ivp(人脸+声纹),组管理(ipt)| 无,必须指定|
|sst| 会话的业务类型| enroll(注册),verify(验证),identify(鉴别)| 无,必须指定|
|vcm| 验证模式,仅在验证场景下使用| sin(单一特征),mix(融合),agi(灵活)| 无,在验证场景下必须指定|
|afc| 灵活验证保留结果时间| 0-43200s| 无,只在vcm设置成agi时生效|
|prot_type| 联网协议| ssl| 非ssl协议|
|sslcert| 证书内容| 证书内容| 赛门铁克安全证书(仅在prot_type=ssl时生效)|
**注意:**
> 1. scenes和vcm必须组合使用:例如指定vcm为sin 则scenes只可以选择ifr 或者 ivp单独业务,vcm选择mix则scenes只可以选择ifr|ivp。另:agi(灵活)模式可以设置sences=ifr|ivp,在当次会话只发送一种业务数据,服务端保留验证结果,如在设置的时间间隔内再传入另外的业务数据即可做到混合验证。
> 2. prot_type、sslcert参数也可在IFlySpeechUtility. createUtility时传入,之后每次会话都会生效。
> 3. 支持服务端回调通知业务。当用户进行了注册、验证操作后,讯飞服务端发送结果消息给开发者的业务服务器,如需此服务请联系:msp_support@iflytek.com
**子业务参数**以String格式的键-值对在调用IflyIdentityVerifier的-(void)write:(NSString*)ssub data:(NSData*)data offset:(int)offset length:(int)length withParams:(NSString*)params;写入子业务特征数据或者调用-(void)execute:(NSString*)ssub cmd:(NSString*)cmd params:(NSString*)params;执行模型操作时传入,对应于params参数。详见IFlyMFVDemo。
ivp(声纹)子业务参数:
|名称| 说明| 取值| 默认值|
|:---:|---|---|---|
|rgn| 注册次数。| 2-9| 5(建议使用默认值,效果最好) |
|ptxt |密码文本,指定声纹密码注册时使用的声纹密码内容。| 由服务端下发,比如数字密码所需的数字串。 |无,必须指定|
|pwdt| 密码类型,指定声纹密码注册时使用的声纹密码类型。| 3(数字密码)<br>注:其他类型暂不支持。| 无,必须指定|
ipt(组管理)子业务参数:
|名称| 说明| 取值| 默认值|
|:---:|:---:|:---:|:---:|
|auth_id| 用户id| | 设备id,必须指定|
|scope |操作对象| group(组)<br>person(成员)| 无,必须指定|
|group_name| 创建的组名称| | 无,必须指定|
|group_id| 加入的组id| | 无,必须指定|
结果格式说明详见 [附录](附录.md) 中身份验证结果说明。