admin管理员组

文章数量:1654379

在线识别语音技术

  • 1. 开发背景
  • 2. 开发过程
    • 2.1 下载SDK
    • 2.2 熟悉源码
      • 2.2.1 初始化
      • 2.2.2 开始识别/唤醒
      • 2.2.3 回调事件
      • 2.2.4. 控制识别/唤醒
      • 2.2.5. 事件管理器退出
    • 2.3 SDK接入
      • 2.3.1 导入core 模块
      • 2.3.2 配置app依赖core
      • 2.3.3 测试及解决运行问题
      • 2.3.4 集成方法对比
    • 2.4 基于SDK集成开发
      • 2.4.1 配置AndroidManifest.xml 文件
        • a.设置权限
        • b.设置APP_ID, APP_KEY, SECRET_KEY及注意点
      • 2.4.2 Main.java
  • 3. 开发结果
    • 3.1.效果图
    • 3.2.简单展望


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<

本文标签: 在线语音识别