語音化實(shí)踐

一迁筛、語音識別篇

1啤誊、語音識別方案選擇

目前市場上提供語音識別技術(shù)公司相對較多刃滓,相關(guān)技術(shù)較為成熟酌媒,一些比較知名的語音服務(wù)提供商:

公司 相關(guān)產(chǎn)品 特點(diǎn)
科大訊飛 訊飛輸入法欠痴、京東迄靠、攜程、新浪微博喇辽、獵豹瀏覽器掌挚、有道翻譯官等 國內(nèi)語音產(chǎn)業(yè)的先行者,中文語音識別市場占有率第一菩咨,市面上大部分應(yīng)用的語音功能都是使用訊飛的接口
百度 百度輸入法吠式,魅族輸入法等 免費(fèi)! 技術(shù)實(shí)力也較為強(qiáng)大
思必馳 思必馳 更多偏向于智能硬件抽米,智能家具特占、車載方面
方案選擇時(shí)的注意點(diǎn):

技術(shù)方面:

  • 識別準(zhǔn)確率 :目前市場上提供語音識別技術(shù)的主流公司的識別準(zhǔn)確率都在95%以上,差異不大云茸。 對于偏僻字是目、方言的識別訊飛更好一些
  • 垂直領(lǐng)域的定制化:在垂直領(lǐng)域使用通用數(shù)據(jù)進(jìn)行識別,效果肯定不太好标捺,如果缺少支持該領(lǐng)域的相關(guān)功能懊纳,那么識別功能的效果就會大打折扣。比如生活服務(wù)中亡容,“陳魚落宴”是一家主營烤魚的餐廳嗤疯,用戶語音搜索中,如果按照通用識別闺兢,將會識別為“沉魚落雁”茂缚,那么這次搜索對于用戶來說就是無效的。除此之外列敲,如需要中英混合識別也需要注意能否支持。

服務(wù)方面:

  • 文檔是否全面帖汞,出現(xiàn)問題是否能及時(shí)找到支持人員等
實(shí)踐: 我們在項(xiàng)目中所選用的是科大訊飛的語音識別戴而,總體很不錯,文檔和技術(shù)支持(大公司)都不錯翩蘸,但定制化方面略有局限所意。

2、訊飛語音識別的使用

(1)識別的過程

當(dāng)麥克風(fēng)開啟后催首,訊飛進(jìn)入監(jiān)聽狀態(tài)后扶踊,會將用戶輸入的音頻按一定長度截?cái)啵蟼鞯椒?wù)器進(jìn)行識別郎任,識別后返回識別的內(nèi)容秧耗,即邊輸入邊識別的模式,也稱流式識別舶治,簡單舉個例子:

當(dāng)用戶開啟麥克風(fēng)并說話后:“今天天氣怎么樣”分井,訊飛會將聽到內(nèi)容截?cái)喑碘敖裉臁保疤鞖狻背呙缓髮⒆R別后的內(nèi)容返回珠闰,依次進(jìn)行,直到識別到最后一個字后瘫辩,返回結(jié)束符號伏嗜,完成此次識別。
舉例:識別的返回內(nèi)容
{
   "sn": 1,
   "ls": false,
   "bg": 0,
   "ed": 0,
   "ws": [ {
           "bg": 0,
           "cw": [
               {
                   "w": "今天",
                   "sc": 0
               } ]
       },
       {
           "bg": 0,
           "cw": [
               {
                   "w": "天氣",
                   "sc": 0
               }
           ]
       }
   ]
}

(2)訊飛的SDK使用

  • 使用訊飛服務(wù)前需要初始化SDK
SpeechUtility.createUtility(android.content.Context, APPID) //需要在訊飛平臺上注冊一個App伐厌,初始化時(shí)需要這個Appid
  • 設(shè)置識別的類型參數(shù)
通過setParameter(String key, java.lang.String value) 配置的識別參數(shù)承绸,可設(shè)置的參數(shù)有:
SpeechConstant.NET_TIMEOUT: 網(wǎng)絡(luò)連接超時(shí)時(shí)間
SpeechConstant.KEY_SPEECH_TIMEOUT:語音輸入超時(shí)時(shí)間 
SpeechConstant.LANGUAGE:語言 //中文、外文等
SpeechConstant.ACCENT:語言區(qū)域 //普通話弧械、粵語八酒、等地方方言都支持
SpeechConstant.AUDIO_SOURCE:音頻源
SpeechConstant.BLUETOOTH: 藍(lán)牙錄音
SpeechConstant.VAD_BOS:前端點(diǎn)超時(shí),//開始錄入音頻后刃唐,音頻前面部分最長靜音時(shí)長
SpeechConstant.VAD_EOS:后端點(diǎn)超時(shí)//開始錄入音頻后羞迷,音頻后面部分最長靜音時(shí)長
SpeechConstant.ASR_PTT:設(shè)置是否有標(biāo)點(diǎn)符號
SpeechConstant.RESULT_TYPE:識別結(jié)果類型
SpeechConstant.ASR_AUDIO_PATH:識別錄音保存路徑 

如需對識別內(nèi)容進(jìn)行翻譯,增加以下參數(shù):
SpeechConstant.ASR_SCH:語義或翻譯
SpeechConstant.ORI_LANG: 原始語種
SpeechConstant.TRANS_LANG: 目標(biāo)語種
SpeechConstant.ADD_CAP:語義或翻譯處理通道
SpeechConstant.TRS_SRC:翻譯結(jié)果格式
  • 內(nèi)容識別后的回調(diào)方法
//音量變化 當(dāng)開始識別画饥,到停止錄音(停止寫入音頻流)或SDK返回最后一個結(jié)果自動結(jié)束識別為止衔瓮, 
//SDK檢測到音頻數(shù)據(jù)(正在錄音或?qū)懭胍纛l流)的音量變化時(shí),會多次通過此函數(shù)回調(diào)抖甘,告知應(yīng)用層當(dāng)前的音量值热鞍。   
void onVolumeChanged(int var1, byte[] var2);

//開始說話。調(diào)用開始錄音方法后衔彻,會自動開啟系統(tǒng)錄音機(jī)薇宠,錄音機(jī)開啟后會回調(diào)該函數(shù)
void onBeginOfSpeech(); 

//結(jié)束說話。SDK檢測到音頻的靜音斷點(diǎn)時(shí)艰额,會回調(diào)此函數(shù)
void onEndOfSpeech(); 

//返回結(jié)果 返回的結(jié)果可能為null澄港,請?jiān)黾优袛嗵幚怼?void onResult(RecognizerResult result, boolean islastWord); 

///錯誤回調(diào) 當(dāng)此函數(shù)回調(diào)時(shí),說明當(dāng)次會話出現(xiàn)錯誤柄沮,會話自動結(jié)束回梧,錄音也會停止
void onError(SpeechError var1); 

//事件拓展接口,由具體業(yè)務(wù)約定
void onEvent(int var1, int var2, int var3, Bundle var4); 

二祖搓、語音合成篇

1狱意、語音合成方案選擇
公司 相關(guān)產(chǎn)品 特點(diǎn)
科大訊飛 滴滴出行、高德地圖拯欧、攜程详囤、叮咚音響 -
百度 iReader、逍遙西游 免費(fèi)镐作! 技術(shù)實(shí)力也較為強(qiáng)大

語音合成方面纬纪,推薦上面兩家蚓再,也是市場上使用率較高的兩家。我們使用的是百度的包各,百度的開發(fā)文檔摘仅,社區(qū)內(nèi)容,確實(shí)沒有訊飛的全面问畅,不過按百度當(dāng)前的速度娃属,兩者的差距會很快被磨平,更重要的是百度免費(fèi)护姆!

2矾端、百度語音合成調(diào)研
  • 接口模式:
    • REST API 方式。 基于HTTP方式調(diào)用接口卵皂,每次下載全部的語音合成內(nèi)容秩铆。
    • SDK方式。和REST API的區(qū)別在于支持邊下邊播灯变。
  • SDK識別模式的選擇殴玛。提供了兩種模式:
    • 純在線合成。 任何網(wǎng)絡(luò)條件下都會連接百度服務(wù)器添祸,如果連接失敗滚粟,則合成失敗
    • 離在線混合合成。區(qū)分用戶的網(wǎng)絡(luò)環(huán)境選擇在線或離線刃泌。網(wǎng)絡(luò)連接失敗自動切換為離線凡壤。離在線模式下還按網(wǎng)絡(luò)分為不同模式
  • SDK引入的Size大小
    • 純在線模式。jar包380K + so庫1.6M
    • 離在線混合模式:在純在線模式基礎(chǔ)上耙替,額外增加:聲音數(shù)據(jù)包260K/種 + 文本模型包4.5M
3亚侠、百度語音合成使用

我們選擇的是純在線模式。在使用前需要完成注冊俗扇,設(shè)置合成參數(shù)

private void initSpeechSynthesizer(Context context) {
    SpeechSynthesizer mSpeechSynthesizer = SpeechSynthesizer.getInstance();
    SynthesizerListener mSynthesizerListener = new SynthesizerListener();
    //完成SDK的注冊
    mSpeechSynthesizer.setAppId(BAIDU_APPID); 
    mSpeechSynthesizer.setApiKey(BAIDU_APIKEY, BAIDU_SECRETKEY);
    mSpeechSynthesizer.setContext(context);
    mSpeechSynthesizer.setSpeechSynthesizerListener(mSynthesizerListener);

    mSpeechSynthesizer.auth(TtsMode.ONLINE); //純在線識別
    mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_SPEAKER, "0");// 設(shè)置發(fā)聲的人聲音硝烂,在線生效
    mSpeechSynthesizer.initTts(TtsMode.ONLINE); // 初始化在線模式
}

具體使用:

// 進(jìn)行播報(bào)
mSpeechSynthesizer.speak(String content)
// 停止播報(bào)
mSpeechSynthesizer.stop()  
4、其他注意

額外說下SpeechSynthesizer.auth(TtsMode.ONLINE)方法狐援,按照文檔描述钢坦,auth()接口用于測試開發(fā)者是否成功申請了在線或者離線授權(quán)究孕。 不過在項(xiàng)目上線后發(fā)現(xiàn)該方法引發(fā)了較多ANR問題啥酱。經(jīng)過分析發(fā)現(xiàn),第一次打開App時(shí)auth方法耗時(shí)在1.5s左右厨诸,鑒權(quán)耗時(shí)較長泞遗,我們在開發(fā)中斟薇,要根據(jù)業(yè)務(wù)場景延后加載或進(jìn)行異步處理;除此之外刨疼,和百度同學(xué)溝通后,確定對于純在線模式挣郭,auth方法也可以不調(diào)用(好坑,demo和文檔中并沒有此描述)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市滓走,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌帽馋,老刑警劉巖搅方,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異绽族,居然都是意外死亡姨涡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進(jìn)店門吧慢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來涛漂,“玉大人,你說我怎么就攤上這事检诗⌒僬蹋” “怎么了?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵岁诉,是天一觀的道長锚沸。 經(jīng)常有香客問我,道長涕癣,這世上最難降的妖魔是什么哗蜈? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮坠韩,結(jié)果婚禮上距潘,老公的妹妹穿的比我還像新娘。我一直安慰自己只搁,他們只是感情好音比,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著氢惋,像睡著了一般洞翩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上焰望,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天骚亿,我揣著相機(jī)與錄音,去河邊找鬼熊赖。 笑死来屠,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播俱笛,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼捆姜,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了迎膜?” 一聲冷哼從身側(cè)響起泥技,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎磕仅,沒想到半個月后零抬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡宽涌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年平夜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片卸亮。...
    茶點(diǎn)故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡忽妒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出兼贸,到底是詐尸還是另有隱情段直,我是刑警寧澤,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布溶诞,位于F島的核電站鸯檬,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏螺垢。R本人自食惡果不足惜喧务,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望枉圃。 院中可真熱鬧功茴,春花似錦、人聲如沸孽亲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽返劲。三九已至玲昧,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間篮绿,已是汗流浹背孵延。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留搔耕,地道東北人隙袁。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像弃榨,于是被迫代替她去往敵國和親菩收。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評論 2 353

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

  • 1鲸睛、通過CocoaPods安裝項(xiàng)目名稱項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請求組件 FMDB本地?cái)?shù)據(jù)庫組件 SD...
    陽明先生_X自主閱讀 15,979評論 3 119
  • 因?yàn)槭切鞃樧詫?dǎo)自演娜饵,所以我對這部電影的期待是期望它能像《催眠大師》一樣讓我驚艷,全部看下來官辈,呃……我的期待可能過高...
    木棉有話說閱讀 254評論 0 2
  • 1.WEB框架演進(jìn) Express --> Koa --> Koa2 2. Node 調(diào)試工具入門教程 http:...
    VeC_House閱讀 166評論 0 0
  • 一直下了好幾天雨箱舞,據(jù)說有500mm,是的拳亿,你沒猜錯晴股,就是這幾天一直在抗洪的城市。連著上了2天班肺魁,事情很簡單电湘,就是在...
    逆水暖閱讀 238評論 0 0
  • 辦了大半年的卡,昨天終于下定決心去健身了鹅经,前臺登記時(shí)突然發(fā)現(xiàn)健身房也用上了全息了…是不是以后教練也要開始失業(yè)了寂呛。
    晴天小豬Ivy閱讀 155評論 0 0