語音轉(zhuǎn)文字

iOS中實(shí)現(xiàn)語音轉(zhuǎn)文字尤慰,除了一些第三方闯袒,常見的有科大訊飛語音推掸、百度語音屯换。

訊飛 - 收費(fèi)的,穩(wěn)定性和準(zhǔn)確率較高挽牢,個(gè)性化詞庫

百度語音 -?免費(fèi)的谱煤,個(gè)性化詞庫,語義解析

個(gè)性化詞庫 - 如果你說的語句中的詞語包含在個(gè)性化詞庫中卓研,那么會(huì)優(yōu)先識(shí)別個(gè)性化詞庫的詞

語義解析 - 就是你設(shè)置好問答趴俘,然后你問上一句睹簇,他會(huì)自動(dòng)答出下一句奏赘。

一、何通過蘋果API來實(shí)現(xiàn)語音轉(zhuǎn)文字

特點(diǎn)是:百度語音支持離線并免費(fèi)太惠。訊飛的也支持離線磨淌,識(shí)別率很高也很精準(zhǔn),但是是收費(fèi)的凿渊,而且由于訊飛科大的功能太多,包太大)蘋果官方也推出了自己的一套識(shí)別標(biāo)準(zhǔn)(iOS語音識(shí)別Api只支持iOS10SDK以及以后的版本)梁只。

1、添加Speech.framework庫埃脏,導(dǎo)入頭文件#import<Speech/Speech.h>

2搪锣、在info.plist文件里添加鍵值Privacy - Speech Recognition Usage

plist文件添加鍵值

3、申請(qǐng)用戶語音識(shí)別權(quán)限

申請(qǐng)語音識(shí)別權(quán)限

4彩掐、具體實(shí)現(xiàn)代碼如下

? ?通過打印的文字發(fā)現(xiàn)打印了好多次不完整的字符串,在這個(gè)過程中他會(huì)循環(huán)矯正多次,最后得到結(jié)果,我們要用最終的結(jié)果:

// 1. 初始化一個(gè)識(shí)別器

SFSpeechRecognizer *recognizer = [[SFSpeechRecognizer alloc] initWithLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"]];

// 2. 初始化mp3的url? (我在Bundle中導(dǎo)入了一個(gè)本地的MP3文件進(jìn)行演示)

?NSURL*fileUrl = [[NSBundlemainBundle]URLForResource:@"laohu.mp3"withExtension:nil];

?// 3. 根據(jù)Url創(chuàng)建請(qǐng)求

SFSpeechURLRecognitionRequest *request = [[SFSpeechURLRecognitionRequest alloc] initWithURL:fileUrl];

?// 4. 發(fā)起請(qǐng)求

[recognizerrecognition TaskWithRequest: requestresultHandler: ^(SFSpeechRecognitionResult *_Nullableresult, NSError *_Nullableerror) {

? ? ? ? ? ? ? ? ? ? if(error !=nil) {

? ? ? ? ? ? ? ? ? ? ? ? NSLog(@"識(shí)別錯(cuò)誤:%@",error);

? ? ? ? ? ? ? ? ? ? ? ? return;

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? self.contentLabel.text = result.bestTranscription.formattedString;

? ? ? ? ? ? ? ? ? ? //打印語音識(shí)別的結(jié)果字符串

? ? ? ? ? ? ? ? ? ? NSLog(@"%@",result.bestTranscription.formattedString);

? ? ? ? ? ? ? ? }];

需要注意的地方就是需請(qǐng)求授權(quán),并配置Info.plist,否則Crash.

二构舟、通過BDs語音實(shí)現(xiàn)語音轉(zhuǎn)文字。

支持的語種:普通話堵幽、英語狗超、粵語、四川話朴下;

格式支持:pcm(不壓縮)努咐、wav(不壓縮,pcm編碼)殴胧、amr(壓縮格式)渗稍。推薦pcm?

采樣率 :16000 固定值。?

編碼:16bit 位深的單聲道团滥。

百度語音sdk接入:

注意:必須在真機(jī)語音才可以識(shí)別成功竿屹,在模擬器始終會(huì)返回錯(cuò)誤。

1惫撰、百度語音開放平臺(tái)注冊(cè)應(yīng)用獲取對(duì)應(yīng)的API_KEY, SECRET_KEY, APP_ID:

2羔沙、導(dǎo)入必備的庫,并添加下載的sdk厨钻,如下圖:

3扼雏、添加頭文件

#import "BDSEventManager.h"

#import "BDSASRDefines.h"

#import "BDSASRParameters.h"

4坚嗜、代碼實(shí)現(xiàn)

? ??首先配置百度語音識(shí)別

-(void)configureBDVoice{

? ? //創(chuàng)建相關(guān)接口對(duì)象

? ? self.asrManager = [BDSEventManager createEventManagerWithName:BDS_ASR_NAME];

? ? //設(shè)置代理

? ? [self.asrManager setDelegate:self];

? ? //配置參數(shù)

? ? //1.設(shè)置DEBUG_LOG的級(jí)別

? ? [self.asrManager setParameter:@(EVRDebugLogLevelTrace) forKey:BDS_ASR_DEBUG_LOG_LEVEL];

? ? //2.配置API_KEY 和 SECRET_KEY 和 APP_ID

? ? [self.asrManager setParameter:@[API_KEY, SECRET_KEY] forKey:BDS_ASR_API_SECRET_KEYS];

? ? [self.asrManager setParameter:APP_ID forKey:BDS_ASR_OFFLINE_APP_CODE];

? ? //3.配置端點(diǎn)檢測(cè)

? ? NSString*modelVAD_filepath = [[NSBundlemainBundle]pathForResource:@"bds_easr_basic_model"ofType:@"dat"];

//? ? NSLog(@"modelVAD_filepath = %@",modelVAD_filepath);

? ? [self.asrManager setParameter:modelVAD_filepath forKey:BDS_ASR_MODEL_VAD_DAT_FILE];

? ? [self.asrManager setParameter:@(YES) forKey:BDS_ASR_ENABLE_MODEL_VAD];

? ? //4.開啟語義理解

? ? [self.asrManager setParameter:@(YES) forKey:BDS_ASR_ENABLE_NLU];

? ? [self.asrManager setParameter:@"15361" forKey:BDS_ASR_PRODUCT_ID];

}

語音識(shí)別完成后的回調(diào)如下,可在回調(diào)中獲取識(shí)別的文字或者識(shí)別失敗的原因:

-(void)VoiceRecognitionClientWorkStatus:(int)workStatus obj:(id)aObj{

? ? switch(workStatus) {

? ? ? ? case EVoiceRecognitionClientWorkStatusNewRecordData:

? ? ? ??{

? ? ? ? ? ? NSLog(@"EVoiceRecognitionClientWorkStatusNewRecordData");

? ? ? ? ? ? break;

? ? ? ? }

? ? ? ? case EVoiceRecognitionClientWorkStatusStartWorkIng:

? ? ? ?{

? ? ? ? ? ? NSLog(@"EVoiceRecognitionClientWorkStatusStartWorkIng");

? ? ? ? ? ? break;

? ? ? ? }

? ? ? ? case EVoiceRecognitionClientWorkStatusStart:

? ? ? ?{

? ? ? ? ? ? NSLog(@"EVoiceRecognitionClientWorkStatusStart");

? ? ? ? ? ? break;

? ? ? ? }

? ? ? ? case EVoiceRecognitionClientWorkStatusEnd:

? ? ? ?{

? ? ? ? ? ? NSLog(@"EVoiceRecognitionClientWorkStatusEnd");

? ? ? ? ? ? break;

? ? ? ? }

? ? ? ? case EVoiceRecognitionClientWorkStatusFlushData:

? ? ? ?{

? ? ? ? ? ? NSLog(@"EVoiceRecognitionClientWorkStatusFlushData");

? ? ? ? ? ? break;

? ? ? ? }

? ? ? ? case EVoiceRecognitionClientWorkStatusFinish:

? ? ? ?{

? ? ? ? ? ? NSLog(@"EVoiceRecognitionClientWorkStatusFinish");

? ? ? ? ? ? NSLog(@"aObj = %@",aObj);

? ? ? ? ? ? break;

? ? ? ? }

? ? ? ? case EVoiceRecognitionClientWorkStatusMeterLevel:

? ? ? ?{

? ? ? ? ? ? NSLog(@"EVoiceRecognitionClientWorkStatusMeterLevel");

? ? ? ? ? ? break;

? ? ? ? }

? ? ? ? case EVoiceRecognitionClientWorkStatusCancel:

? ? ? ?{

? ? ? ? ? ? NSLog(@"EVoiceRecognitionClientWorkStatusCancel");

? ? ? ? ? ? break;

? ? ? ? }

? ? ? ? case EVoiceRecognitionClientWorkStatusError: {

? ? ? ? ? ? NSLog(@"EVoiceRecognitionClientWorkStatusError");

? ? ? ? ? ? break;

? ? ? ? }

? ? ? ? case EVoiceRecognitionClientWorkStatusLoaded:

? ? ? ?{

? ? ? ? ? ? NSLog(@"EVoiceRecognitionClientWorkStatusLoaded");

? ? ? ? ? ? break;

? ? ? ? }

? ? ? ? case EVoiceRecognitionClientWorkStatusUnLoaded:

? ? ? ?{

? ? ? ? ? ? NSLog(@"EVoiceRecognitionClientWorkStatusUnLoaded");

? ? ? ? ? ? break;

? ? ? ? }

? ? ? ? case EVoiceRecognitionClientWorkStatusChunkThirdData:

? ? ? ?{

? ? ? ? ? ? NSLog(@"EVoiceRecognitionClientWorkStatusChunkThirdData");

? ? ? ? ? ? break;

? ? ? ? }

? ? ? ? case EVoiceRecognitionClientWorkStatusChunkNlu:

? ? ? ?{

? ? ? ? ? ? NSLog(@"EVoiceRecognitionClientWorkStatusChunkNlu");

? ? ? ? ? ? break;

? ? ? ? }

? ? ? ? case EVoiceRecognitionClientWorkStatusChunkEnd:

? ? ? ?{

? ? ? ? ? ? NSLog(@"EVoiceRecognitionClientWorkStatusChunkEnd");

? ? ? ? ? ? break;

? ? ? ? }

? ? ? ? case EVoiceRecognitionClientWorkStatusFeedback:

? ? ? ? {

? ? ? ? ? ? NSLog(@"EVoiceRecognitionClientWorkStatusFeedback");

? ? ? ? ? ? break;

? ? ? ? }

? ? ? ? case EVoiceRecognitionClientWorkStatusRecorderEnd:

? ? ? ? {

? ? ? ? ? ? NSLog(@"EVoiceRecognitionClientWorkStatusRecorderEnd");

? ? ? ? ? ? break;

? ? ? ? }

? ? ? ? case EVoiceRecognitionClientWorkStatusLongSpeechEnd:

? ? ? ? {

? ? ? ? ? ? NSLog(@"EVoiceRecognitionClientWorkStatusLongSpeechEnd");

? ? ? ? ? ? break;

? ? ? ? }

? ? ? ? default:

? ? ? ? ? ? break;

? ? }

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末诗充,一起剝皮案震驚了整個(gè)濱河市苍蔬,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蝴蜓,老刑警劉巖碟绑,帶你破解...
    沈念sama閱讀 221,576評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異茎匠,居然都是意外死亡格仲,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門诵冒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來凯肋,“玉大人,你說我怎么就攤上這事汽馋∥甓” “怎么了?”我有些...
    開封第一講書人閱讀 168,017評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵豹芯,是天一觀的道長悄雅。 經(jīng)常有香客問我,道長铁蹈,這世上最難降的妖魔是什么宽闲? 我笑而不...
    開封第一講書人閱讀 59,626評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮木缝,結(jié)果婚禮上便锨,老公的妹妹穿的比我還像新娘。我一直安慰自己我碟,他們只是感情好放案,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著矫俺,像睡著了一般吱殉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上厘托,一...
    開封第一講書人閱讀 52,255評(píng)論 1 308
  • 那天友雳,我揣著相機(jī)與錄音,去河邊找鬼铅匹。 笑死押赊,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的包斑。 我是一名探鬼主播流礁,決...
    沈念sama閱讀 40,825評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼涕俗,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了神帅?” 一聲冷哼從身側(cè)響起再姑,我...
    開封第一講書人閱讀 39,729評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎找御,沒想到半個(gè)月后元镀,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,271評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡霎桅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評(píng)論 3 340
  • 正文 我和宋清朗相戀三年栖疑,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片哆档。...
    茶點(diǎn)故事閱讀 40,498評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蔽挠,死狀恐怖住闯,靈堂內(nèi)的尸體忽然破棺而出瓜浸,到底是詐尸還是另有隱情,我是刑警寧澤比原,帶...
    沈念sama閱讀 36,183評(píng)論 5 350
  • 正文 年R本政府宣布插佛,位于F島的核電站,受9級(jí)特大地震影響量窘,放射性物質(zhì)發(fā)生泄漏雇寇。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評(píng)論 3 333
  • 文/蒙蒙 一蚌铜、第九天 我趴在偏房一處隱蔽的房頂上張望锨侯。 院中可真熱鬧,春花似錦冬殃、人聲如沸囚痴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽深滚。三九已至,卻和暖如春涣觉,著一層夾襖步出監(jiān)牢的瞬間痴荐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評(píng)論 1 272
  • 我被黑心中介騙來泰國打工官册, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留生兆,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,906評(píng)論 3 376
  • 正文 我出身青樓膝宁,卻偏偏與公主長得像鸦难,于是被迫代替她去往敵國和親栖榨。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • iOS中實(shí)現(xiàn)語音轉(zhuǎn)文字明刷,除了一些第三方婴栽,如科大訊飛語音、百度語音等第三方的外(這種第三方的在其官方都有詳細(xì)的教程辈末,...
    彬至睢陽閱讀 14,747評(píng)論 4 20
  • 最近終于有一點(diǎn)時(shí)間抽空來看看最近的新技術(shù)愚争,然后發(fā)現(xiàn)了蘋果在去年出的新框架,可以直接語音轉(zhuǎn)文字挤聘,簡直厲害了轰枝,...
    NBeanN閱讀 7,545評(píng)論 8 14
  • 這里簡單使用一下百度官網(wǎng)的語音SDK 首先官網(wǎng)創(chuàng)建一個(gè)應(yīng)用拿到APP_KEY 和APP_ID還有SECRET_KE...
    Cn11閱讀 2,025評(píng)論 0 0
  • 效果是把識(shí)別的語音展示在textFiled上 以下是官方集成文檔里面有的代碼,目的是導(dǎo)...
    本客閱讀 908評(píng)論 0 0
  • 語音識(shí)別(Automatic Speech Recognition)是以語音為研究對(duì)象组去,通過語音信號(hào)處理和模式識(shí)別...
    Colleen_oh閱讀 56,548評(píng)論 6 26