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

相关推荐

  1. OpenHarmony开源鸿蒙开发

    2024-01-01 07:40:02       59 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-01 07:40:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-01 07:40:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-01 07:40:02       87 阅读
  4. Python语言-面向对象

    2024-01-01 07:40:02       96 阅读

热门阅读

  1. Prometheus监控mysql

    2024-01-01 07:40:02       61 阅读
  2. 民营银行数字化安全运营的思考

    2024-01-01 07:40:02       52 阅读
  3. 编程笔记 html5&css&js 017 HTML样式

    2024-01-01 07:40:02       48 阅读
  4. UntiyShader(六)Unity提供的Cg/HLSL语义

    2024-01-01 07:40:02       91 阅读
  5. C++的一些知识

    2024-01-01 07:40:02       49 阅读
  6. python SVM 保存和加载模型参数

    2024-01-01 07:40:02       59 阅读
  7. C 多维数组、特殊字符和字符串函数详解

    2024-01-01 07:40:02       57 阅读
  8. 第12课 循环综合举例

    2024-01-01 07:40:02       43 阅读
  9. MySQL5.7服务器命令选项

    2024-01-01 07:40:02       41 阅读
  10. MySQL安装与配置

    2024-01-01 07:40:02       60 阅读
  11. CSS Grid 和 Flexbox

    2024-01-01 07:40:02       63 阅读
  12. 前端学习笔记 2:Vue

    2024-01-01 07:40:02       48 阅读
  13. Linux上使用Certbot生成免费SSL证书

    2024-01-01 07:40:02       67 阅读
  14. 2023年12月记录内容管理

    2024-01-01 07:40:02       48 阅读
  15. 设计模式之观察者模式

    2024-01-01 07:40:02       56 阅读