科大讯飞离线关键词识别(语法识别)(2)

科⼤讯飞离线关键词识别语法识别)(2)
关键词识别和语⾳听写还是有差别的,语⾳听写是直接将所说的话转化成语⾳,⾄于识别的准确率看所说的话是否是常⽤的,如果遇到不常见的词⽐如
背⾝腿降这个指令,识别出来的就是乱七⼋糟的。⽽关键词识别也就是针对这种关键词识别有很好的效果,在于你⾃⼰构建⼀个.bnf⽂件,然后写上关键词
#BNF+IAT 1.0 UTF-8;
!grammar call;
!slot <contact>;
!slot <callPre>;
!slot <callPhone>;
!slot <callTo>;
!start <callStart>;
<callStart>:[<callPre>];
<callPre>:北盛|背升|结束|背平|北平|备品|腿升|腿伸|腿平|坐⽴|躺平|停⽌|左翻⾝|有翻⾝|右翻⾝|开盖|灌溉|关盖|打包|打开电源|关闭电源|调节|打包|烘⼲|男性清晰|男性清洗|⼥性清晰|⼥性清洗;
其实需要修改的就是后⾯中⽂。mp3机
然后下载官⽅的关键词识别库,包括libs⾥⾯的两个⽂件和Msc.jar包,然后我重新在main下⾯和java同级建⽴⼀个jniLibs⽬录,⾥⾯放的
如下⽂件
实际上官⽅下载只有两个,以⾄于我后来测试⼀直报10107错误,我就百度讯飞10107错误,解释是
于是查看⽂章⾥⾯
可是这个类是mAsr⾃带的,这个参数我也没法修改,于是我在科⼤讯飞⼯作平台提交了⼯作单
很感谢⽇均两问的回复,最后我到了最原始的也就是⾥⾯含有7个库的⽂件,这下语法直接构建成功了。这是我在做关键词识别的时候遇到的最⼤的问题
现在发⼀下代码
⼯具类构建语法BuildLocalGrammer
public abstract class BuildLocalGrammer {
/**
* 构建语法的回调
*
* @param errMsg null 构造成功
*/
public abstract void result(String errMsg, String grammarId);
// Log标签
rat组合
private static final String TAG ="BuildLocalGrammar";
public static final String GRAMMAR_PATH = ExternalStorageDirectory().getAbsolutePath()+"/msc/test";
// 上下⽂
private Context mContext;
// 语⾳识别对象
private SpeechRecognizer mAsr;
public BuildLocalGrammer(Context context){
mContext = context;
// 初始化识别对象
mAsr = ateRecognizer(context,new InitListener(){
@Override
public void onInit(int code){
Log.d(TAG,"SpeechRecognizer init() code = "+ code);
if(code != ErrorCode.SUCCESS){
result(code +"", null);
Log.d(TAG,"初始化失败,错误码:"+ code);
Toast.makeText(mContext,"初始化失败,错误码:"+ code, Toast.LENGTH_SHORT).show();
}
}
});
}
;
/
**
* 构建语法
*
* @return
*/
public void buildLocalGrammar(){
try{
/*
* TODO 如果你要在程序⾥维护bnf⽂件,可以在这⾥加上你维护的⼀些逻辑
* 如果不嫌⿇烦,要⼀直改bnf⽂件,这⾥的代码可以不⽤动,不过我个⼈不建议⼀直⼿动修改bnf⽂件            * ,内容多了以后很容易出错,不好Bug,建议每次改之前先备份。建议⽤程序维护bnf⽂件。
*/
/*
电子式电压互感器
* 构建语法
*/
String mContent;// 语法、词典临时变量
String mLocalGrammar = adFile(mContext,"call.bnf","utf-8");
mContent =new String(mLocalGrammar);
mAsr.setParameter(SpeechConstant.PARAMS, null);
// 设置⽂本编码格式
mAsr.setParameter(SpeechConstant.TEXT_ENCODING,"utf-8");
扎带// 设置引擎类型
mAsr.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_LOCAL);
// 设置语法构建路径
mAsr.setParameter(ResourceUtil.GRM_BUILD_PATH, GRAMMAR_PATH);
// 使⽤8k⾳频的时候请解开注释
// mAsr.setParameter(SpeechConstant.SAMPLE_RATE, "8000");
// 设置资源路径
mAsr.setParameter(ResourceUtil.ASR_RES_PATH,getResourcePath());
// 构建语法
int ret = mAsr.buildGrammar("bnf", mContent,new GrammarListener(){
@Override
public void onBuildFinish(String grammarId, SpeechError error){
if(error == null){
Log.d(TAG,"语法构建成功");
result(null, grammarId);
}else{
Log.d(TAG,"语法构建失败,错误码:"+ ErrorCode());
ErrorCode()+"", grammarId);
}
}
});
if(ret != ErrorCode.SUCCESS){
Log.d(TAG,"语法构建失败,错误码:"+ ret);
result(ret +"", null);
}
}catch(Exception e){
e.printStackTrace();
}
}
// 获取识别资源路径
private String getResourcePath(){
StringBuffer tempBuffer =new StringBuffer();
// 识别通⽤资源
tempBuffer.ateResourcePath(mContext, ResourceUtil.RESOURCE_TYPE.assets,"asr/common.jet"));
// 识别8k资源-使⽤8k的时候请解开注释
// tempBuffer.append(";");
// tempBuffer.ateResourcePath(this,
// RESOURCE_TYPE.assets, "asr/common_8k.jet"));
String();
}
}
识别类KqwSpeechRecognizer
public abstract class KqwSpeechRecognizer {
/**
* 初始化的回调
*
* @param flag
*            true 初始化成功 false 初始化失败
*/
public abstract void initListener(boolean flag);
public abstract void resultData(String data);
public abstract void speechLog(String log);
// Log标签
private static final String TAG ="KqwLocal";
private Toast mToast;
public static final String GRAMMAR_PATH = ExternalStorageDirectory().getAbsolutePath()+"/msc/test";
// 上下⽂
private Context mContext;
// 语⾳识别对象
private SpeechRecognizer mAsr;
public KqwSpeechRecognizer(Context context){
mContext = context;
// 初始化识别对象
mAsr = ateRecognizer(context,new InitListener(){
@Override
public void onInit(int code){
Log.d(TAG,  code+"");
if(code != ErrorCode.SUCCESS){
initListener(false);
Toast.makeText(mContext,"初始化失败,错误码:"+ code, Toast.LENGTH_SHORT).show();
}else{
initListener(true);
}
}
});
});
}
/**
* 参数设置
*/
public void setParam(){
// 清空参数
mAsr.setParameter(SpeechConstant.PARAMS, null);
// 设置识别引擎本地引擎
mAsr.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_LOCAL);
// mAsr.setParameter(SpeechConstant.ENGINE_TYPE,
// SpeechConstant.TYPE_MIX);
// mAsr.setParameter(SpeechConstant.ENGINE_TYPE, "mixed");
// // 设置本地识别资源火油草
mAsr.setParameter(ResourceUtil.ASR_RES_PATH,getResourcePath());
// 设置语法构建路径
mAsr.setParameter(ResourceUtil.GRM_BUILD_PATH, GRAMMAR_PATH);
// 设置返回结果格式
mAsr.setParameter(SpeechConstant.RESULT_TYPE,"json");
// 设置本地识别使⽤语法id
mAsr.setParameter(SpeechConstant.LOCAL_GRAMMAR,"call");
// 设置识别的门限值
mAsr.setParameter(SpeechConstant.MIXED_THRESHOLD,"60");张英森
// 使⽤8k⾳频的时候请解开注释
// mAsr.setParameter(SpeechConstant.SAMPLE_RATE, "8000");
mAsr.setParameter(SpeechConstant.DOMAIN,"iat");
mAsr.setParameter(SpeechConstant.NLP_VERSION,"2.0");
mAsr.setParameter("asr_sch","1");
// mAsr.setParameter(SpeechConstant.RESULT_TYPE, "json");
}
// 获取识别资源路径
private String getResourcePath(){
StringBuffer tempBuffer =new StringBuffer();
// 识别通⽤资源
tempBuffer.ateResourcePath(mContext, ResourceUtil.RESOURCE_TYPE.assets,"asr/common.jet"));
// 识别8k资源-使⽤8k的时候请解开注释
// tempBuffer.append(";");
// tempBuffer.ateResourcePath(this,
// RESOURCE_TYPE.assets, "asr/common_8k.jet"));
String();
}
int ret =0;// 函数调⽤返回值
/**
* 开始识别
*/
public void startListening(){
// 设置参数
setParam();
ret = mAsr.startListening(mRecognizerListener);
if(ret != ErrorCode.SUCCESS){
Log.i(TAG,"识别失败,错误码: "+ ret);
}
}
public void stopListening(){
mAsr.stopListening();
}
/**
* 识别。
*/
private RecognizerListener mRecognizerListener =new RecognizerListener(){

本文发布于:2024-09-22 20:25:46,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/186267.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:识别   设置   语法   构建   错误   关键词   维护   资源
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议