科大訊飛語音識別
隨着當今社會的高速發展,我們所使用的產品也向着遍歷和智能的方面發展着,當然了手機端的App也不例外。現在的App都在縮減用戶操作的流程,優化用戶的體驗,為了更加便利用戶,提高用戶的DAU(日活),增加用戶的粘性一般我們都會想出比較新穎的招式。
如果現在有這樣一個需求:用戶需要綁定銀行卡輸入銀行卡號,手動輸入增加用戶的操作度,所以用戶可以通過語音讀取銀行卡號,是不是既方便又智能。現在做語音識別的有一些不錯的開放平台供我們使用,一家是科大訊飛平台,一家是百度語音平台。我個人比較偏愛科大訊飛,因為科大訊飛的優勢在於大段大段的文字識別上,准確率較高。這正好能符合我輸入銀行卡號准確無誤的需求。這篇博客也主要講的是訊飛語音SDK的使用。下面我們來詳細看一下科大訊飛。
1.科大訊飛開放平台
2.科大訊飛iOS - API開放平台
那下面我們來看一下科大訊飛的開發步驟吧
第一步:申請賬號ID
登陸到訊飛開放平台上,在用戶菜單欄里創建應用,這里的登陸也可以采用第三方的方式,在創建應用的界面填寫相關的信息即可,然后就會有一個SDK的下載鏈接,如果沒有直接去SDK選項下下載即可。
第二步:導入訊飛SDK框架
下載下來SDK解壓后有三個文件夾:doc文件夾:不用多說肯定是開發文檔;重要的是接下來的那兩個文件夾:一個是lib文件夾:存放科大訊飛SDK類庫,這就是我們要導入的SDK;Sample:iOS的科大訊飛demo演示工程。
下面我們來創建一個工程,將lib文件夾下的“iflyMSC.framework”拷貝到工程目錄,然后在工程中添加依賴庫,如下圖所示:
第三步:開始進行語音識別了
語音識別分兩種,分別用在不同場合,一個是界面提示的語音識別,一個是無界面提示的語音識別,這里以有界面提示的語音識別為例先進性講解。
3.1導入頭文件
- #import <iflyMSC/iflyMSC.h>
3.2登陸訊飛服務器
在使用訊飛的語音解析之前,需要進行用戶身份驗證,即登陸訊飛服務器,這個在viewDidLoad()方法中添加兩行代碼即可.即訊飛服務器需要根據你當前用戶的APPID才能同意你登陸。代碼如下:
- //2.登陸訊飛服務器
- NSString *appID = [NSString stringWithFormat:@"appid=%@",@"570f0a8b"];
- [IFlySpeechUtility createUtility:appID];
3.3創建有界面提示語音識別對象
創建一個訊飛語音識別對象,可以對他進行一系列的調用
- ///帶界面的識別對象
- @property (nonatomic,strong)IFlyRecognizerView *iflyRecognizerView;
3.4初始化帶界面的識別對象
- _iflyRecognizerView = [[IFlyRecognizerView alloc] initWithCenter:self.view.center];
- _iflyRecognizerView.delegate = self;
- [_iflyRecognizerView setParameter:@"iat" forKey:[IFlySpeechConstant IFLY_DOMAIN]];
- //asr_audio_path保存錄音文件名,如不再需要,設置value為nil表示取消,默認目錄是documents
- [_iflyRecognizerView setParameter:@"asrview.pcm " forKey:[IFlySpeechConstant ASR_AUDIO_PATH]];
3.5實現代理方法
訊飛對識別結果的處理采用的代理回調的方法,實現IFlySpeechSynthesizerDelegate協議的onResult:isLast:方法.
注意!!!!這里的是onResult,不是onResults,后者是無界面提示的語音解析的結果回調函數.
注意!!!!這里的是onResult,不是onResults,后者是無界面提示的語音解析的結果回調函數.
回調時默認傳回來的數據是json數據,咱們大可不必疑惑解析到底使用哪種方式,科大訊飛已經為我們考慮到這些問題了,他官方提供了一個叫做“ISRDataHelper”用它解析就可以了。代碼如下:
- - (void)onResult:(NSArray *)resultArray isLast:(BOOL)isLast{
- NSMutableString *result = [[NSMutableString alloc] init];
- NSDictionary *dic = [resultArray objectAtIndex:0];
- for (NSString *key in dic) {
- [result appendFormat:@"%@",key];
- }
- NSString * resu = [ISRDataHelper stringFromJson:result];
- //結果要顯示在Lable上
- _showTextLable.text = [NSString stringWithFormat:@"%@%@",_showTextLable.text,resu];
- }
