带你玩转OpenHarmony AI:打造智能语音子系统
简介
AI时代,智者当先,判断一个终端设备是否智能,语音能力是必不可缺的。智能家居、智慧厨房、智能汽车等等,一切衣食住行都在往智能方向发展,那我们该如何在OpenAtom OpenHarmony(简称“OpenHarmony”)系统现有的能力下,搭建一套完整的语音子系统呢?
本文介绍了博泰车联网的研发同学如何搭建一套属于OpenHarmony的语音子系统CarVoiceAssistant,并以车载交互的形态研发语音助理项目的过程。
效果展示
开发环境
硬件平台:DAYU200
系统版本:OpenHarmony 3.1 Release
开发语言:C++,JS,eTS
IDE:VS Code、DevEco Studio
功能介绍
交互流程介绍
本样例包含两个关键能力库:QGWebRTCVAD,用作有效音频检测和截取;QGPocketSphinx,用作唤醒词训练和识别,主要流程如下:
设备唤醒之后,需要持续采集用户音频数据,并传输给博泰QingAI云端,做持续识别和最终语义识别,识别之后客户端根据语义做具体动作执行 。
两步带你实现语义助理集成
1.语音子系统集成
(1)下载语音助理项目代码
(2)解压【data.zip】文件(../../dev/team_x/PATEO_CarVoiceAssistant/data.zip)
(3)使用hdc工具将data中的文件发送到OpenHarmony系统中
- #1. 将动态库和资源文件发送到OpenHarmony系统中
- # 如果提示Read only system;进入OH系统后执行:"mount -o rw,remount /"命令后再发送文件
- hdc_std.exe file send voice_assistant_service.xml /system/profile/
- hdc_std.exe file send libcarvoiceassistant.z.so /system/lib/module/libcarvoiceassistant.z.so
- hdc_std.exe file send libvoiceassistant_service.z.so /system/lib/libvoiceassistant_service.z.so
- hdc_std.exe file send libpocketsphinx.z.so /system/lib/module/libpocketsphinx.z.so
- hdc_std.exe file send libps_vad.z.so /system/lib/module/libps_vad.z.so
- hdc_std.exe file send libvoicecloud.z.so /system/lib/libvoicecloud.z.so
- hdc_std.exe file send voice_assistant_service.cfg /system/etc/init/
- #在系统/system/etc/下,创建目录pocketsphinx; 创建目录命令: mkdir /system/etc/pocketsphinx
- hdc_std.exe file send voice_tip.mp3 /system/etc/pocketsphinx/
- hdc_std.exe file send zh.tar /system/etc/pocketsphinx/
- #在OpenHarmony系统中解压zh.tar
- tar xvf zh.tar
- #确保/system/etc/pocketsphinx/下文件目录结构如下:
- ├── zh
- │ ├── zh
- │ │ ├── feat.params
- │ │ ├── feature_transform
- │ │ ├── mdef
- │ │ ├── means
- │ │ ├── mixture_weights
- │ │ ├── noisedict
- │ │ ├── transition_matrices
- │ │ └── variances
- │ ├── zh_cn.dic
- │ └── zh_cn.lm.bin
- ├── voice_tip.mp3
- #重启系统
2.语音助理App集成
(1)引入语音助理声明文件
- import carvoiceassistant from '@ohos.carvoiceassistant'
- // 获取语音助理管理类
- let voiceManager = carvoiceassistant.getManager();
(2)开启唤醒
- voiceManager.enableWakeUp()
(3)注册热词
- voiceManager.registerHotwords(JSON.stringify(hotwords))
(4)经纬度设置,用于云语音定位地理位置;例如“今天天气怎么样?”语义可以返回设置的经纬度地区的天气信息
- voiceManager.setCoord(23.025978, 113.754969)
(5)监听回调,可以监听识别状态、语义解析回调、TTS播报状态
- voiceManager.on(carvoiceassistant.EventType.VoiceAssistantEventTypeRecognizeStateChanged, (err, data) => {
- this.isRecognizing = data['isRecognizing']
- if (this.isRecognizing) {
- this.voiceText = "我正在听..."
- } else if (this.voiceText == "我正在听...") {
- this.voiceText = ''
- }
- })
- voiceManager.on(carvoiceassistant.EventType.VoiceAssistantEventTypeAsrResult, (err, data) => {
- let json: AsrModel = JSON.parse(data['result'])
- ...
- })
- voiceManager.on(carvoiceassistant.EventType.VoiceAssistantEventTypeTTSPlayStateChanged, (err, data) => {
- let isPlaying = data["isPlaying"]
- if (isPlaying == false) {
- if (this.needDeclare) {
- this.isUserStopRecognizing = false;
- this.needDeclare = false;
- voiceManager.startRecognize();
- }
- this.voiceText = '';
- }
- })
- }
(6)识别接口
- voiceManager.startRecognize(); //开始识别
- voiceManager.stopRecognize(); //停止识别
以上步骤完成后,你也就完成了OpenHarmony系统下语义能力集成。
总结
通过本篇文章介绍,您对OpenHarmony系统下CarVoiceAssistant项目功能应该有了初步的了解。如果您对本篇文章内容以及所实现的Demo感兴趣,可以根据本篇文章介绍自行下载CarVoiceAssistant源码进行研究和使用。同时也欢迎更多开发者与我们共享开发成果,分享技术解读与经验心得。
OpenHarmony PATEO_CarVoiceAssistant仓库地址
https://gitee.com/openharmony-sig/knowledge_demo_travel/tree/master/docs/PATEO_CarVoiceAssistant
参考链接
博泰OpenHarmony语音助理
https://gitee.com/openharmony-sig/knowledge_demo_travel/tree/master/docs/PATEO_CarVoiceAssistant
OpenHarmony知识体系工作组
https://gitee.com/openharmony-sig/knowledge
带你玩转OpenHarmony AI:打造智能语音子系统的更多相关文章
- AI中台——智能聊天机器人平台的架构与应用(分享实录)
内容来源:宜信技术学院第3期技术沙龙-线上直播|AI中台——智能聊天机器人平台 主讲人:宜信科技中心AI中台团队负责人王东 导读:随着“中台”战略的提出,目前宜信中台建设在思想理念及架构设计上都已经取 ...
- jQuery打造智能提示插件二(可编辑下拉框)
在上一篇 jQuery打造智能提示插件 上改进,增加下拉按钮,修复点击下拉区域外不隐藏BUG 效果 下拉按钮素材: js封装,注意红色部分为BUG修复,然后传入boxwidth不带px: /* /// ...
- Google发布机器学习平台Tensorflow游乐场~带你玩神经网络(转载)
Google发布机器学习平台Tensorflow游乐场-带你玩神经网络 原文地址:http://f.dataguru.cn/article-9324-1.html> 摘要: 昨天,Google发 ...
- 带新手玩转MVC——不讲道理就是干(上)
带新手玩转MVC——不讲道理就是干(上) 前言:这几天更新了几篇博客,都是关于Servlet.JSP的理解,后来又写了两种Web开发模式,发现阅读量还可以,说明JSP还是受关注的,之前有朋友评论说JS ...
- 带你玩转Visual Studio
带你玩转Visual Studio 带你新建一个工程 工程目录下各文件的含义 解决方案与工程 在这之前先了解一个概念:解决方案与工程. 解决方案(Solution):一个大型项目的整体的工作环境: 工 ...
- 来吧!带你玩转 Excel VBA
来吧!带你玩转 Excel VBA 从错失良机到艰辛的DOS征程,从坎坷购机自学路到转机起程,从爱好到事业,他从一个完全不懂电脑的人到VBA高级应用者,一切全是自学…… 我是罗刚君,来自四川的一个小县 ...
- 转: 带你玩转Visual Studio——带你理解多字节编码与Unicode码
上一篇文章带你玩转Visual Studio——带你跳出坑爹的Runtime Library坑帮我们理解了Windows中的各种类型C/C++运行时库及它的来龙去脉,这是C++开发中特别容易误入歧途的 ...
- iOS开发——高级UI&带你玩转UITableView
带你玩装UITableView 在实际iOS开发中UITableView是使用最多,也是最重要的一个控件,如果你不会用它,那别说什么大神了,菜鸟都不如. 其实关于UItableView事非常简单的,实 ...
- acdream 瑶瑶带你玩激光坦克 (模拟)
瑶瑶带你玩激光坦克 Time Limit: 2000/1000MS (Java/Others) Memory Limit: 256000/128000KB (Java/Others) Submi ...
- Android SurfaceView实战 带你玩转flabby bird (下)
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/43063331,本文出自:[张鸿洋的博客] 1.概述 在Android Surfa ...
随机推荐
- .net core6 Log4记录日志
一.引言 .net core6在文件方面是精简了,所以配置方面也发生了部分变化:下面记录下.net core6中怎么配置Log4 进行日志记录. 二.项目创建 1).首先引用两个包:在Nuget中引入 ...
- 【Java复健指南03】递归思想
[递归] 递归重要规则 1.执行一个方法时,就创建一个新的受保护的独立空间(栈空间) 方法的局部变量是独立的,不会相互影响,比如n变量 如果方法中使用的是引用类型变量(比如数组,对象),就会共享该引用 ...
- 【Azure App Service for Linux】NodeJS镜像应用启动失败,遇见 RangeError: Incorrect locale information provided
问题描述 在App Service For Linux 中,部署NodeJS应用,应用启动失败. 报错信息为: 2023-08-29T11:21:36.329731566Z RangeError: I ...
- nebula-br local-store 模式,快速搭建主备集群实践
因为线上图数据库目前为单集群,数据量比较大,有以下缺点: 单点风险,一旦集群崩溃或者因为某些查询拖垮整个集群,就会导致所有图操作受影响 很多优化类但会影响读写的操作不好执行,比如:compact.ba ...
- python执行JavaScript代码出现编码问题的解决方案
当我们安装好nodejs环境,想在python代码中去调用JavaScript代码,常常会出现编码的问题. 举个例子: python代码如下: 点击查看代码 import execjs f = ope ...
- spark读取和处理zip、gzip、excel、等各种文件最全的技巧总结
一.当后缀名为zip.gzip,spark可以自动处理和读取 1.spark非常智能,如果一批压缩的zip和gzip文件,并且里面为一堆text文件时,可以用如下方式读取或者获取读取后的schema ...
- elementPlus配合vue-router搭建后台系统菜单模块
设置menuType来区分菜单类型 /** * @params menuType * -1 一般为首页 / -> /home 只显示第一个子项 * -2 为无子菜单的菜单项 /config -& ...
- Sharding-JDBC源码解析与vivo的定制开发
作者:vivo IT 平台团队 - Xiong Huanxin Sharding-JDBC是在JDBC层提供服务的数据库中间件,在分库分表场景具有广泛应用.本文对Sharding-JDBC的解析.路由 ...
- spring mvc 给action添加事务不成功的原因
spring springMVC ation事务管理 自己单独做了个小网站 但是发现action事务不起作用了 但是如果用service层就没问题 找了很多办法没解决 最后自己解决了 其实就是一个加载 ...
- chm之已取消到该网页的导航解决办法
1. 右键单击该 CHM 文件,然后单击"属性". 2. 单击"取消阻止"或者"解除锁定". 3. 双击此 .chm 文件以打开此文件.