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