科大讯飞语音识别 demo

首先区分一下语音听写和语音识别二者的不同。

      语音听写是把你说话的内容转换成文字内容,而语音识别是把你在abnf/bnf的语法文件里定义的关键词识别出来。

显然如果你是想用在输入法中的话当然是使用前者,如果你想打电话,发控制家电的指令当然用后者。


接下来我简单的介绍下离线识别的内容,本人刚研究两三天,掌握的也比较浅,有不妥之处,还望指出。


同样第一步是把准备工作做好,加载语音识别包,加入相关权限(这部分内之前的博客里提到过,这里就不赘述)。

其中在线识别和离线识别包有点不同,离线识别包要多一个common.jet.这个文件是要收费的,不过可以先下载体验版的先用着。


然后就是code了,第一步初始化,当然你要有appid,没有的可以去讯飞官网申请。

SpeechUtility.createUtility(OnLineReg.this, SpeechConstant.APPID +"=12345678"); 
2.创建SpeechRecognizer对象,并得到语法文件
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");
                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 文件
#BNF+IAT 1.0 UTF-8;
!grammar order;
!slot ;
!slot ;
!slot ;
!slot ;
!start ;
:[][]|[][];
:张海洋;
:我要|我想|我想要;
:打电话;
:给;

分享的很简单,具体内容可以参考讯飞语音开发文档和我写的离线识别demo,离线识别体验包三个月内有效。

另外下载demo以后请把appid改为开发者申请的appid。
http://download.csdn.net/detail/t03330130/8944945

 
  
 
  


你可能感兴趣的:(应用开发)