智能语音电灯-----4---语音识别模块 实现app对语音的识别

1、简介

实现多所说的话进行识别,开灯 、 关灯。
这里通过使用百度的 语音识别 sdk 来实现。

2、百度语音 sdk 简介
1)、官方 文档

百度智能语音网站:http://ai.baidu.com/docs#/

SDK 下载网址:http://ai.baidu.com/sdk

在下载的sdk 中寻找 开发最简单的语音识别的文档,
路径如下:
在这里插入图片描述
当然百度 SDK 里本身 就包含一个可以直接运行的 语音识别 apk ,他包含了很多模块,
而这个文档时一个模块模块的介绍的。

3、根据文档制作的 语音在线识别apk

在这里插入图片描述
点击开始 —>说话 ----> 然后 等待识别

apk 源码 下载连接:
https://download.csdn.net/download/qq_27061049/11032320

4、对代码的进一步修改,识别命令

我们虽然通过百度sdk 可以识别 语音转文字了 ,但是我们还是要提取出来,转化的文字,同时判断是符合我们的命令。

分析代码 我们发现 ,对于语音识别这一块 ,在 ActivityMiniRecog.java 文件中,有回调函数,我们分析发现,是返回的 语音转文字的Json 数据:


    // 基于sdk集成1.2 自定义输出事件类 EventListener 回调方法
    // 基于SDK集成3.1 开始回调事件
    @Override
    public void onEvent(String name, String params, byte[] data, int offset, int length) {
        String logTxt = "name: " + name;


        if (params != null && !params.isEmpty()) {
            logTxt += " ;params :" + params;
        }
        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;
        }
        Log.i(TAG,"返回语音解析: " + params);

        if (params != null && params != "") {
            jsonDataAnalysis.getCommandFromJsonData(params); //如果 不是空的数据 就传递过去
        }
        printLog(logTxt);
    }

比如我们说 你好:

{
	"results_recognition": ["你好"],
	"result_type": "final_result",
	"best_result": "你好",
	"origin_result": {
		"corpus_no": 6668176002664336518,
		"err_no": 0,
		"result": {
			"word": ["你好"]
		},
		"sn": "f8e1b32e-d235-484c-b89c-1108b4b75da3",
		"voice_energy": 24559.5546875
	},
	"error": 0
}

我们发现 只要是能够获取到 best_result 这个属性值 就可以获取到我们说的话,
于是我们添加了 Json 数据解析。
主要功能代码如下:

    public void  getCommandFromJsonData(String str) {
        JSONObject jsonObject = null;  //整体文件是一个对象
        try {
            jsonObject = new JSONObject(str);
            if (jsonObject.has("best_result")) {    //判断 json  对象中有没有这个属性值
                String best_result = jsonObject.getString("best_result");    //根据键值对寻找数据
                Log.i(TAG,"说出的命令是:" + best_result);
                if (best_result.contains("启动")) {
                    Log.i(TAG,"开始启动");
                } else {
                    Log.i(TAG,"无效命令");
                }
            }

        } catch (JSONException e) {
            e.printStackTrace();
        }

    }

实现效果如下:

在这里插入图片描述
到这里我们才实现了 ,真正的 语音转文字,并且识别命令。
我们才能够根据不同的 命令 进行不同的操作。

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值