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

Android 获取语音时长 安卓语音识别sdk_百度

下载下来的是一个android工程

Android 获取语音时长 安卓语音识别sdk_json_02

其中有三个module

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

Android 获取语音时长 安卓语音识别sdk_Android 获取语音时长_03

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

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 获取语音时长_04

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

Android 获取语音时长 安卓语音识别sdk_json_05

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

Android 获取语音时长 安卓语音识别sdk_语音识别_06

>>填写基本应用信息

Android 获取语音时长 安卓语音识别sdk_百度_07

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

其实在线识别功能在_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);
}
这样基本在线识别的功能是完成了,但是会发现很多的语句的识别度不是很高,这边的话,百度官方提供了语音识别词库,你可以在你的应用管理中心的应用详情里面设置你的语音识别词库

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

Android 获取语音时长 安卓语音识别sdk_语音识别_08

 

源码链接

GitHub地址

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