首页 > 代码库 > 基于讯飞语音API应用开发之——离线词典构建

基于讯飞语音API应用开发之——离线词典构建

  最近实习在做一个跟语音相关的项目,就在度娘上搜索了很多关于语音的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开发文档