离线命令词出现2,2100错误。
cupid_qs 发布于2018-06 浏览:2477 回复:2
0
收藏
最后编辑于2022-04

06-22 17:27:50.159 8857-8857/com.baiduspeechtest I/MyRecognizer.Debug: asr params(识别参数,反馈请带上此行日志):{"accept-audio-volume":true,"accept-audio-data":false,"disable-punctuation":false,"pid":1736}
06-22 17:27:50.174 8857-8857/com.baiduspeechtest I/RecogEventAdapter: name:asr.finish; params:{"origin_result":{"sn":"","error":2,"desc":"Network is not available","sub_error":2100},"error":2,"desc":"Network is not available","sub_error":2100}
06-22 17:27:50.175 8857-8857/com.baiduspeechtest E/RecogEventAdapter: asr error:{"origin_result":{"sn":"","error":2,"desc":"Network is not available","sub_error":2100},"error":2,"desc":"Network is not available","sub_error":2100}
06-22 17:27:50.176 8857-8857/com.baiduspeechtest I/RecogEventAdapter: name:asr.exit; params:{"origin_result":{"sn":"","error":2,"desc":"Network is not available","sub_error":2100},"error":2,"desc":"Network is not available","sub_error":2100}

===================================代码部分(修改自demo)=====================================================

package com.baiduspeechtest.activity;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import com.baidu.android.voicedemo.control.MyRecognizer;
import com.baidu.android.voicedemo.recognization.IStatus;
import com.baidu.android.voicedemo.recognization.MessageStatusRecogListener;
import com.baidu.android.voicedemo.recognization.StatusRecogListener;
import com.baidu.speech.asr.SpeechConstant;
import com.baiduspeechtest.R;

import java.lang.ref.WeakReference;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;

public class MainActivity extends Activity implements IStatus {


    @BindView(R.id.button_main)
    Button mbtn;
    @BindView(R.id.tv_log)
    TextView tvLog;

    @BindView(R.id.tv_status)
    TextView tvStatus;
    MyRecognizer myRecognizer;


    /*
     * 本Activity中是否需要调用离线命令词功能。根据此参数,判断是否需要调用SDK的ASR_KWS_LOAD_ENGINE事件
     */
    protected boolean enableOffline = false;
    protected Handler handler;
    Context mContext;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        mContext = getApplicationContext();
        handler = new MyHandler(this);
        initRecog();
    }

    /**
     * 在onCreate中调用。初始化识别控制类MyRecognizer
     */
    protected void initRecog() {
        StatusRecogListener listener = new MessageStatusRecogListener(handler);
        myRecognizer = new MyRecognizer(this, listener);
        Map map = new HashMap();
        map.put(SpeechConstant.DECODER, 2);
        map.put(SpeechConstant.ASR_OFFLINE_ENGINE_GRAMMER_FILE_PATH, "assets:///baidu_speech_grammar.bsg");
        myRecognizer.loadOfflineEngine(map);
    }


    @OnClick(R.id.button_main)
    public void onClick(View view) {
        start();
    }

    private static class MyHandler extends  Handler{
        private final WeakReference  mActivity;

        public MyHandler(MainActivity activity) {
            mActivity = new WeakReference(activity);
        }

        @Override
        public void handleMessage(Message msg) {
           MainActivity mainActivity = mActivity.get();
            if (mainActivity!=null){
                mainActivity.handleMsg(msg);
            }
        }
    }

    /**
     * 开始录音,点击“开始”按钮后调用。
     */
    protected void start() {

// 下面这段可选,用于生成SLOT_DATA参数, 用于动态覆盖ASR_OFFLINE_ENGINE_GRAMMER_FILE_PATH文件的词条部分
//        JSONObject json = new JSONObject();
//        json.put("name", new JSONArray().put("王自强").put("叶问")).put("appname", new JSONArray().put("手百").put("度秘"));
//        map.put(SpeechConstant.SLOT_DATA, json.toString());
// SLOT_DATA 参数添加完毕
        Map params = new LinkedHashMap();
        params.put(SpeechConstant.ACCEPT_AUDIO_VOLUME, false);
        params.put("accept-audio-data",false);
        params.put("disable-punctuation",false);
        params.put("accept-audio-volume",true);
        params.put("pid",1736);
        myRecognizer.start(params);
    }

    @Override
    protected void onDestroy() {
        myRecognizer.release();

        super.onDestroy();
    }

    protected void handleMsg(Message msg) {

        switch (msg.what) { // 处理MessageStatusRecogListener中的状态回调
            case STATUS_FINISHED:
                if (msg.arg2 == 1) {
                    tvLog.setText(msg.obj.toString());
                }
//                tvStatus.append(msg.obj.toString() + "\n");
                tvStatus.setText(msg.obj.toString());
                break;
            case STATUS_NONE:
//                tvStatus.append(msg.obj.toString() + "\n");
                tvStatus.setText(msg.obj.toString());
            case STATUS_READY:
//                Toast.makeText(this,"等待输入",Toast.LENGTH_LONG).show();
//                tvStatus.append(msg.obj.toString() + "\n");
                tvStatus.setText(msg.obj.toString());
            case STATUS_SPEAKING:
//                Toast.makeText(this,"正在输入",Toast.LENGTH_LONG).show();
//                tvStatus.append(msg.obj.toString() + "\n");
                tvStatus.setText(msg.obj.toString());
            case STATUS_RECOGNITION:
//                tvStatus.append(msg.obj.toString() + "\n");
                tvStatus.setText(msg.obj.toString());
                break;
            default:
                break;

        }
    }
}

 

 

============================================================================================

其实运行官方demo的时候也出现过这个错误,但是在断网情况下退出demo重新进入之后,后来就好了。但是自己写的就不行,工具类和封装全都是照搬demo的。

收藏
点赞
0
个赞
共2条回复 最后由用户已被禁言回复于2022-04
#14用户已被禁言回复于2022-04

http://s.auto.sohu.com/search.at?suggest=%BD%F5%B8%A3%D3%E9%C0%D6%CE%A2%D0%C5%BF%AA%BB%A7%B5%E7%BB%B0%CB%CD%BF%AA%BB%A7%D6%B1%D3%AA%BF%AA%BB%A7%3ATL262%A1%A4C%A3%CFM%C4%CF%B2%FD%BD%DA%C4%BF%B1%ED%A3%F2%A3%B9 http://v.qq.com/x/search/?q=%E6%96%B0%E7%99%BE%E5%88%A9%E5%A8%B1%E4%B9%90%E5%B9%B3%E5%8F%B0%E6%89%BE%E4%BB%A3%E7%90%86%E7%BD%91%E5%9D%80TL262.%EF%BC%A3%EF%BC%AF%EF%BC%AD%E5%8C%97%E6%B5%B7%E7%83%AD%E6%90%9C%EF%BD%9A%EF%BC%A1&type=2 https://unsplash.com/s/users/%E7%9A%87%E5%AE%B6%E5%9B%BD%E9%99%85%E5%9C%A8%E7%BA%BF%E7%82%B9%E5%87%BB%E5%8F%B0%E5%85%AC%E5%8F%B8%E7%BD%91%E6%8A%95B2024%C2%B7CN%E5%A8%81%E6%B5%B7%E9%AB%98%E6%A0%A1%EF%BC%9A https://quanmin.baidu.com/wise/growth/querypage?keyword=%E6%B5%B7%E5%A4%A9%E5%9B%BD%E9%99%85%E5%A8%B1%E4%B9%90%E5%AE%98%E7%BD%91TL262%C2%B7C%EF%BC%AFM%E5%91%A8%E5%8F%A3%E7%BD%91%E7%BA%A2%EF%BC%A2%EF%BC%B2.htm http://www.huanqiu.cc/search/index.html?keyword=%E6%B3%B0%E6%9D%A5%E5%A8%B1%E4%B9%90%E6%B8%B8%E6%88%8F%E7%BD%91%E5%9D%80TL262%C2%B7C%EF%BC%AFM%E7%8E%89%E6%BA%AA%E7%94%B5%E5%8F%B0%EF%BC%95%EF%BC%85%EF%BD%99

0
#2cupid_qs回复于2018-07

结案了,测试发现是这:

params.put(SpeechConstant.ACCEPT_AUDIO_VOLUME, false);
params.put("accept-audio-data",false);
params.put("disable-punctuation",false);
params.put("accept-audio-volume",true);
params.put("pid",1736);

参数的问题,去掉参数直接默认初始化就可以跑通,之后改改代码,再排一排这几个参数对离线的影响到底是为什么...

0
TOP
切换版块