离线语音识别,一开始监听就回调onError方法显示没有匹配的识别结果
儒雅的牛大春 发布于2017-04 浏览:2394 回复:1
0
收藏

我使用的服务是:离线语音识别

调用的接口是:speechRecognizer.startListening(intent);

参数设置情况:intent.putExtra("grammar", "asset:///baidu_speech_grammar.bsg");

开发平台和机型:Android 6.0,小米2S

SDK版本号:2.1.21

代码或日志截图(上传截图能帮助您更快解决问题):

public SpeechControl(Context context) {

speechRecognizer = SpeechRecognizer.createSpeechRecognizer(context, new ComponentName(context, VoiceRecognitionService.class));

speechRecognizer.setRecognitionListener(this);


}


public void startRecognize(OnRecognizeListener listener) {

this.mListener = listener;

Intent intent = new Intent();

intent.putExtra("grammar", "asset:///baidu_speech_grammar.bsg");

speechRecognizer.startListening(intent);

}


@Override

public void onReadyForSpeech(Bundle params) {

Log.e("TAG", "准备就绪,可以开始说话");

}


@Override

public void onBeginningOfSpeech() {


}


@Override

public void onRmsChanged(float rmsdB) {


}


@Override

public void onBufferReceived(byte[] buffer) {


}


@Override

public void onEndOfSpeech() {


}


@Override

public void onError(int error) {

StringBuilder sb = new StringBuilder();

switch (error) {

case SpeechRecognizer.ERROR_AUDIO:

sb.append("音频问题");

break;

case SpeechRecognizer.ERROR_SPEECH_TIMEOUT:

sb.append("没有语音输入");

break;

case SpeechRecognizer.ERROR_CLIENT:

sb.append("其它客户端错误");

break;

case SpeechRecognizer.ERROR_INSUFFICIENT_PERMISSIONS:

sb.append("权限不足");

break;

case SpeechRecognizer.ERROR_NETWORK:

sb.append("网络问题");

break;

case SpeechRecognizer.ERROR_NO_MATCH:

sb.append("没有匹配的识别结果");

break;

case SpeechRecognizer.ERROR_RECOGNIZER_BUSY:

sb.append("引擎忙");

break;

case SpeechRecognizer.ERROR_SERVER:

sb.append("服务端错误");

break;

case SpeechRecognizer.ERROR_NETWORK_TIMEOUT:

sb.append("连接超时");

break;

}

sb.append(":" + error);

Log.e("TAG", "识别失败:" + sb.toString());

}


@Override

public void onResults(Bundle results) {

ArrayList resultList = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);

String resultStr = Arrays.toString(resultList.toArray(new String[resultList.size()]));

mListener.onResult(resultStr);

}


//识别临时结果

@Override

public void onPartialResults(Bundle partialResults) {

ArrayList resultList = partialResults.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);

String resultStr = Arrays.toString(resultList.toArray(new String[resultList.size()]));

mListener.onResult(resultStr);

}


@Override

public void onEvent(int eventType, Bundle params) {


}


public interface OnRecognizeListener {


void onResult(String result);

}

复现步骤、现象及其他描述:代码跟给出的demo是一样的,但是启动之后也不提示准备就绪,直接就执行onError返回没有匹配的识别结果。

收藏
点赞
0
个赞
共1条回复 最后由用户已被禁言回复于2022-04
#2周俊316回复于2017-05

儒雅的牛大春:

我使用的服务是:离线语音识别

调用的接口是:speechRecognizer.startListening(intent);

参数设置情况:intent.putExtra("grammar", "asset:///baidu_speech_grammar.bsg");

开发平台和机型:Android 6.0,小米2S

SDK版本号:2.1.21

代码或日志截图(上传截图能帮助您更快解决问题):

public SpeechControl(Context context) {

speechRecognizer = SpeechRecognizer.createSpeechRecognizer(context, new ComponentName(context, VoiceRecognitionService.class));

speechRecognizer.setRecognitionListener(this);


}


public void startRecognize(OnRecognizeListener listener) {

this.mListener = listener;

Intent intent = new Intent();

intent.putExtra("grammar", "asset:///baidu_speech_grammar.bsg");

speechRecognizer.startListening(intent);

}


@Override

public void onReadyForSpeech(Bundle params) {

Log.e("TAG", "准备就绪,可以开始说话");

}


@Override

public void onBeginningOfSpeech() {


}


@Override

public void onRmsChanged(float rmsdB) {


}


@Override

public void onBufferReceived(byte[] buffer) {


}


@Override

public void onEndOfSpeech() {


}


@Override

public void onError(int error) {

StringBuilder sb = new StringBuilder();

switch (error) {

case SpeechRecognizer.ERROR_AUDIO:

sb.append("音频问题");

break;

case SpeechRecognizer.ERROR_SPEECH_TIMEOUT:

sb.append("没有语音输入");

break;

case SpeechRecognizer.ERROR_CLIENT:

sb.append("其它客户端错误");

break;

case SpeechRecognizer.ERROR_INSUFFICIENT_PERMISSIONS:

sb.append("权限不足");

break;

case SpeechRecognizer.ERROR_NETWORK:

sb.append("网络问题");

break;

case SpeechRecognizer.ERROR_NO_MATCH:

sb.append("没有匹配的识别结果");

break;

case SpeechRecognizer.ERROR_RECOGNIZER_BUSY:

sb.append("引擎忙");

break;

case SpeechRecognizer.ERROR_SERVER:

sb.append("服务端错误");

break;

case SpeechRecognizer.ERROR_NETWORK_TIMEOUT:

sb.append("连接超时");

break;

}

sb.append(":" + error);

Log.e("TAG", "识别失败:" + sb.toString());

}


@Override

public void onResults(Bundle results) {

ArrayList resultList = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);

String resultStr = Arrays.toString(resultList.toArray(new String[resultList.size()]));

mListener.onResult(resultStr);

}


//识别临时结果

@Override

public void onPartialResults(Bundle partialResults) {

ArrayList resultList = partialResults.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);

String resultStr = Arrays.toString(resultList.toArray(new String[resultList.size()]));

mListener.onResult(resultStr);

}


@Override

public void onEvent(int eventType, Bundle params) {


}


public interface OnRecognizeListener {


void onResult(String result);

}

复现步骤、现象及其他描述:代码跟给出的demo是一样的,但是启动之后也不提示准备就绪,直接就执行onError返回没有匹配的识别结果。

回复儒雅的牛大春:


您好,您第一次进行联网授权了吗?

请到 http://yuyin.baidu.com/docs/asr/166核对程序中设置和应用是否一致(如api key和sercret key),然后您第一次联网设置授权


0
TOP
切换版块