百度语音识别——在线识别

本文介绍了在Android平台上,如何使用百度的语音识别SDK进行开发,包括下载SDK、熟悉源码、初始化、开始识别、回调事件处理、SDK接入等步骤,并探讨了不同集成方法的优劣,展示了开发结果和未来展望。
摘要由CSDN通过智能技术生成



1. 开发背景

    在AI席卷全球时,围绕语音交互的产品之争正愈演愈烈,苹果siri、亚马逊echo这些产品风靡全球的同时,国内外科技巨头、创业团队也在暗流涌动,各种智能音箱以及语音解决方案层出不穷。这种顺势发展的方式,造就了语音交互已经成为人工智能领域最成熟也是落地最快的技术。尤其是深度学习的起势,让语音识别、语音合成以及自然语言处理的发展速度提升到了一个新的高度。
    发展到现在各个公司平台语音识别技术都相当成熟,Android 平台现在主要是基于谷歌、科大讯飞、百度等较为主流的SDK进行开发。谷歌的话,在国内的环境是需要修改,且访问速度慢;科大讯飞的话,虽然也是国内的,但只有一段时间的试用期;最终选择百度,既方便使用,又是白嫖产品。

2. 开发过程

2.1 下载SDK

1)百度搜索 “语音识别技术” 点击第一个超链接进入主页面
在这里插入图片描述
2)主页面菜单栏下 开发与教学=>SDK下载
在这里插入图片描述
3)找到 “语音识别Android SDK” 进行下载,后续也可进入 “使用说明”,查看源码的使用方式。
在这里插入图片描述

2.2 熟悉源码

    源代码提供的是一个在SDK的基础上封装了输入和输出格式的DEMO,主要由app、core、uiasr、uidialog这四个Module组成。其中core为核心且带有SDK的库,其下的 “ActivityMiniRecog类” (精简版识别,带有SDK唤醒运行的最少代码,仅仅展示如何调用)中的在线识别部分也是此次研究的重点。
在这里插入图片描述

参见DEMO中的ActivityMiniRecog类
SDK调用过程(在线识别)如下:

2.2.1 初始化

  • 1.初始化EventManager类
          SDK中,通过工厂创建语音识别的事件管理器。注意识别事件管理器只能维持一个,请勿同时使用多个实例。即创建一个新的识别事件管理器后,之前的那个置为null,并不再使用。
	EventManager asr = EventManagerFactory.create(this, "asr"); 
	// this是Activity或其它Context类
  • 2.自定义输出事件类
          SDK中,需要实现EventListener的输出事件回调接口。该类需要处理SDK在识别过程中的回调事件。可以参考DEMO中对SDK的调用封装。
	EventListener yourListener = new EventListener() {
   
		@Override
		public void onEvent(String name, String params, byte [] data, int offset, int length) {
   
			if(name.equals(SpeechConstant.CALLBACK_EVENT_ASR_READY)){
   
				// 引擎就绪,可以说话,一般在收到此事件后通过UI通知用户可以说话了
			}
			if(name.equals(SpeechConstant.CALLBACK_EVENT_ASR_PARTIAL)){
   
				// 一句话的临时结果,最终结果及语义结果
			}
				// ... 支持的输出事件和事件支持的事件参数见“输入和输出参数”一节
		}
	};
  • 3.注册自己的输出事件类
	asr.registerListener(yourListener);

2.2.2 开始识别/唤醒

  • 1.设置识别/唤醒输入参数
          SDK中,您需要根据文档或者demo确定您的输入参数。DEMO中有UI界面简化选择和测试过程。demo中,在点击“开始录音”按钮后,您可以在界面或者日志中看见ASR_START事件的json格式的参数。
    在这里插入图片描述
  • 2.发送start开始事件
	asr.send(SpeechConstant.ASR_START, json, null, 0, 0);

2.2.3 回调事件

  • 1.开始回调事件
          回调事件在您实现的EventListener中获取。OnEvent方法中, name是输出事件名,params该事件的参数,(data,offset, length)三者一起组成额外数据。如回调的音频数据,从data[offset]开始至data[offset + length] 结束,长度为length。
	public void onEvent(String name, String params, byte [] data, int offset, int length);

2.2.4. 控制识别/唤醒

  • 1.控制停止识别/唤醒,可以向SDK发送停止事件
	asr.send(SpeechConstant.ASR_STOP, null, null, 0, 0); 
	//发送停止录音事件,提前结束录音等待识别结果
  • 2.取消本次识别,可以向SDK发送取消事件
	asr.send(SpeechConstant.ASR_CANCEL null,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值