android 百度语音识别sdk集成之在线识别功能

一.首先去官网https://ai.baidu.com/sdk#asr下载SDK

android 百度语音识别sdk集成之在线识别功能

下载下来的是一个android工程

android 百度语音识别sdk集成之在线识别功能

其中有三个module

当然其中也有百度自己的文档,在doc_integration_....文件夹中,也是很直接明了的,本人就是通过这三个文档进行集成以及功能实现的

android 百度语音识别sdk集成之在线识别功能

具体的集成过程小编这边就不多仔细讲解了,可以直接去看这三个文档,我这边就稍微说一下这三个文件的主要是讲的基本内容吧

1._helloworld 文档主要是讲怎样集成语音识别的sdk,实现一个精简版的语音识别,按照它所给的步骤可以完成基本的sdk集成,以及简单的在线识别的功能,可以判断你的sdk是否集成成功

2._TTS文档主要是告诉你怎样集成sdk以及在自己的工程如何实现语音识别

3._demonstration文档主要是针对你所下载下来的工程Demo的功能介绍介绍

二.用你自己的百度账号去登陆控制台https://console.bce.baidu.com/?fromai=1#/aip/overview注册你应用的

AppID,API Key ,Secret Key,这三个参数是你集成sdk是要用到的

android 百度语音识别sdk集成之在线识别功能

这个操作很简单在控制台中选中语音识别一栏

android 百度语音识别sdk集成之在线识别功能

选中应用列表>>创建应用

android 百度语音识别sdk集成之在线识别功能

>>填写基本应用信息

android 百度语音识别sdk集成之在线识别功能

三.实现在线识别以及精确地识别自己的所需要词库

其实在线识别功能在_TTS文档中已经详细讲过了,我这边直接把实现代码拿出来

1.进行EventManager初始化

// 基于sdk集成1.1 初始化EventManager对象
asr = EventManagerFactory.create(this, "asr");
// 基于sdk集成1.3 注册自己的输出事件类
asr.registerListener(this); //  EventListener 中 onEvent方法

2.开始识别的方法

 private void start() {
        Map<String, Object> params = new LinkedHashMap<String, Object>();
        String event = null;
        event = SpeechConstant.ASR_START; // 替换成测试的event

        if (enableOffline) {
            params.put(SpeechConstant.DECODER, 2);
        }
        // 基于SDK集成2.1 设置识别参数
        params.put(SpeechConstant.ACCEPT_AUDIO_VOLUME, false);
        // 请先使用如‘在线识别’界面测试和生成识别参数。 params同ActivityRecog类中myRecognizer.start(params);
        // 复制此段可以自动检测错误
        (new AutoCheck(getApplicationContext(), new Handler() {
            public void handleMessage(Message msg) {
                if (msg.what == 100) {
                    AutoCheck autoCheck = (AutoCheck) msg.obj;
                    synchronized (autoCheck) {
                        String message = autoCheck.obtainErrorMessage(); // autoCheck.obtainAllMessage();
                        Log.e("message", message);
//                        txtLog.append(message + "\n");
                        ; // 可以用下面一行替代,在logcat中查看代码
                        // Log.w("AutoCheckMessage", message);
                    }
                }
            }
        }, enableOffline)).checkAsr(params);
        String json = null; // 可以替换成自己的json
        json = new JSONObject(params).toString(); // 这里可以替换成你需要测试的json
        asr.send(event, json, null, 0, 0);
        Log.e("message", json);
    }

3.停止识别的方法

private void stop() {
    Log.e("message", "停止识别:ASR_STOP");
    asr.send(SpeechConstant.ASR_STOP, null, null, 0, 0); //
}

4.实现对语音识别的监听

implements EventListener
 @Override
    public void onEvent(String name, String params, byte[] data, int offset, int length) {
        String logTxt = "name: " + name;
        if (!isEnd && name.equals("asr.end")) {
            isEnd = true;
        }
        if (isEnd && name.equals("asr.partial")) {
            isEnd = false;
            logTxt += " ;params :" + params;
            try {
                JSONObject jsonObject = new JSONObject(params);
                String results_recognition = jsonObject.getString("results_recognition");
                Toast.makeText(this, results_recognition, Toast.LENGTH_LONG).show();
                Log.e("result", results_recognition);
            } catch (JSONException e) {
                e.printStackTrace();
            }

        }

        if (name.equals(SpeechConstant.CALLBACK_EVENT_ASR_EXIT)) {
            if (isClose==false)
            start();
        }


        if (name.equals(SpeechConstant.CALLBACK_EVENT_ASR_PARTIAL)) {
            if (params != null && params.contains("\"nlu_result\"")) {
                if (length > 0 && data.length > 0) {
                    logTxt += ", 语义解析结果:" + new String(data, offset, length);
                }
            }
        } else if (data != null) {
            logTxt += " ;data length=" + data.length;
        }
//        printLog(logTxt);
        Log.e("message1", logTxt);
    }

5.注销

@Override
protected void onDestroy() {
    super.onDestroy();
    // 基于SDK集成5.2 退出事件管理器
    // 必须与registerListener成对出现,否则可能造成内存泄露
    asr.unregisterListener(this);
}


这样基本在线识别的功能是完成了,但是会发现很多的语句的识别度不是很高,这边的话,百度官方提供了语音识别词库,你可以在你的应用管理中心的应用详情里面设置你的语音识别词库这边只需要上传一个txt格式的文本文档

下面是示例,这样的话,就通过语音会优先识别你所想要的语句了

android 百度语音识别sdk集成之在线识别功能

 

源码链接

下一篇会写一个关于离线识别的代码