日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

讯飞语音识别

發布時間:2025/5/22 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 讯飞语音识别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

使用訊飛開放平臺實現語音識別合成

社會和產品的發展總是向著便利和智能的方法發展,對于手機的App來說也是如此.所以,現在的App都在縮減流程,優化使用體驗,為的就是讓用戶用起來更加便利,提高App的入手度和用戶粘性.那么另一方面的智能呢?

一個比較簡單智能的實現方法就是在輸入的地方加上語音識別,在輸出顯示的時候加上語音合成,直接進行語音播報,那么是不是對于司機等來說就是一個智能的體現呢?

現在做語音識別有一些不錯的開放平臺可以給我們直接提供使用,一家是科大訊飛開放平臺,一家是百度語音開放平臺.我個人比較喜歡訊飛,因為訊飛的優 勢是在大段文字的識別上,準確率比較高.這正好符合我的需求,這篇博客也主要講的是訊飛語音SDK的使用.

訊飛開發步驟


訊飛開發教程上寫的比較清楚也比較啰嗦,并不是一個最簡潔的Demo.所以我在這篇博客里進行了一些適當的刪減,爭取做一個最簡單的demo.

1 申請賬號ID

登陸到訊飛開放平臺上,在用戶菜單欄里就有創建我的應用.這里的登陸也可以采用第三方的方式.在創建應用的界面填寫相關的信息即可.然后就會有一個SDK下載的鏈接.如果沒有,直接去SDK下載中心按照三步選項去進行新的下載即可.這里不做過多的描述.

2 導入訊飛SDK框架

下載下來的SDK包解壓出來有三個文件夾,第一個市doc文件夾,不多說,肯定是開發文檔,還有 相關的作者信息什么的.最重要的是剩下的兩個文件夾,一個是lib文件夾,這里存放的是訊飛SDK的類庫文件,我們導入SDK就是導入的這里的文件.第三 個文件夾是一個IOS的Demo演示工程.
1 添加靜態庫
新建一個IOS工程,將lib文件夾下的”iflyMSC.framework”文件拷貝到工程目錄下,然后在工程配置文件的[Build Phases]-[Link Binary With Libraries]中通過[AddOther]
2 確認SDK路徑
在配置文件中搜索”head”找到[Framework Search Paths],點開查看SDK的路徑是不是絕對路徑,如果是如下圖的樣子,那就沒問題了.這一步主要是確保SDK的路徑為相對路徑,防止工程換了文件夾位置就無法運行的情況的發生.

3 添加框架
按照下圖依次將圖中的所有的框架添加到工程里面.訊飛官網API中給出的截圖是XCode7以前的,XCode7之后一些動態鏈接庫的后綴名發生了改變,Xcode7中添加完畢之后如下圖:

?

語音識別


語音識別分兩種,分別用在不同的場合,一個是界面提示的語音識別,一個是無界面提示的語音識別,這里以有界面提示的語音識別為例子.

有界面提示的語音識別

1 導入頭文件

//將訊飛SDK中的所有類都導入進來 #import < iflyMSC/iflyMSC.h >

2 登陸訊飛服務器
在使用訊飛的語音解析之前,需要進行用戶身份驗證,即登陸訊飛服務器,這個在viewDidLoad()方法中添加兩行代碼即可.后面的ID數字就是之前我們在開放平臺創建按自己應用時給的APPID,在下載的SDK中也是有的.

NSString *initString = [[NSString alloc] initWithFormat:@"appid=%@",@"565e4dd9"]; [IFlySpeechUtility createUtility:initString];

?

3 創建有界面提示的語音識別對象
創建一個訊飛語音識別對象,可以對他進行一系列的調用

@property (nonatomic, strong) IFlyRecognizerView *iflyRecognizerView;//帶界面的識別對象

?

4 初始化帶界面的識別對象
前面聲明了一個帶界面的語音識別對象,現在需要對這個識別對象進行初始化,同樣是在ViewDidLoad()方法中進行就行.

#pragma mark ------ 進行有界面的語音識別的初始化 _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]];

?

5 實現代理方法
訊飛對識別結果的處理采用的代理回調的方法,實現IFlySpeechSynthesizerDelegate協議的onResult:isLast:方法.
注意!!!!這里的是onResult,不是onResults,后者是無界面提示的語音解析的結果回調函數.

- (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];} //這里需要在下載的demo里面拖入ISRDataHelper.h和ISRDataHelper.m文件然背后引入頭文件NSString * resu = [ISRDataHelper stringFromJson:result];//將結果顯示在界面的Label上_text.text = [NSString stringWithFormat:@"%@%@",_text.text,resu]; }

這里默認的傳回來的是Json字符串,需要對字符串進行解析.當然,訊飛還是比較良心的,在demo中給提供了一個解析類,就是上面用到的ISRDataHelper.用它來進行解析就可以了. 6 觸發開始語音識別 拖動一個Button,給一個響應事件,用于開始監聽語音識別

//啟動識別服務 [_iflyRecognizerView start];

?

這個時候運行App,就可以進行語音識別了,運行的結果應該如下圖:

無界面提示的語音識別


無界面提示的語音識別適合將語音識別放在后臺,這個看具體的使用場景.無界面的方式相對來說簡潔大方,可制定性高.
1 導入頭文件

//將訊飛SDK中的所有類都導入進來 #import < iflyMSC/iflyMSC.h >

?

2 登陸訊飛服務器
在使用訊飛的語音解析之前,需要進行用戶身份驗證,即登陸訊飛服務器,這個在viewDidLoad()方法中添加兩行代碼即可.后面的ID數字就是之前我們在開放平臺創建按自己應用時給的APPID,在下載的SDK中也是有的.

NSString *initString = [[NSString alloc] initWithFormat:@"appid=%@",@"565e4dd9"]; [IFlySpeechUtility createUtility:initString];

?

3 創建無界面提示的語音識別對象
創建一個訊飛語音識別對象,可以對他進行一系列的調用

@property (nonatomic, strong) IFlySpeechRecognizer *iFlySpeechRecognizer;//不帶界面的識別對象

?

4 對象初始化
前面聲明了一些在語音合成的時候會用到的對象,現在需要對前面的對象進行初始化.還是在ViewDidLoad()里面進行就可以了.這里的初始化內容比較多,是進行一些語音的設置,所以單獨做成了一個方法,在ViewDidLoad()中進行調用即可.

-(void)initRecognizer{ //單例模式,無UI的實例 if (_iFlySpeechRecognizer == nil) {_iFlySpeechRecognizer = [IFlySpeechRecognizer sharedInstance]; [_iFlySpeechRecognizer setParameter:@"" forKey:[IFlySpeechConstant PARAMS]];//設置聽寫模式[_iFlySpeechRecognizer setParameter:@"iat" forKey:[IFlySpeechConstant IFLY_DOMAIN]]; } _iFlySpeechRecognizer.delegate = self; if (_iFlySpeechRecognizer != nil) {IATConfig *instance = [IATConfig sharedInstance]; //設置最長錄音時間 [_iFlySpeechRecognizer setParameter:instance.speechTimeout forKey:[IFlySpeechConstant SPEECH_TIMEOUT]];//設置后端點 [_iFlySpeechRecognizer setParameter:instance.vadEos forKey:[IFlySpeechConstant VAD_EOS]];//設置前端點 [_iFlySpeechRecognizer setParameter:instance.vadBos forKey:[IFlySpeechConstant VAD_BOS]];//網絡等待時間[_iFlySpeechRecognizer setParameter:@"20000" forKey:[IFlySpeechConstant NET_TIMEOUT]]; //設置采樣率,推薦使用16K [_iFlySpeechRecognizer setParameter:instance.sampleRate forKey:[IFlySpeechConstant SAMPLE_RATE]]; if ([instance.language isEqualToString:[IATConfig chinese]]) {//設置語言 [_iFlySpeechRecognizer setParameter:instance.language forKey:[IFlySpeechConstant LANGUAGE]];//設置方言 [_iFlySpeechRecognizer setParameter:instance.accent forKey:[IFlySpeechConstant ACCENT]];}else if ([instance.language isEqualToString:[IATConfig english]]) {[_iFlySpeechRecognizer setParameter:instance.language forKey:[IFlySpeechConstant LANGUAGE]];}//設置是否返回標點符號 [_iFlySpeechRecognizer setParameter:instance.dot forKey:[IFlySpeechConstant ASR_PTT]]; } }

?

5 實現代理方法
訊飛對識別結果的處理采用的代理回調的方法,實現IFlySpeechSynthesizerDelegate協議的onResult:isLast:方法.
注意!!!!這里的是onResults,不是onResult,前者是有界面提示的語音識別的結果回調函數.

- (void) onResults:(NSArray *) results isLast:(BOOL)isLast{NSMutableString *result = [[NSMutableString alloc] init];NSDictionary *dic = [results objectAtIndex:0];for (NSString *key in dic) {[result appendFormat:@"%@",key];}NSString * resu = [ISRDataHelper stringFromJson:result];_text.text = [NSString stringWithFormat:@"%@%@",_text.text,resu]; }

?

6 觸發語音合成
添加一個輸入框,一個button,button的響應時間是將輸入框中的文本內容讀出來.

if(_iFlySpeechRecognizer == nil) {[self initRecognizer]; } [_iFlySpeechRecognizer cancel]; //設置音頻來源為麥克風 [_iFlySpeechRecognizer setParameter:IFLY_AUDIO_SOURCE_MIC forKey:@"audio_source"]; //設置聽寫結果格式為json [_iFlySpeechRecognizer setParameter:@"json" forKey:[IFlySpeechConstant RESULT_TYPE]]; //保存錄音文件,保存在sdk工作路徑中,如未設置工作路徑,則默認保存在library/cache下 [_iFlySpeechRecognizer setParameter:@"asr.pcm" forKey:[IFlySpeechConstant ASR_AUDIO_PATH]]; [_iFlySpeechRecognizer setDelegate:self]; BOOL ret = [_iFlySpeechRecognizer startListening];

?

語音合成


語音合成和語音識別的過程差不多
1 導入頭文件

//將訊飛SDK中的所有類都導入進來 #import < iflyMSC/iflyMSC.h > #import "PcmPlayer.h" #import "TTSConfig.h"

?

2 登陸訊飛服務器
在使用訊飛的語音解析之前,需要進行用戶身份驗證,即登陸訊飛服務器,這個在viewDidLoad()方法中添加兩行代碼即可.后面的ID數字就是之前我們在開放平臺創建按自己應用時給的APPID,在下載的SDK中也是有的.

NSString *initString = [[NSString alloc] initWithFormat:@"appid=%@",@"565e4dd9"]; [IFlySpeechUtility createUtility:initString];

?

3 創建有界面提示的語音識別對象
創建一個訊飛語音識別對象,可以對他進行一系列的調用

typedef NS_OPTIONS(NSInteger, SynthesizeType) {NomalType = 5,//普通合成UriType = 6, //uri合成 }; @property (nonatomic, strong) IFlySpeechSynthesizer * iFlySpeechSynthesizer;//語音合成對象 @property (nonatomic, strong) PcmPlayer *audioPlayer;//用于播放音頻的 @property (nonatomic, assign) SynthesizeType synType;//是何種合成方式 @property (nonatomic, assign) BOOL hasError;//解析過程中是否出現錯誤

?

4 對象初始化
前面聲明了一些在語音合成的時候會用到的對象,現在需要對前面的對象進行初始化.還是在ViewDidLoad()里面進行就可以了.

TTSConfig *instance = [TTSConfig sharedInstance]; if (instance == nil) {return; } //合成服務單例 if (_iFlySpeechSynthesizer == nil) {_iFlySpeechSynthesizer = [IFlySpeechSynthesizer sharedInstance]; } _iFlySpeechSynthesizer.delegate = self; //設置語速1-100 [_iFlySpeechSynthesizer setParameter:instance.speed forKey:[IFlySpeechConstant SPEED]]; //設置音量1-100 [_iFlySpeechSynthesizer setParameter:instance.volume forKey:[IFlySpeechConstant VOLUME]]; //設置音調1-100 [_iFlySpeechSynthesizer setParameter:instance.pitch forKey:[IFlySpeechConstant PITCH]]; //設置采樣率 [_iFlySpeechSynthesizer setParameter:instance.sampleRate forKey:[IFlySpeechConstant SAMPLE_RATE]]; //設置發音人[_iFlySpeechSynthesizer setParameter:instance.vcnName forKey:[IFlySpeechConstant VOICE_NAME]];

?

5 觸發語音合成
添加一個輸入框,一個button,button的響應時間是將輸入框中的文本內容讀出來.

if ([self.VoiceText.text isEqualToString:@""]) {return; } if (_audioPlayer != nil && _audioPlayer.isPlaying == YES) {[_audioPlayer stop];} _synType = NomalType; self.hasError = NO; [NSThread sleepForTimeInterval:0.05]; _iFlySpeechSynthesizer.delegate = self; [_iFlySpeechSynthesizer startSpeaking:self.VoiceText.text];

?

轉載于:https://www.cnblogs.com/guzhen/p/5128793.html

總結

以上是生活随笔為你收集整理的讯飞语音识别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。