当前位置: 首页 > news >正文

带你玩转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.sohdc_std.exe file send libvoiceassistant_service.z.so /system/lib/libvoiceassistant_service.z.sohdc_std.exe file send libpocketsphinx.z.so /system/lib/module/libpocketsphinx.z.sohdc_std.exe file send libps_vad.z.so /system/lib/module/libps_vad.z.sohdc_std.exe file send libvoicecloud.z.so /system/lib/libvoicecloud.z.sohdc_std.exe file send voice_assistant_service.cfg /system/etc/init/#在系统/system/etc/下,创建目录pocketsphinx; 创建目录命令: mkdir /system/etc/pocketsphinxhdc_std.exe file send voice_tip.mp3 /system/etc/pocketsphinx/hdc_std.exe file send zh.tar /system/etc/pocketsphinx/#在OpenHarmony系统中解压zh.tartar 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项目功能应该有了初步的了解。

为了帮助到大家能够更有效的学习OpenHarmony 开发的内容,下面特别准备了一些相关的参考学习资料:

OpenHarmony 开发环境搭建:https://qr18.cn/CgxrRy

《OpenHarmony源码解析》:https://qr18.cn/CgxrRy

  • 搭建开发环境
  • Windows 开发环境的搭建
  • Ubuntu 开发环境搭建
  • Linux 与 Windows 之间的文件共享
  • ……

系统架构分析:https://qr18.cn/CgxrRy

  • 构建子系统
  • 启动流程
  • 子系统
  • 分布式任务调度子系统
  • 分布式通信子系统
  • 驱动子系统
  • ……

OpenHarmony 设备开发学习手册:https://qr18.cn/CgxrRy

在这里插入图片描述

OpenHarmony面试题(内含参考答案):https://qr18.cn/CgxrRy

相关文章:

  • SpringBoot基础详解
  • 指针变量加1为什么地址加了4?
  • Python01:初入Python(Mac)
  • 【计算机视觉(3)】
  • Docker 安装最新版MongoDB 限制内存 配置权限
  • 电影《朝云暮雨》观后感
  • SW 草图明显显示
  • C++---运算符重载
  • VUE3好看的酒网站模板源码
  • [猫头虎分享21天微信小程序基础入门教程]第13天:小程序的表单与用户输入处理
  • 9.6 Go语言入门(数组、切片和指针)
  • 深度学习之基于YOLOV5安全帽检测系统
  • k8s基础命令
  • 执行sql脚本——kettle开发03
  • 《深入解析:近邻算法的原理、实现与应用》
  • 03Go 类型总结
  • android图片蒙层
  • CentOS6 编译安装 redis-3.2.3
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • echarts花样作死的坑
  • flask接收请求并推入栈
  • gulp 教程
  • JavaWeb(学习笔记二)
  • Nacos系列:Nacos的Java SDK使用
  • PHP CLI应用的调试原理
  • Promise初体验
  • SpiderData 2019年2月16日 DApp数据排行榜
  • Webpack 4 学习01(基础配置)
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 扑朔迷离的属性和特性【彻底弄清】
  • 让你的分享飞起来——极光推出社会化分享组件
  • 入门到放弃node系列之Hello Word篇
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 自定义函数
  • linux 淘宝开源监控工具tsar
  • Mac 上flink的安装与启动
  • 阿里云API、SDK和CLI应用实践方案
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​​​【收录 Hello 算法】9.4 小结
  • ​14:00面试,14:06就出来了,问的问题有点变态。。。
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • ​Spring Boot 分片上传文件
  • # windows 运行框输入mrt提示错误:Windows 找不到文件‘mrt‘。请确定文件名是否正确后,再试一次
  • ###C语言程序设计-----C语言学习(3)#
  • #100天计划# 2013年9月29日
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • (zhuan) 一些RL的文献(及笔记)
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (三)Kafka离线安装 - ZooKeeper开机自启