鸿蒙(OpenHarmony)系统之智能语音部件(1)

本文重点参考:

OpenHarmony/ai_intelligent_voice_framework

一、总体概述

1. 功能简介及架构

智能语音组件包括智能语音服务框架智能语音驱动,主要实现了语音注册语音唤醒相关功能。

智能语音组件架构图如下图所示:

(1)智能语音服务框架

智能语音服务框架支持如下功能:

  • 系统事件监测

开机解锁、亮灭屏等系统事件监测。

  • 并发策略

智能语音业务并发管理。

  • 智能语音业务

语音注册、语音唤醒等智能语音业务处理。

  • 声音触发器

DSP模型加载、DSP算法启停、DSP事件处理。

(2)智能语音驱动

智能语音驱动支持如下功能:

  • 引擎算法

智能语音算法引擎以及事件上报。

  • 设备驱动

DSP模型加载卸载、算法启停、事件上报以及硬件相关通路配置。

2. 基本概念

  • 语音注册

将用户说的唤醒词转换为声学模型以及声纹特征,以便后续的语音唤醒。

  • 语音唤醒

判断当前说话人是否为已注册的特定用户。

  • DSP

数字信号处理器(Digital Signal Processors)。DSP芯片即指能够实现数字信号处理技术的芯片。

 

3. 目录结构

仓库目录结构如下:

/foundation/ai/intelligent_voice_framework  # 智能音频组件业务代码
├── frameworks                                      # 框架代码
│   ├── native                                      # 内部接口实现
│   └── js                                          # 外部接口实现
├── interfaces                                      # 接口代码
│   ├── inner_api                                   # 内部接口
│   └── kits                                        # 外部接口
├── sa_profile                                      # 服务配置文件
├── services                                        # 服务代码
├── LICENSE                                         # 证书文件
├── tests                                           # 开发者测试
└── utils                                           # 公共函数

图片形式:

4. 约束与限制

  • 智能语音服务当前只支持一个唤醒词的注册以及唤醒。

二、接口说明

1. 语音注册接口说明

语音注册接口说明详见下表:

接口名称接口描述
createEnrollIntelligentVoiceEngine(descriptor: EnrollIntelligentVoiceEngineDescriptor): EnrollIntelligentVoiceEngine创建注册引擎。
init(config: EnrollEngineConfig): EnrollIntelligentVoiceEngineCallbackInfo初始化注册引擎。
start(isLast: boolean): EnrollIntelligentVoiceEngineCallbackInfo启动注册。
stop(): void停止注册。
commit(): EnrollIntelligentVoiceEngineCallbackInfo确认注册结果。
setWakeupHapInfo(info: WakeupHapInfo): void设置唤醒应用信息。
setSensibility(sensibility: SensibilityType): void设置灵敏度。
release(): void释放注册引擎。

2. 语音唤醒接口说明

接口名称接口描述
createWakeupIntelligentVoiceEngine(descriptor: WakeupIntelligentVoiceEngineDescriptor): WakeupIntelligentVoiceEngine创建唤醒引擎。
setWakeupHapInfo(info: WakeupHapInfo): void设置唤醒应用信息。
setSensibility(sensibility: SensibilityType): void设置灵敏度。
on(type: 'wakeupIntelligentVoiceEvent', callback: Callback): void订阅唤醒事件。
release(): void释放唤醒引擎。

三、开发实例

1. 语音注册

语音注册流程是用户通过应用的注册界面主动发起的交互流程,主要流程如下:

1)用户启动注册(创建注册引擎并初始化注册引擎)后,进入注册界面;

2)界面提示用户说出唤醒词,用户根据提示说出相应唤醒词(启动注册),界面会让用户再次重复说出唤醒词,直到最后一次;

3)注册完成(确认注册结果)后,注册流程全部完成。

示例代码如下:

// 引入智能音频
import intelligentVoice from '@ohos.ai.intelligentVoice';// 获取智能音频管理服务
var manager = intellVoice.getIntelligentVoiceManager();
if (manager == null) {console.error("Get IntelligentVoiceManager failed.");
} else {console.info("Get IntelligentVoiceManager success.");return;
}// 创建注册引擎
var engine = null;
let engineDescriptor = {wakeupPhrase: '',                            // 设置唤醒词
}
await intellVoice.createEnrollIntelligentVoiceEngine(engineDescriptor).then((data) => {engine = data;console.info('Create EnrollIntelligentVoice Engine finish');
}).catch((err) => {console.error('Create EnrollIntelligentVoice Engine failed, err: ' + err.message);
});
if (engine == null) {console.error('Create EnrollIntelligentVoice Engine failed');return;
}// 初始化注册引擎
let config = {language: "zh", // 中文area: "CN", // 中国
}
engine.init(config).then((data) => {console.info('Init EnrollIntelligentVoice Engine finish');
}).catch((err) => {console.info('Init EnrollIntelligentVoice Engine failed, err: '+ err.message);
});// 启动注册
let isLast = true; // true: 最后一次启动,false: 非最后一次启动,实例为true
engine.start(isLast).then((data) => {console.info('Start enrollment finish');
}).catch((err) => {console.info('Start enrollment failed, err: '+ err.message);
});// 确认注册结果
engine.commit().then((data) => {console.info('Commit enroll result finish');
}).catch((err) => {console.info('Commit enroll result failed, err: '+ err.message);
});// 下发语音唤醒应用信息
let info = {bundleName: "demo", // 应用的bundle name,demo只是个参考例子,具体填写由应用确定abilityName: "demo", // 应用的ability name,demo只是个参考例子,具体填写由应用确定
}
engine.setWakeupHapInfo(info).then((data) => {console.info('Set wakeup hap info finish');
}).catch((err) => {console.info('Set wakeup hap info failed, err: '+ err.message);
});// 释放注册引擎
engine.release().then((data) => {console.info('Release EnrollIntelligentVoice engine success.');
}).catch((err) => {console.info('Release EnrollIntelligentVoice engine failed, err: '+ err.message);
});

2. 语音唤醒

语音唤醒由智能语音组件控制,上层应用只需要调用createWakeupIntelligentVoiceEngine获取唤醒引擎后,注册唤醒事件回调即可。

示例代码如下:

// 获取唤醒引擎
var engine = null;
let engineDescriptor = {needApAlgEngine: true, // 是否需要框架提供ap侧算法引擎wakeupPhrase: '', // 设置唤醒词
}
await intellVoice.createWakeupIntelligentVoiceEngine(engineDescriptor).then((data) => {engine = data;console.info('Create WakeupIntelligentVoice Engine finish');
}).catch((err) => {console.error('Create WakeupIntelligentVoice Engine failed, err: ' + err.message);
});
if (engine == null) {console.error('Create WakeupIntelligentVoice Engine failed');return;
}// 注册事件回调
engine.on('wakeupIntelligentVoiceEvent',(callback) => {console.info('wakeupIntelligentVoiceEvent CallBackInfo:')for (let prop in callback) {console.info('wakeupIntelligentVoiceEvent prop: ' + prop);console.info('wakeupIntelligentVoiceEvent value: ' + callback[prop]);}
});

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/320913.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Go中interface != nil不一定不是nil

摘要: interface{} 值 ! nil不一定不是nil,应使用reflect库判断是否是nil。 测试示例: // todo interface ! nil 不一定 不是nil var value map[string]interface{} reqMap : make(map[string]interface{}) reqMap["key"] valu…

计算机丢失VCRUNTIME140_1.dll怎么办,6个不同方法教你解决问题

一、什么是vcruntime140_1.dll? vcruntime140_1.dll是Visual C Redistributable Packages的一部分,它是Microsoft Visual Studio开发环境中使用的运行时库文件。它包含了许多常用的函数和类,为开发者提供了丰富的功能支持。 二、vcruntime1…

听GPT 讲Rust源代码--compiler(9)

File: rust/compiler/rustc_trait_selection/src/traits/select/mod.rs 在Rust源代码中,rust/compiler/rustc_trait_selection/src/traits/select/mod.rs文件的作用是实现Rust编译器的trait选择器。 首先,让我们逐个介绍这些struct的作用: Se…

小红书12月内容趋势分析

为洞察小红书平台的内容创作趋势及品牌营销策略,新红推出12月月度榜单,从创作者、品牌、热搜词多方面入手,解析月榜数据,为从业者提供参考。 以下为12月部分榜单解析,想要查看更多行业榜单,创作优质内容&am…

走进UI设计的秘密武器!6款软件值得珍藏!

Adobe Photoshop AdobePhotoshop,简称“PS它是一个由Adobesystems开发和发行的图像处理软件。Photoshop主要处理由像素组成的数字图像。使用其大量的编辑和绘图工具,可以有效地编辑图片。PS在图像、图形、文本、视频、出版等方面具有许多功能。 截至20…

SDRAM小项目——SDRAM初始化配置

主要写了SDRAM的初始化模块,注重文档信息的查找,时序图的设计,SDRAM仿真插件的使用。 文档信息: 根据文档说明,SDRAM在使用之前必须先进行初始化 初始化之前要进行100us的延迟,在100us内除了INHIBIT和NOP命…

css sourcemap 源代码映射

vue.config.js css: {// Enable CSS source maps.sourceMap: process.env.NODE_ENV ! production, }重新运行:yarn serve 效果:

在Gradle工程中使用checkstyle来规范你的项目

🌹作者主页:青花锁 🌹简介:Java领域优质创作者🏆、Java微服务架构公号作者😄 🌹简历模板、学习资料、面试题库、技术互助 🌹文末获取联系方式 📝 系列专栏目录 [Java项…

【LLM】自主GPT-4:从ChatGPT到AutoGPT、AgentGPT、BabyAGI、HuggingGPT等

LangChain和LlamaIndex集成趋势后,GPT-4的新兴任务自动化和人工智能代理 ChatGPT和LLM技术的出现是革命性的。这些最先进的语言模型席卷了世界,激励开发人员、爱好者和组织探索集成和构建这些尖端模型的创新方法。因此,LangChain和LlamaIndex…

通往人工智能的 Go 之路

Agency 该库旨在为那些希望通过清晰、高效且符合 Go 语言惯例的方法来探索大型语言模型(LLMs)和其他生成式人工智能的开发人员而设计。 特点 纯 Go 语言:快速、轻量级,静态类型,无需涉及 Python 或 JavaScript编写清晰…

最优化理论期末复习笔记 Part 2

数学基础线性代数 从行的角度从列的角度行列式的几何解释向量范数和矩阵范数 向量范数矩阵范数的更强的性质的意义 几种向量范数诱导的矩阵范数 1 范数诱导的矩阵范数无穷范数诱导的矩阵范数2 范数诱导的矩阵范数 各种范数之间的等价性向量与矩阵序列的收敛性 函数的可微性与展…

Spring中的ApplicationContext和BeanFactory的区别??

ApplicationContext:只要一读取配置文件,默认情况下就会创建对象。 UserServiceImpl: package com.by.service;import com.by.dao.UserDao;/*** 业务层实现类*/ public class UserServiceImpl implements UserService {private UserDao user…