科大訊飛語音識別


科大訊飛語音識別

       隨着當今社會的高速發展,我們所使用的產品也向着遍歷和智能的方面發展着,當然了手機端的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導入頭文件

[objc]  view plain  copy
 
 在CODE上查看代碼片派生到我的代碼片
  1. #import <iflyMSC/iflyMSC.h>  


3.2登陸訊飛服務器

在使用訊飛的語音解析之前,需要進行用戶身份驗證,即登陸訊飛服務器,這個在viewDidLoad()方法中添加兩行代碼即可.即訊飛服務器需要根據你當前用戶的APPID才能同意你登陸。代碼如下:

[objc]  view plain  copy
 
 在CODE上查看代碼片派生到我的代碼片
  1. //2.登陸訊飛服務器  
  2. NSString *appID = [NSString stringWithFormat:@"appid=%@",@"570f0a8b"];  
  3. [IFlySpeechUtility createUtility:appID];  

3.3創建有界面提示語音識別對象

創建一個訊飛語音識別對象,可以對他進行一系列的調用
 
[objc]  view plain  copy
 
 在CODE上查看代碼片派生到我的代碼片
  1. ///帶界面的識別對象  
  2. @property (nonatomic,strong)IFlyRecognizerView *iflyRecognizerView;  
 

3.4初始化帶界面的識別對象

[objc]  view plain  copy
 
 在CODE上查看代碼片派生到我的代碼片
  1. _iflyRecognizerView = [[IFlyRecognizerView alloc] initWithCenter:self.view.center];  
  2. _iflyRecognizerView.delegate = self;  
  3. [_iflyRecognizerView setParameter:@"iat" forKey:[IFlySpeechConstant IFLY_DOMAIN]];  
  4. //asr_audio_path保存錄音文件名,如不再需要,設置value為nil表示取消,默認目錄是documents  
  5. [_iflyRecognizerView setParameter:@"asrview.pcm " forKey:[IFlySpeechConstant ASR_AUDIO_PATH]];  

3.5實現代理方法

訊飛對識別結果的處理采用的代理回調的方法,實現IFlySpeechSynthesizerDelegate協議的onResult:isLast:方法.
注意!!!!這里的是onResult,不是onResults,后者是無界面提示的語音解析的結果回調函數.
 
回調時默認傳回來的數據是json數據,咱們大可不必疑惑解析到底使用哪種方式,科大訊飛已經為我們考慮到這些問題了,他官方提供了一個叫做“ISRDataHelper”用它解析就可以了。代碼如下:
 
[objc]  view plain  copy
 
 在CODE上查看代碼片派生到我的代碼片
  1. - (void)onResult:(NSArray *)resultArray isLast:(BOOL)isLast{  
  2.       
  3.     NSMutableString *result = [[NSMutableString alloc] init];  
  4.     NSDictionary *dic = [resultArray objectAtIndex:0];  
  5.     for (NSString *key in dic) {  
  6.         [result appendFormat:@"%@",key];  
  7.     }  
  8.       
  9.     NSString * resu = [ISRDataHelper stringFromJson:result];  
  10.   
  11.       
  12.     //結果要顯示在Lable上  
  13.     _showTextLable.text = [NSString stringWithFormat:@"%@%@",_showTextLable.text,resu];  
  14. }  

3.6觸發開始識別語音

拖動一個Button,給一個響應事件,用於開始監聽語音識別;代碼如下:
 
[objc]  view plain  copy
 
 在CODE上查看代碼片派生到我的代碼片
  1. - (IBAction)voiceRecognize:(id)sender {  
  2.       
  3.     //開始識別語音  
  4.     [_iflyRecognizerView start];  
  5.       
  6. }  

這時候運行app就可以進行語音識別了,界面如下圖:
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM