跳转至

SDK介绍*

目前 ovp_aiot 支持了两套应用方案,我们称其为:

  • 可配置 ASR 方案:可通过与 viva 配合,轻松定义和配置语音指令词、串口协议、TTS 播报以及方言自学习,实现真正的“0代码”开发。
  • 离在线大模型方案:可通过参考 大模型方案概述 中相关文档,实现一套完整的语音交互解决方案,lightning 为 LN882H 芯片的实现参考。

1. ovp_aiot介绍*

1.1. 软件框架*

应用 (APP)

  • 实现具体的业务逻辑和用户交互
  • 处理语音识别结果并执行相应动作
  • 管理 LED、按键、串口通信等外设交互
  • 典型应用:offline_asr_app(可配置 ASR 方案APP)、smartbot_app(离在线大模型方案APP)

运行模式(Framework)

  • 根据不同需求,初始化相对应的 VPA 功能,并将 VPA 的返回数据推送给 APP
  • 典型模式:ovp_mode_offline_asr(可配置 ASR / 离在线大模型 都在用的KWS唤醒模式),bypass(直通VPA不处理的模式)

OVP 公共模块 (Common)

  • 应用核心: 提供事件驱动机制,处理应用事件循环
  • 公共模块: 提供系统初始化、内存管理、音频输入输出、TTS播放等通用功能

VPA 语音处理 (VPA)

  • 模式管理器: 管理系统工作模式切换(离线ASR、降噪、录音等)
  • VPA Process: 语音处理引擎的顶层接口,管理处理流程
  • VMA Modules: 语音算法模块(AEC回声消除、降噪、特征提取等)
  • VUI Engines: 语音交互引擎(KWS关键词识别、VAD语音检测、SED声音事件检测等)

驱动层 (Driver)

  • HAL: 硬件抽象层,提供统一的硬件访问接口
  • Fornax Drivers: 针对 GX8005/GX8006 芯片的底层驱动实现

硬件层 (Hardware)

  • GX8005/GX8006 芯片硬件资源

1.2. 目录结构*

1.2.1. 顶层目录结构*

ovp_aiot/
ovp_aiot$ tree -L 1
.
├── 3rdparty        # 第三方代码
├── app             # 应用代码
├── arch            # 启动代码,应用开发无需关心此目录
├── boards          # 板级配置代码,根据硬件进行配置,一般无需修改
├── configs         # 默认配置
├── drivers         # 驱动代码
├── include         # 公共头文件
├── lib             # 库文件
├── ovp             # 离线语音处理及框架调用 *
├── scripts         # 公共脚本
├── tools           # 辅助工具
├── utility         # 公用代码
├── Kconfig         # 编译配置源码
├── Makefile
└── README.md

1.2.2. 核心目录结构*

ovp/
ovp$ tree -L 2
.
├── app_core
│   ├── app_core.mk
│   ├── ovp_app_core.c      # app core,app框架核心代码
│   ├── ovp_app_core.h
│   └── ovp_app.h
├── common
│   ├── audio_in            # audio in 模块
│   ├── countdown           # 提供一个简单的倒计时接口,可用于超时判断
│   ├── custom_space        # flash 读写封装
│   ├── Kconfig
│   ├── kws_uart_report     # 配合viva,实现串口指令上报
│   ├── log.h               # 日志头文件
│   ├── Makefile
│   ├── ota                 # 双备份 OTA
│   ├── ovp_buffer.c        # 流水线buffer管理接口
│   ├── ovp_buffer.h
│   ├── queue.c             # 队列
│   ├── queue.h
│   ├── ringbuf.c           # 环形缓冲区
│   ├── ringbuf.h
│   ├── self_learning       # 配合viva,实现自学习
│   ├── system_init.c       # 系统初始化
│   ├── system_init.h
│   ├── tts_play            # 配合viva,实现 opus tts 播放,调用voice_player实现(控制音量时需调用上层tts_play模块的接口)
│   ├── uart_message        # 比较旧的一份串口协议
│   ├── uart_record         # 使用 uart_message 实现的串口录音
│   ├── uart_smartbot       # WiFi大模型串口协议
│   ├── uart_tts_reply      # 配合viva,实现串口指令响应
│   ├── viva_resource       # 配合viva,解析viva生成的resource.bin文件
│   ├── voice_player        # opus/pcm 播放器
│   └── vpa_helper.c
├── Kconfig
├── main.c                  # 系统初始化与主循环
├── Makefile
├── ovp_mode_bypass.c
├── ovp_mode.c
├── ovp_mode.h
├── ovp_mode_idle.c
├── ovp_mode_nn_denoise.c
├── ovp_mode_offline_asr.c  # 离线asr模式,该模式调用app core接口驱动app框架,调用 vpa 处理语音降噪、唤醒跟识别
└── vpa                     # 处理语音降噪、唤醒跟识别
    ├── example             # 示例算法包
    ├── Kconfig
    ├── olab_panda          # 默认算法包
    └── vpa.mk

1.3. 数据流介绍*

SDK数据流1 SDK数据流2 SDK数据流3

2. viva 介绍*

viva 是一款功能强大的配置工具,专为简化 ovp_aiot 低功耗离线语音识别 SDK 的开发而设计。

通过 viva,用户可以轻松定义和配置语音指令词、串口协议、TTS 播报以及方言自学习,实现真正的“0代码”开发。

有关使用说明可见 SDK 下 Documentation 目录。

3. lightning 介绍*

lightning 是针对 LN882H 芯片开发的SDK,应用与 GX8006 + LN882H 大模型方案,开发方案位于 SDK project/ln_model_public

方案主要包含三大块:

一是云端对接,即和云端之间的音频双向交互,以及一些控制消息的传输

二是和GX8006语音芯片的交互,即基于串口的双向音频传输及流控,相关控制指令的发送,例如配置播放参数、设置音量等

三是给出了一套授权和OTA,以及基于MCP实现控制的示例