您的位置:首页 > 其它

语音识别的步骤总结

2016-03-05 18:57 507 查看
总结如下:

第一步 导入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();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: