[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) 中身份驗證結果說明。