基于讯飞语音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开发文档

 

作者:登天路

转载请说明出处:http://www.cnblogs.com/travellife/

posted @ 2014-08-19 15:34  登天路  阅读(3373)  评论(2编辑  收藏  举报