[TOC]
聲紋識別,主要是提供基于用戶聲紋特征的注冊、驗證服務。訊飛開放平臺支持2種類型的聲紋密碼類型,即文本密碼和數字密碼,在注冊時需要指定聲紋類型。
~~~
//創建聲紋對象
isvRec=[IFlyISVRecognizer sharedInstance];
isvRec.delegate=self;
//設置聲紋工作參數
//設置密碼類型,pwdt的取值為1、3,分別表示文本密碼和數字密碼
[isvRec setParameter:[NSString stringWithFormat:@"%d",pwdt] forKey:@"pwdt"];
~~~
pwdt的取值說明如下表所示:
|值 |說明 |
| :---: | --- |
| 1 | 文本密碼。用戶通過讀出指定的文本內容來進行聲紋注冊和驗證,現階段支持的文本只有“芝麻開門”一種。 |
| 3 | 數字密碼。從云端拉取一組特定的數字串(共分5組,每組8位數字),用戶依次讀出這5組數字進行注冊,在驗證過程中會生成一串特定的數字,用戶通過朗讀這串數字進行驗證。 |
密碼內容需調用接口從云端獲取:
~~~
//通過調用getPasswordList方法來獲取密碼。
//獲取密碼的時候需指定聲紋密碼類型,pwdt為1表示固定文本密碼,pwdt為3表示數字密碼。
//getPasswordList可以參照demo所示。
NSArray *tmpArray=[isvRec getPasswordList:ivppwdt];
~~~
獲取到密碼后,接下來進行聲紋注冊,即要求用戶朗讀若干次指定的內容,這一過程也稱為聲紋模型的訓練。
~~~
// 設置業務類型為訓練
[isvRec setParameter:@"train" forKey:@"sst"];
// 設置密碼類型
[isvRec setParameter:[NSString stringWithFormat:@"%d",pwdt] forKey:@"pwdt"];
// 對于文本密碼和數字密碼,必須設置密碼的文本內容.
// ptxt的取值為“我的地盤我做主”、“移動改變生活”、“芝麻開門”或者是從云端拉取的數字密碼(每8位用“-”隔開)。
[isvRec setParameter:ptxt forKey:@"ptxt"];
// 設置聲紋對應的auth_id,它用于標識聲紋對應的用戶
[isvRec setParameter:auth_id forKey:@"auth_id"];
// 設置有效錄音時間
[isvRec setParameter:@"3000" forKey:@"vad_timeout"];
// 末端靜音檢測時間,用于檢測到靜音自動停止錄音
[isvRec setParameter:@"700" forKey:@"vad_speech_tail"];
// 啟動訓練服務
// 開始注冊,當得到注冊結果時,SDK會將其封裝成NSDictionary對象,回調onResult方法進行處理,處理方法詳見Demo示例
[isvRec startListening];
// 聲紋協議IFlyISVDelegate實現
//會話結果返回回調
-(void) onResult:(NSDictionary *)dic;
//會話結束回調
-(void) onError:(IFlySpeechError *) errorCode;
//結果處理中回調
-(void) onRecognition;
//錄音音量改變回調
-(void) onVolumeChanged: (int)volume;
~~~
推薦在注冊聲紋模型時每個用戶都指定一個唯一的auth_id。auth_id的格式為:6-18個字符,為字母、數字和下劃線的組合且必須以字母開頭,不支持中文字符,不能包含空格。
開發者通過重寫onResult方法來處理注冊和驗證結果。在結果result中攜帶錯誤碼,用來判別注冊是否成功以及出錯原因,部分錯誤碼的含義如下表所示:
| 錯誤碼 |說明 |
| :---: | --- |
| 10106 | 缺少某個必要參數 |
| 10107 | 某個必要參數存在但無效 |
| 10110 | 引擎授權不足或者說授權客戶端用戶數達到上限 |
| 10114 | 操作超時 |
|10116 | 數據庫中模型不存在 |
| 10212 |數據庫中模型已經存在 |
| 10400 | 數據庫中一般性錯誤,此時此ssb已經登錄超過3次且均失敗 |
| 10407 |APPID非法 |
|10606 |音頻太短 |
## 聲紋驗證
聲紋驗證過程與聲紋注冊類似,不同之處僅在于“sst”參數需要設置為“verify”,其他參數的設置、驗證結果的處理過程可參考上一節。
另外,為了達到較好的效果,請在聲紋注冊與驗證過程中盡量與麥克風保持同樣的距離(建議的最佳距離是15厘米左右)。若距離較遠,可能會對驗證通過率產生較大影響。
## 聲紋模型操作
聲紋注冊成功后,在云端會生成一個對應的模型來存儲聲紋信息,聲紋模型的操作即對模型進行查詢和刪除。
~~~
//開發者調用sendRequest方法查詢或者刪除模型,該函數的定義如下:
//cmd: @”query”表示查詢,@”del”表示刪除
//auth_id表示用戶名;
//pwdt表示聲紋類型;
//ptxt表示查詢或者刪除的密碼文本;
//vid是用戶注冊成功后服務器返回的32位標識,查詢和刪除時,vid可以設置位nil;
//err是查詢的錯誤碼。 通常查詢或者刪除成功,該函數會返回YES,否則返回NO;
-(BOOL) sendRequest:(NSString*)cmd authid:(NSString *)auth_id pwdt:(int)pwdt ptxt:(NSString *)ptxt vid:(NSString *)vid err:(int *)err;
~~~
## 聲紋業務返回結果格式和參數說明
請參見 [附錄](附錄.md) 聲紋業務