最近實習在做一個跟語音相關的項目,就在度娘上搜索了很多關於語音的API,順藤摸瓜找到了科大訊飛,雖然度娘自家也有語音識別、語義理解這塊,但感覺應該不是很好用,畢竟之前用過百度地圖的API,有問題也找不到人幫忙解決(地圖開發者群里都是潛水的)...不得不說,科大訊飛在語音這塊尤其是中文識別方面做的真心不錯,而且Android還支持離線識別。
訊飛官方給的文檔內容很詳細,在這我就不贅述了。在開發中,由於一些原因需要用到離線識別這塊,就學習了一下。訊飛離線識別只支持Android系統,使用時需要安裝訊飛語音+,同時還要自己寫離現實別的字典(BNF)。關於BNF的文檔,我會在后面放出下載連接。在這里先給個簡單的BNF樣例:
1 #BNF+IAT 1.0 utf-8; 2 !grammar call; 3 !slot <list>; 4 !start <speech>; 5 <speech>:<list>; 6 <list>:盲人聽書|在線音樂|影音播放|小說;
當要更新BNF時,確切的說應該是更新某個槽(<slot>)時,可以調用SpeechRecognize的updateLexicon。例如更新以上BNF的槽,用如下代碼即可:
1 String grammar = "你好\n我好\n大家好\n廣州好迪\n"; 2 mSpeechRecognize.updateLexicon("<list>",grammar,mLexiconListener); 3 /** 4 * 初始化詞典更新完成回調接口 5 */ 6 private LexiconListener mLexiconListener = new LexiconListener() { 7 8 @Override 9 public void onLexiconUpdated(String grammarId, SpeechError errorCode) { 10 if (errorCode == null) { 11 Log.d(TAG, "詞典更新成功!Grammar ID:" + grammarId); 12 } else { 13 Log.d(TAG, "詞典更新失敗!Error Code:" + errorCode.getErrorCode()); 14 } 15 } 16 17 };
嗯,就是這樣,語法文件其實不難寫,離線詞典動態更新其實也不難。
相關資源:BNF開發文檔
作者:登天路