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

android 专栏收录该内容
19 篇文章 0 订阅

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

下载下来的是一个android工程

其中有三个module

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

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

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是要用到的

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

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

>>填写基本应用信息

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

其实在线识别功能在_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格式的文本文档

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

 

源码链接

GitHub地址

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

  • 1
    点赞
  • 0
    评论
  • 5
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值