带你玩转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 ...
随机推荐
- 死锁,互斥锁,递归锁,线程事件Event,线程队列Queue,进程池和线程池,回调函数,协程的使用,协程的例子---day33
1.死锁,互斥锁,递归锁 # ### 死锁 互斥锁 递归锁 from threading import Lock,Thread,RLock #递归锁 import time noddle_lock = ...
- CGI, FastCGI, WSGI, uWSGI, uwsgi一文搞懂
中间件 1.服务器中间件:nginx,apache 2.数据库中间件:介于应用程序和数据库之前的,MyCat 3.消息队列中间件:kafka,rabbitmq,Rocketmq CGI 1.CGI是一 ...
- Elasticsearch系列之-查询
Elasticsearch之-查询 查询分类: 基本查询:使用es内置查询条件进行查询 组合查询:把多个查询组合在一起进行复合查询 过滤:查询的同时,通过filter条件在不影响打分的情况下筛选数据 ...
- AFNetworking整体框架简单整理
一.AFNetworking整体框架是怎样的 1.UIKit集成模块 UIKit 2.请求序列化 Serialization 3.响应序列化 Serialization 4.会话 NSURLSessi ...
- 【Azure Redis 缓存】遇见Azure Redis不能创建成功的问题:至少一个资源部署操作失败,因为 Microsoft.Cache 资源提供程序未注册。
问题描述 在中国区微软云上创建Redis失败.收到的错误消息为: { "code": "DeploymentFailed", "message&quo ...
- 【Azure Developer】Java代码访问Key Vault Secret时候的认证问题,使用 DefaultAzureCredentialBuilder 或者 ClientSecretCredentialBuilder
问题描述 使用Java SDK获取Key Vault Secret机密信息时,需要获取授权.通常是使用AAD的注册应用(Client ID, Tenant ID, Client Secret)来获取 ...
- 【Azure API 管理】Azure API Management在设置 Policy时,如何对URL进行解码呢? 使用 HttpUtility.UrlDecode 出错
问题描述 Azure API Management在设置 Policy时,如何对URL进行解码呢? 使用 HttpUtility.UrlDecode 出错,是否有其他可以对URL解码的方法呢? 使用H ...
- NET项目&DLL反编译&MSSQL监控&VS搜索&注入&上传
知识点 1.NET普通源码&编译源码 2.DLL反编译&后缀文件&指向 3.代码审计-SQL注入&文件上传 ASPX文件 -> CS ASPX.CS DLL反编译 ...
- 新零售SaaS架构:订单履约系统的概念模型设计
订单履约系统的概念模型 订单:客户提交购物请求后,生成的买卖合同,通常包含客户信息.下单日期.所购买的商品或服务明细.价格.数量.收货地址以及支付方式等详细信息. 子订单:为了更高效地进行履约,大订单 ...
- Java核心之细说泛型
泛型是什么? 等你使用java逐渐深入以后会了解或逐步使用到Java泛型.Java 中的泛型是 JDK 5 中引入的功能之一."Java 泛型 "是一个技术术语,表示一组与定义和使 ...
