科大讯飞语音识别 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
更多推荐
已为社区贡献3条内容
所有评论(0)