toy-Kapi_Rtc/自定义唤醒词移植说明.md
2026-01-20 16:55:17 +08:00

178 lines
4.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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资源建议在性能充足的设备上使用。