语音识别的步骤总结

总结如下:

第一步 导入armeabi文件夹和Msc.jar文件如图,然后写两个类 


MainActivity中的java代码:


第二步 在activity的onCreate()中写一个方法 initSpeech()方法,并Ctrl+1 实现,如下:

        private RecognizerDialog iatDialog; //识别窗口
private SpeechRecognizer iatRecognizer; //识别对象


               //初始化讯飞语音控件
public void initSpeech(){
SpeechUser.getUser().login(getActivity(), null, null, "appid="+APPID,listener);
//创建听写对象,如果只使用无UI听写功能,不需要创建RecognizerDialog
iatRecognizer=SpeechRecognizer.createRecognizer(getActivity());
//初始化听写Dialog,如果只使用有UI听写功能,无需创建SpeechRecognizer
iatDialog =new RecognizerDialog(getActivity());
}

第三步 写一个点击事件的方法,用于当点击语音按钮时触发该事件,如下:

public void onClick(View v){

showIatDialog();

}

      //语音识别对话框
public void showIatDialog()
{
if(null == iatDialog) {
//初始化听写Dialog
iatDialog =new RecognizerDialog(getActivity());
}
String engine="iat_engine";
//清空Grammar_ID,防止识别后进行听写时Grammar_ID的干扰
iatDialog.setParameter(SpeechConstant.CLOUD_GRAMMAR, null);
//设置听写Dialog的引擎
iatDialog.setParameter(SpeechConstant.DOMAIN, engine);
iatDialog.setParameter(SpeechConstant.SAMPLE_RATE, "16000");
//清空结果显示框.
et_number.setText(null);
//显示听写对话框
iatDialog.setListener(recognizerDialogListener);
iatDialog.show();
showToast("请开始说话...");
}


//用户登录回调监听器.
private SpeechListener listener = new SpeechListener()
{
@Override
public void onData(byte[] arg0) {
}
@Override
public void onCompleted(SpeechError error) {
if(error != null) {
showToast(error.getMessage());
}
}
@Override
public void onEvent(int arg0, Bundle arg1) {
}
};

//识别回调监听器
RecognizerDialogListener recognizerDialogListener=new RecognizerDialogListener()
{
@Override
public void onResult(RecognizerResult results, boolean isLast) {
String text = JsonParser.parseIatResult(results.getResultString());
et_number.append(text.replace("。", ""));
et_number.setSelection(et_number.length());
}
public void onError(SpeechError error) {
showToast(error.getMessage());
}
};


@Override
public void onStop() {
if (null != iatRecognizer) {
iatRecognizer.cancel();
}
if (null != iatDialog) {
iatDialog.cancel();
}
super.onStop();
}



第四步:在创建一个类JsonParser.java 里面的写的代码如下:


import org.json.JSONArray;


import org.json.JSONObject;
import org.json.JSONTokener;


import android.text.TextUtils;


//import com.iflytek.speech.ErrorCode;
//import com.iflytek.speech.SpeechError;
/**
 * 对云端返回的Json结果进行解析
 */
public class JsonParser {

/**
* 听写结果的Json格式解析
* @param json
* @return
*/
public static String parseIatResult(String json) {
if(TextUtils.isEmpty(json))
return "";

StringBuffer ret = new StringBuffer();
try {
JSONTokener tokener = new JSONTokener(json);
JSONObject joResult = new JSONObject(tokener);


JSONArray words = joResult.getJSONArray("ws");
for (int i = 0; i < words.length(); i++) {
// 听写结果词,默认使用第一个结果
JSONArray items = words.getJSONObject(i).getJSONArray("cw");
JSONObject obj = items.getJSONObject(0);
ret.append(obj.getString("w"));

}
} catch (Exception e) {
e.printStackTrace();

return ret.toString();
}

/**
* 识别结果的Json格式解析
* @param json
* @return
*/
public static String parseGrammarResult(String json) {
StringBuffer ret = new StringBuffer();
try {
JSONTokener tokener = new JSONTokener(json);
JSONObject joResult = new JSONObject(tokener);


JSONArray words = joResult.getJSONArray("ws");
for (int i = 0; i < words.length(); i++) {
JSONArray items = words.getJSONObject(i).getJSONArray("cw");
for(int j = 0; j < items.length(); j++)
{
JSONObject obj = items.getJSONObject(j);
if(obj.getString("w").contains("nomatch"))
{
ret.append("没有匹配结果.");
return ret.toString();
}
ret.append("【结果】" + obj.getString("w"));
ret.append("【置信度】" + obj.getInt("sc"));
ret.append("\n");
}
}
} catch (Exception e) {
e.printStackTrace();
ret.append("没有匹配结果.");

return ret.toString();
}

/**
* 语义结果的Json格式解析
* @param json
* @return
*/
public static String parseUnderstandResult(String json) {
StringBuffer ret = new StringBuffer();
try {
JSONTokener tokener = new JSONTokener(json);
JSONObject joResult = new JSONObject(tokener);


ret.append("【应答码】" + joResult.getString("rc") + "\n");
ret.append("【转写结果】" + joResult.getString("text") + "\n");
ret.append("【服务名称】" + joResult.getString("service") + "\n");

ret.append("【操作名称】" + joResult.getString("operation") + "\n");
ret.append("【完整结果】" + json);
} catch (Exception e) {
e.printStackTrace();
ret.append("没有匹配结果.");

return ret.toString();
}
}








  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值