admin管理员组文章数量:1654386
在线识别语音技术
- 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<
版权声明:本文标题:百度语音识别——在线识别 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dongtai/1729660736a1209641.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论