ai voice*
第一章 概述*
ai voice 简介*
ai voice集成了蓝牙低功耗(BLE)、轻量级图形库(LVGL)、关键词识别(KWS)、音频输入输出以及Opus解码功能。它通过BLE实现设备间的无线通信,利用LVGL提供直观的用户界面,并通过KWS进行实时语音命令识别。音频模块确保高质量的声音采集和播放,而Opus解码则提供高效的音频处理。这些功能的结合,使应用在多种场景下提供出色的语音交互体验。
ai voice主要功能*
- 支持AI语音交互+驱屏显示
- 支持打断唤醒与大模型接入
- 支持最新的蓝牙BLE 5.4连接
- 支持opus解码播报
第二章 软硬件资源介绍*
1.1 硬件资源介绍*
APUS_DEV_QFN52_V0.5开发板资源简介
1.2 软件资源介绍*
- ai voice目录结构
ai_voice
├── app_system
│ └── app_system_clk.c /* 系统时钟配置 */
├── base
│ ├── ai_audio_in_config.c /* audio in 相关配置 */
│ └── ai_audio_in_config.h
├── config
│ ├── app_config.h /* 本App应用的相关配置,包括mic、kws、audio in等配置 */
│ ├── app_lv_conf.h /* 本APP支持LVGL的相关配置文件,需要支持lvgl的再此配置 */
│ └── sdk_config.h /* sdk的相关配置, 包括Consle、Shell、PM、UAC、BLE等一系列配置 */
└── src
│ ├── app_ble /* ble功能示例 */
│ ├── app_lvgl /* lvgl显示示例 */
│ ├── app_message /* 串口通讯协议 */
│ ├── app_voice /* voice事件处理*/
│ ├── audio_out /* audio out播放功能*/
│ ├── gpio_led /* led示例 */
│ ├── kws /* 模型相关配置功能*/
│ ├── opus_player /* 播报的相关功能,支持opus解码播报 */
│ └── usb /* usb功能 */
├── app.mk
├── main.c /* main函数入口 */
├── readme
第三章 开发板快速体验*
本章简介如下。 测试板子的资源,验证硬件功能。更快熟悉8302 功能快速进行sdk的学习和使用。
套件资源
- 一块8302B dev 开发板
- 1.32"IPS全视角360x360分辨率/圆形彩色液晶显示屏
- 1快串口小板
- 一个喇叭
演示视频:[https://mp.weixin.qq.com/s/HKsvxZA_dhdKWtXMmzk4Jg]
第四章 ai voice 开发指南*
4.1 编译和配置修改*
App和板级选择*
App:ai_voice
board: gx8302b_dev
麦克风选择和配置*
开发板上拥有两个数字麦克风、一个模拟硅麦、一个驻极体模拟麦,可以通过不同的调帽和软件配置进行麦克风测试和验证。
- 驻级体模拟麦(MIC2)
修改apus/platform/boards/gx8302b_dev/board_config.h进行AMIC的硬件配置。
// AMIC
#define BOARD_HAS_AMIC 1 /* 1 打开模拟麦克风 */
#define BOARD_AMIC_TYPE 1 //0: MEMS; 1: ECM /* 0 硅麦 1 驻级体麦 */
#define BOARD_ECM_AMIC_CTRL_PIN P4_1
修改apus/apps/ai_bypass/config/app_config.h进行AMIC的软件配置。
// 麦克风数目 和 参考声道数目 [根据项目需求来配置]
#define CONFIG_MIC_NUM (1)
#define CONFIG_REF_NUM (1)
#define CONFIG_OUT_NUM (3)
// MIC SOURCE 根据项目需求来配置麦克风源,下面几项只能有一个为 1
#define CONFIG_MIC_SOURCE_AMIC (1)
#define CONFIG_MIC_SOURCE_DMIC (0)
#define CONFIG_MIC_SOURCE_IIS (0)
驻级体麦克风的使用开发板需要如下图进行调帽连接
- 模拟硅麦(MIC1)
同上修改BOARD_AMIC_TYPE 类型位0
#define BOARD_AMIC_TYPE 0 //0: MEMS; 1: ECM /* 0 硅麦 1 驻级体麦 */
模拟硅麦的使用开发板需要如下图进行调帽连接
- 数字麦克风(DMIC)
修改apus/platform/boards/gx8302b_dev/board_config.h进行DMIC的硬件配置。
// DMIC
#define BOARD_HAS_DMIC 1 /* 1 打开数字麦克风 */
#define PDM_CLK_PIN P1_0 /* PDM时钟引脚 */
#define PDM_DATA_PIN P1_1 /* PDM数据引脚 */
#define BOARD_DMIC_NUM 2 /* 数字麦克风数量 */
修改apus/apps/ai_bypass/config/app_config.h进行DMIC的软件配置。
// 麦克风数目 和 参考声道数目 [根据项目需求来配置]
#define CONFIG_MIC_NUM (2)
#define CONFIG_REF_NUM (1)
#define CONFIG_OUT_NUM (4)
// MIC SOURCE 根据项目需求来配置麦克风源,下面几项只能有一个为 1
#define CONFIG_MIC_SOURCE_AMIC (0)
#define CONFIG_MIC_SOURCE_DMIC (2)
#define CONFIG_MIC_SOURCE_IIS (0)
数字麦克风的使用开发板需要如下图进行调帽连接
播报与LOADC输出*
目前ai voice 集成opus解码播报的功能。
修改apus/platform/boards/gx8302b_dev/board_config.h进行LOADC的硬件配置。
//LOADC
#define BOARD_HAS_LODAC 1
#define PWN_P_PIN P1_2 //PWN_P
#define PWN_N_PIN P1_3 //PWN_N
// MUTE GPIO
#define BOARD_HAS_LODAC_MUTE 1
#define LODAC_MUTE_PIN P4_0
#define LODAC_MUTE_ENABLE_LEVEL (0)
打开apus/apps/ai_bypass/config/app_config.h进行播报的软件配置。
#define CONFIG_OPUS_PLAYER
LOADC的使用开发板需要如下图进行调帽连接和喇叭的连接。
注意: 播报的音频的单独烧录到Flash 3M 的起始地址上的,可以查看文件apus/apps/ai_voice/readme文件。
在liunx烧录播报音频tts.bin
cd apus
sudo ./tools/bootx/bootx -m apus -t u -c "download 0xF00000 apps/ai_voice/src/opus_player/tts/apus_tts.bin;reboot"
4.2 KWS开发*
指令词修改*
针对客户有不同的短指令需求,需要能做到自定义配置指令词。目前不支持自定义修改,可以联系国芯微工程师进行评估与提供。
模型切换*
- 在apus/apps/ai_voice/src/kws预置了三个模型包供客户使用体验。例如切换Alexa的模型包
model_fst
├── bunkws_alexa /* Alexa英文模型 */
├── bunkws_cigarettes_v010 /* cigarettes英文模型 */
├── viva_general_asr_deng_069_8_0126 /* 小艾小艾中文模型 */
- 切换不同的模型修改,需要修改apus/apps/ai_voice/app.mk 和 apus/subsys/vpa/algorithm_package/olab_lion_lib/olab_lion_lib.mk
语言模型, 含有 BUNKWS 表示是 bunkws 的语言模型,stride 为 40ms,需要同步修改 app_config.h 的 CONFIG_ADUIO_IO_PCM_FRAME_NUM_PER_CONTEXT
# BUILD_MODEL_FST_VIVA_GENERAL_ASR_DENG_069_8_0126 := 1
# BUILD_MODEL_FST_BUNKWS_CIGARETTES_V010 := 1
# BUILD_MODEL_FST_BUNKWS_ALEXA := 1
# 声学模型, 含有 BUNKWS 表示是 bunkws 模型,stride 为 40ms
# BUILD_VUI_KWS_ENGINE_GENERAL_ASR_V011 := 1
BUILD_VUI_KWS_ENGINE_GENERAL_ASR_V012 := 1
# BUILD_VUI_KWS_ENGINE_GENERAL_ASR_V013 := 1
# BUILD_VUI_KWS_ENGIN_BUNKWS_CIGARETTES_V010 := 1
# BUILD_VUI_KWS_ENGIN_BUNKWS_ALEXA_V350 := 1
唤醒效果优化或事件ID定义*
如果需要对某个指令词唤醒效果做优化使其体验效果有提升,或者针对某个指令词事件id 做区分和修改,可以进行相关的修改。
例如apus/apps/ai_voice/src/kws/model_fst/viva_general_asr_deng_069_8_0126/kws_list.h
const VUI_KWS_PARAM g_kws_param_list[] = {
...
{"你好智灯", {110, 63, 59, 26, 189, 64, 31, 49}, 8, 820, 100, 1},
{"小艾小艾", {187, 81, 7, 12, 187, 81, 7, 12}, 8, 857, 100, 1},
{"把灯打开", {28, 5, 31, 49, 31, 5, 107, 9}, 8, 783, 101, 0},
...
};
例如: {"小艾小艾", {187, 81, 7, 12, 187, 81, 7, 12}, 8, 857, 100, 1}解析
关键词:小艾小艾
关键词label:{187, 81, 7, 12, 187, 81, 7, 12}
关键词label长度:8
灵敏度阈值:857 /* 可以进行降低或者升高来修改灵敏度 */
event id:100 /* 可自定义 */
major:1 /* 唤醒词标志 */