科大讯飞语音识别 demo
2015-07-30 08:28
232 查看
首先区分一下语音听写和语音识别二者的不同。
语音听写是把你说话的内容转换成文字内容,而语音识别是把你在abnf/bnf的语法文件里定义的关键词识别出来。
显然如果你是想用在输入法中的话当然是使用前者,如果你想打电话,发控制家电的指令当然用后者。
接下来我简单的介绍下离线识别的内容,本人刚研究两三天,掌握的也比较浅,有不妥之处,还望指出。
同样第一步是把准备工作做好,加载语音识别包,加入相关权限(这部分内之前的博客里提到过,这里就不赘述)。
其中在线识别和离线识别包有点不同,离线识别包要多一个common.jet.这个文件是要收费的,不过可以先下载体验版的先用着。
然后就是code了,第一步初始化,当然你要有appid,没有的可以去讯飞官网申请。
3.构建语法文件
分享的很简单,具体内容可以参考讯飞语音开发文档和我写的离线识别demo,离线识别体验包三个月内有效。
语音听写是把你说话的内容转换成文字内容,而语音识别是把你在abnf/bnf的语法文件里定义的关键词识别出来。
显然如果你是想用在输入法中的话当然是使用前者,如果你想打电话,发控制家电的指令当然用后者。
接下来我简单的介绍下离线识别的内容,本人刚研究两三天,掌握的也比较浅,有不妥之处,还望指出。
同样第一步是把准备工作做好,加载语音识别包,加入相关权限(这部分内之前的博客里提到过,这里就不赘述)。
其中在线识别和离线识别包有点不同,离线识别包要多一个common.jet.这个文件是要收费的,不过可以先下载体验版的先用着。
然后就是code了,第一步初始化,当然你要有appid,没有的可以去讯飞官网申请。
SpeechUtility.createUtility(OnLineReg.this, SpeechConstant.APPID +"=12345678");
</pre><pre name="code" class="html">2.创建SpeechRecognizer对象,并得到语法文件<pre name="code" class="html">mAsr = SpeechRecognizer.createRecognizer(context, mInitListener);//离线识别语音初始化监听mLocalGrammar=FucUtil.readFile(this,"call.bnf","utf-8");//这里使用的离线语法文件
3.构建语法文件
if (mEngineType.equals(SpeechConstant.TYPE_LOCAL)){ mAsr.setParameter(SpeechConstant.TEXT_ENCODING, "utf-8"); mAsr.setParameter(SpeechConstant.ENGINE_TYPE, mEngineType); ret = mAsr.buildGrammar("bnf", mLocalGrammar , localGrammarListener); if (ret != ErrorCode.SUCCESS){ Log.d(TAG,"语法构建失败,错误码: " + ret); }else{ Log.d(TAG,"语法构建成功"); }4,设置参数并启动监听
//设置返回值数据格式 mAsr.setParameter(SpeechConstant.RESULT_TYPE, "json"); //设置本地识别使用语法id mAsr.setParameter(SpeechConstant.LOCAL_GRAMMAR, "call"); //设置本地识别的门限值 mAsr.setParameter(SpeechConstant.ASR_THRESHOLD, "30");<pre name="code" class="html"> ret = mAsr.startListening(mRecognizerListener); Log.d(TAG,"语法构建成功 " + ret); } if (ret != ErrorCode.SUCCESS) { if(ret == ErrorCode.ERROR_COMPONENT_NOT_INSTALLED){ //未安装则跳转到提示安装页面 Log.d(TAG,"未安装则跳转到提示安装页面 " + ret); }else { Log.d(TAG,"识别失败,错误码: " + ret); } }
demo 的bnf 文件
<pre name="code" class="html">#BNF+IAT 1.0 UTF-8; !grammar order; !slot <contact>; !slot <callPre>; !slot <callPhone>; !slot <callTo>; !start <callStart>; <callStart>:[<callPre>][<callTo>]<contact><callPhone>|[<callPre>]<callPhone>[<callTo>]<contact>; <contact>:张海洋; <callPre>:我要|我想|我想要; <callPhone>:打电话; <callTo>:给;
分享的很简单,具体内容可以参考讯飞语音开发文档和我写的离线识别demo,离线识别体验包三个月内有效。
另外下载demo以后请把appid改为开发者申请的appid。
http://download.csdn.net/detail/t03330130/8944945
相关文章推荐
- Using namespace 命令空间(二)
- 1.1-对象、类的初步笔记
- 1.2-对象的建立-main
- Spring讲解----------集成框架
- dojo事件驱动编程之事件绑定
- 机器学习和统计模型的差异
- MFC之设置Windows大小
- 《编写高质量代码:改善Java程序的151个建议》
- IntelliJ Idea 14 安装 Golang 插件 google-go-lang-idea-
- IOS中KVO模式的解析与应用
- 2015.7.30早安,各位。
- http响应头上为什么没有Content-Encoding
- Spring详解-----------事务详解
- 连载三:初学OC之感
- 没有默认构造函数,如何定义对象的数组
- 标准I/O库
- 标准I/O库
- pandas merge,join and concatenate
- C 语言中 sscanf() 函数的用法
- 剑指Offer面试题10(Java版):二进制中的1的个数