鸿蒙(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]);
    }
});

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【ONE·MySQL || 数据类型 表的约束】

总言 主要内容:介绍MySQL中的常见数据类型(数值类型、文本二进制类型、时间日期、字符串类型),以及对表的约束(非空约束、默认约束、列描述、零填充约束、自增长约束、主键约束、唯一键约束、外键约束)。  …

详解维吉尼亚密码(附四种攻击策略)

目录 一. 介绍 二. 破解维吉尼亚密码 2.1 频率统计 2.2 提高型频率统计法 2.3 Kasiski攻击法 2.4 重合指数攻击法(index of coincidence method) 三. 小结 一. 介绍 我们知道英语字母的出现频率是有规律的,比如像下表: 掌…

2023-12-23 LeetCode每日一题(移除石子使总数最小)

2023-12-23每日一题 一、题目编号 1962. 移除石子使总数最小二、题目链接 点击跳转到题目位置 三、题目描述 给你一个整数数组 piles ,数组 下标从 0 开始 ,其中 piles[i] 表示第 i 堆石子中的石子数量。另给你一个整数 k ,请你执行下述…

2024任务驱动Java程序设计讲课提纲

文章目录 为何采用任务驱动?任务驱动Java程序设计课程概述项目一:踏上Java开发之旅任务1:安装配置JDK并开发第一个Java程序1、安装JDK2、配置JDK环境变量3、开发第一个Java程序 任务2:搭建Java集成开发环境IntelliJ IDEA1、安装In…

研究:同样的C++模板在多个cpp里出现,编译器是否要重复生成?

2023年就要过去,马上要跨如2024年。祝大家在新的一年,有个好收成。 一直以来不是很确定: 同样的的模板,在各个cpp分别出现,编译器要实现几份? 研究一下。 用命令行的编译方法,参考&#xff1a…

【xdma】 pcie.bar设置

FPGA优质开源项目– PCIE通信 xdma 两者保持一致 FPGA开源项目 – PCIE I/O控制卡 xdma PCIe的XDMA应用 读写部分分为两种,一种是数据的读写,另一种是配置数据的读写,在数据读写部分,DMA通过MIG控制DDR完成数据读写。配置数据…

Ubuntu 22.04 安装ftp实现与windows文件互传

Ubuntu 22.04 安装ftp实现与windows文件互传 1、配置安装 安装: sudo apt install vsftpd -y使能开机自启: sudo systemctl enable vsftpd 启动: sudo systemctl start vsftpd创建ftp工作目录: sudo mkdir -p /home/ftp/uftp…

Elasticsearch-8.11.1 (2+1)HA(高可用)集群部署

目录 一、环境描述 二、安装 ES 2.1 下载Elasticsearch 2.2 解压Elasticsearch 2.3 创建es服务账号/密码 2.3 修改服务器配置 2.4 配置节点 2.4.1 配置说明 2.4.2 配置高可用集群 2.4.2.1 maser节点服务配置 2.4.2.2 node1 节点服务配置 2.4.2.3 node2 节点服务配置…

ARCGIS PRO SDK GeometryEngine处理独立几何图形

1、面积类:pol为Polygon 1).Area:获取几何图形的面积。这是使用二维笛卡尔数学来计算面积的平面测量 double d GeometryEngine.Instance.Area(pol) 2).GeodesicArea:获取几何图形的椭球面积 …

SLAM学习入门--机器学习

文章目录 机器学习逻辑回归(LR)基本原理为什么 LR 要使用 sigmoid 函数?LR 可以用核函数么?为什么 LR 用交叉熵损失而不是平方损失?LR 能否解决非线性分类问题?LR为什么要离散特征?逻辑回归是处…

【JavaScript】垃圾回收与内存泄漏

✨ 专栏介绍 在现代Web开发中,JavaScript已经成为了不可或缺的一部分。它不仅可以为网页增加交互性和动态性,还可以在后端开发中使用Node.js构建高效的服务器端应用程序。作为一种灵活且易学的脚本语言,JavaScript具有广泛的应用场景&#x…

SPI机制原理+使用

一、概述 SPI全称(Service Provider Interface),是JDK内置的一种服务提供发现机制;SPI机制提供了组件发现和注册方式,可以为应用程序提供灵活的插件机制, 主要原理:接口 反射 配置文件。 二、…

软件测试/测试开发丨Python常用数据结构学习笔记

Python常用数据结构 list 列表 列表定义 列表是有序的可变元素的集合,使用中括号[]包围,元素之间用逗号分隔列表是动态的,可以随时扩展和收缩列表是异构的,可以同时存放不同类型的对象列表中允许出现重复元素 列表使用&#x…

python练习2【题解///考点列出///错题改正】

一、单选题 【文件】 *1.【单选题】 ——文件:读取方法 下列哪个选项可以从文件中读取任意字节的内容?(C )A A.read() B.readline() C.readlines() D.以上全部 A\B\C三种方法都是可以读取文件中任意的字节内容的&#xff0…

消息队列基础知识

学一点,整一点,基本都是综合别人的,弄成我能理解的内容 https://blog.csdn.net/BenJamin_Blue/article/details/125946812 https://blog.csdn.net/qq_46119575/article/details/129794304 📌导航小助手📌 生产者-消费者…

JS作用域:全局作用域,函数作用域,块级作用域

JS作用域:全局作用域,函数作用域,块级作用域 背景作用域全局作用域函数作用域块级作用域通过调用栈分析块级作用域开发者工具查看作用域选项卡示例 背景 由于 JavaScript 存在变量提升这种特性,从而导致很多与直觉不符的代码&…

详解数组的轮转

𝙉𝙞𝙘𝙚!!👏🏻‧✧̣̥̇‧✦👏🏻‧✧̣̥̇‧✦ 👏🏻‧✧̣̥̇:Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - :来于“云”的“羽球人”。…

Git 分布式版本控制系统(序章1)

第一章 Git 分布式版本控制系统 为什么学Git? 某些企业面试需要掌握Git,同时,也方便管理自己的Qt项目。 一、Git 客户端下载(Windows) 下载地址 https://gitee.com/all-about-git#git-%E5%A4%A7%E5%85%A8 二、Git 的特点 分支…

vue3引入百度地图(两种方法)

首先要有百度开放平台并进行注册&#xff0c;不懂看这里 ### 第一种方法 地图引入流程 安装vue-baidu-map-3x插件 参考官网地址&#xff1a;快速上手 | vue-baidu-map-3x npm install vue-baidu-map-3x --save 在public/index.html文件中引入 <!-- 百度地图 --> &…

微软开源,全平台通用:Shell 自动补全工具 | 开源日报 No.132

microsoft/inshellisense Stars: 7.6k License: MIT inshellisense 是一个为 Shell 提供 IDE 风格自动补全的工具。它是一个终端本地运行时自动完成&#xff0c;支持 600 多个命令行工具&#xff0c;并且可以在 Windows、Linux 和 macOS 上使用。主要功能包括安装后可通过运行…