178 lines
4.8 KiB
Markdown
178 lines
4.8 KiB
Markdown
# AI小智自定义唤醒词移植说明
|
||
|
||
## 概述
|
||
|
||
本项目已成功将新版AI小智的自定义唤醒词功能移植到旧版项目中,现在支持两种唤醒词模式:
|
||
- **传统唤醒词模式**:使用固定的唤醒词模型(原有功能)
|
||
- **自定义唤醒词模式**:支持用户自定义唤醒词(新增功能)
|
||
|
||
## 功能特性
|
||
|
||
### 自定义唤醒词模式特点
|
||
- ✅ 支持任意中文唤醒词配置
|
||
- ✅ 使用汉语拼音输入,支持中文显示
|
||
- ✅ 基于ESP32的multinet命令词识别技术
|
||
- ✅ 与传统唤醒词模式互斥,确保系统稳定性
|
||
- ✅ 保持完全的向后兼容性
|
||
|
||
### 硬件要求
|
||
- ESP32-S3芯片
|
||
- PSRAM支持
|
||
- 足够的Flash存储空间用于模型文件
|
||
|
||
## 配置方法
|
||
|
||
### 1. 使用menuconfig配置
|
||
|
||
在项目根目录执行:
|
||
```bash
|
||
idf.py menuconfig
|
||
```
|
||
|
||
导航到:`Xiaozhi Assistant` → 找到唤醒词相关选项
|
||
|
||
### 2. 配置选项说明
|
||
|
||
**选择唤醒词模式(二选一):**
|
||
|
||
- **启用唤醒词检测**(`USE_WAKE_WORD_DETECT`)
|
||
- 传统模式,使用固定唤醒词
|
||
- 默认启用
|
||
|
||
- **启用自定义唤醒词检测**(`USE_CUSTOM_WAKE_WORD`)
|
||
- 新增模式,支持自定义唤醒词
|
||
- 默认关闭
|
||
|
||
**自定义唤醒词配置(仅在启用自定义唤醒词时生效):**
|
||
|
||
- **自定义唤醒词**(`CUSTOM_WAKE_WORD`)
|
||
- 默认值:`"ni hao xiao zhi"`
|
||
- 格式:汉语拼音,用空格分隔
|
||
- 示例:`"xiao ai tong xue"`(小爱同学)
|
||
|
||
- **自定义唤醒词显示文本**(`CUSTOM_WAKE_WORD_DISPLAY`)
|
||
- 默认值:`"你好小智"`
|
||
- 格式:中文显示文本
|
||
- 示例:`"小爱同学"`
|
||
|
||
### 3. 配置示例
|
||
|
||
**场景1:使用"小爱同学"作为唤醒词**
|
||
```
|
||
[*] 启用自定义唤醒词检测
|
||
自定义唤醒词 (xiao ai tong xue)
|
||
自定义唤醒词显示文本 (小爱同学)
|
||
```
|
||
|
||
**场景2:使用"你好小智"作为唤醒词(默认)**
|
||
```
|
||
[*] 启用自定义唤醒词检测
|
||
自定义唤醒词 (ni hao xiao zhi)
|
||
自定义唤醒词显示文本 (你好小智)
|
||
```
|
||
|
||
**场景3:使用传统固定唤醒词**
|
||
```
|
||
[*] 启用唤醒词检测
|
||
[ ] 启用自定义唤醒词检测
|
||
```
|
||
|
||
## 编译和烧录
|
||
|
||
### 1. 编译项目
|
||
```bash
|
||
idf.py build
|
||
```
|
||
|
||
### 2. 烧录固件
|
||
```bash
|
||
idf.py flash
|
||
```
|
||
|
||
### 3. 查看日志
|
||
```bash
|
||
idf.py monitor
|
||
```
|
||
|
||
## 使用说明
|
||
|
||
### 1. 系统启动
|
||
系统启动后会显示当前使用的唤醒词模式:
|
||
- 传统模式:显示检测到的固定唤醒词
|
||
- 自定义模式:显示配置的自定义唤醒词
|
||
|
||
### 2. 唤醒测试
|
||
说出配置的唤醒词,系统应该响应并进入对话模式。
|
||
|
||
### 3. 日志信息
|
||
在自定义唤醒词模式下,系统会输出如下日志:
|
||
```
|
||
I (12345) CustomWakeWord: multinet:mn5_cn
|
||
I (12346) CustomWakeWord: Custom wake word: ni hao xiao zhi
|
||
I (12347) CustomWakeWord: Audio detection task started, feed size: 512 fetch size: 512
|
||
I (15000) CustomWakeWord: Custom wake word 'ni hao xiao zhi' detected successfully!
|
||
```
|
||
|
||
## 故障排除
|
||
|
||
### 1. 编译错误
|
||
**错误**:`undefined reference to CONFIG_CUSTOM_WAKE_WORD`
|
||
**解决**:确保已启用自定义唤醒词功能并重新运行`idf.py menuconfig`
|
||
|
||
### 2. 初始化失败
|
||
**错误**:`Failed to initialize multinet, mn_name is nullptr`
|
||
**解决**:
|
||
- 检查是否有足够的PSRAM
|
||
- 确认ESP32-S3芯片支持
|
||
- 检查模型文件是否正确烧录
|
||
|
||
### 3. 唤醒词不响应
|
||
**问题**:说出唤醒词没有反应
|
||
**排查**:
|
||
1. 检查麦克风是否正常工作
|
||
2. 查看日志是否有音频数据输入
|
||
3. 确认拼音配置是否正确
|
||
4. 尝试调整检测阈值
|
||
|
||
### 4. 性能问题
|
||
**问题**:系统运行缓慢或重启
|
||
**解决**:
|
||
- 确保PSRAM配置正确
|
||
- 检查任务栈大小设置
|
||
- 监控内存使用情况
|
||
|
||
## 技术原理
|
||
|
||
### 架构设计
|
||
移植采用了模块化设计:
|
||
```
|
||
WakeWord (基类)
|
||
├── WakeWordDetect (传统模式)
|
||
└── CustomWakeWord (自定义模式)
|
||
```
|
||
|
||
### 关键技术
|
||
- **multinet**:ESP32的命令词识别引擎
|
||
- **AFE**:音频前端处理
|
||
- **条件编译**:根据配置选择不同实现
|
||
|
||
### 兼容性保证
|
||
- 保持原有API接口不变
|
||
- 添加向后兼容的方法映射
|
||
- 统一的配置管理
|
||
|
||
## 参考资料
|
||
|
||
- [ESP32-S3音频开发指南](https://docs.espressif.com/projects/esp-sr/en/latest/)
|
||
- [ESP-SR语音识别框架](https://github.com/espressif/esp-sr)
|
||
- [自定义唤醒词模型训练指南](https://pcn7cs20v8cr.feishu.cn/wiki/CpQjwQsCJiQSWSkYEvrcxcbVnwh)
|
||
|
||
## 版本历史
|
||
|
||
- **v1.0**:完成基础移植,支持自定义唤醒词
|
||
- **v1.1**:增加向后兼容性,优化配置界面
|
||
- **v1.2**:改进错误处理,添加详细日志
|
||
|
||
---
|
||
|
||
**注意**:使用自定义唤醒词功能需要更多的RAM和CPU资源,建议在性能充足的设备上使用。 |