[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-76364":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":8,"htmlUrl":8,"language":9,"languages":8,"totalLinesOfCode":8,"stars":10,"forks":11,"watchers":12,"openIssues":13,"contributorsCount":13,"subscribersCount":13,"size":13,"stars1d":13,"stars7d":13,"stars30d":14,"stars90d":13,"forks30d":13,"starsTrendScore":13,"compositeScore":15,"rankGlobal":8,"rankLanguage":8,"license":16,"archived":17,"fork":17,"defaultBranch":18,"hasWiki":19,"hasPages":17,"topics":20,"createdAt":8,"pushedAt":8,"updatedAt":21,"readmeContent":22,"aiSummary":23,"trendingCount":13,"starSnapshotCount":13,"syncStatus":24,"lastSyncTime":25,"discoverSource":26},76364,"xiaozhi-esp32-local","Liwuyuee\u002Fxiaozhi-esp32-local","Liwuyuee",null,"C",121,4,1,0,20,2.1,"MIT License",false,"master",true,[],"2026-06-12 02:03:41","# xiaozhi-esp32-local — 离线语音命令识别扩展\n\n[![License: MIT](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-MIT-yellow.svg)](https:\u002F\u002Fopensource.org\u002Flicenses\u002FMIT)\n[![ESP-IDF](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FESP--IDF-v5.5-blue)](https:\u002F\u002Fgithub.com\u002Fespressif\u002Fesp-idf)\n[![Platform](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FPlatform-ESP32--S3-orange)](https:\u002F\u002Fwww.espressif.com\u002F)\n\n**基于 [xiaozhi-esp32](https:\u002F\u002Fgithub.com\u002F78\u002Fxiaozhi-esp32)的增强版本，核心新增离线语音命令识别功能。**\n\n当设备无法连接服务器时，自动降级为本地离线模式，通过 ESP-SR 多命令词识别在端侧执行语音指令，实现\"有网用云端、无网不中断\"的双模语音交互体验。\n\n---\n\n## 主要贡献 ✨\n\n### 离在线双模语音交互（本项目核心）\n\n| 功能 | 说明 |\n|------|------|\n| **离线命令识别** | 唤醒词触发后，自动检测网络状态。在线 → 云端交互；离线 → 本地命令识别 |\n| **10 条中文语音指令** | 灯控、风扇、时间查询等智能家居场景指令 |\n| **4 秒聆听窗口** | 唤醒后开启 4 秒本地识别，超时自动回到待机，误唤醒后可通过再次唤醒重置 |\n| **本地执行与反馈** | 识别成功后在屏幕显示执行结果 + 播放提示音 |\n\n### 技术实现\n\n```\n用户说\"你好小智\"\n  → ESP-SR 端侧唤醒词检测\n    → 尝试连接云端服务器\n      → 成功：原线上流程（ASR → LLM → TTS）\n      → 失败：自动降级离线模式\n        → 开启 4 秒本地聆听\n        → ESP-SR multinet 命令识别\n          → 匹配指令：执行本地动作 + 显示 + 提示音\n          → 超时未匹配：回到待机\n```\n\n### 架构文件\n\n| 文件 | 职责 |\n|------|------|\n| `main\u002Flocal_asr\u002Finclude\u002Flocal_asr.h` | LocalAsr 类封装 ESP-SR multinet |\n| `main\u002Flocal_asr\u002Flocal_asr.cc` | 10 条命令定义、音频馈送、识别回调 |\n| `main\u002Faudio\u002Faudio_service.h\u002Fcc` | 新增 `AS_EVENT_LOCAL_ASR_RUNNING` 事件 & 音频路由 |\n| `main\u002Fapplication.h\u002Fcc` | `EnterOfflineMode \u002F ExitOfflineMode \u002F ExecuteOfflineCommand` |\n| `main\u002Fdevice_state.h` | 新增 `kDeviceStateOfflineListening` 状态 |\n| `main\u002FKconfig.projbuild` | 新增 `LOCAL_ASR_ENABLE` 等菜单配置项 |\n\n### Kconfig 配置\n\n通过 `idf.py menuconfig` → `Xiaozhi Assistant` → `Enable Offline Voice Command Recognition` 可开关：\n\n```\nLOCAL_ASR_ENABLE=y         # 总开关\nLOCAL_ASR_DURATION_MS=4000  # 聆听窗口 (ms)\nLOCAL_ASR_THRESHOLD=30     # 识别置信度 (%)\n```\n\n所有离线 ASR 代码使用 `#if CONFIG_LOCAL_ASR_ENABLE` 条件编译，关闭后无额外资源占用。\n\n---\n\n## 硬件要求\n\n与原项目相同，推荐 **ESP32-S3 + PSRAM**（ESP-SR 需要 PSRAM 运行模型）。支持 70+ 开源硬件。\n\n本项目基于 **ICECAT K2** 开发板开发验证。\n\n---\n\n## 快速开始\n\n### 烧录固件\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002FLiwuyuee\u002Fxiaozhi-esp32-local.git\ncd xiaozhi-esp32-local\n\nidf.py set-target esp32s3\nidf.py menuconfig\n  → Xiaozhi Assistant → Board Type → ICECAT K2\n  → Xiaozhi Assistant → Enable Offline Voice Command Recognition  (默认开启)\nidf.py build\nidf.py -p PORT flash monitor\n```\n\n### 测试离线模式\n\n1. 设备正常运行后**断开网络**\n2. 说出唤醒词（默认\"你好小智\"）\n3. 设备检测到服务器不可达，自动进入\"离线聆听\"模式\n4. 在 4 秒内说出指令，例如：\n\n| 你说 | 设备响应 |\n|------|---------|\n| \"da kai deng\" | 屏幕显示\"已打开灯\"+ 提示音 |\n| \"guan bi deng\" | 屏幕显示\"已关闭灯\"+ 提示音 |\n| \"xian zai shi jian\" | 屏幕显示当前时间 |\n| (超时未说话) | 屏幕显示\"未识别到指令\"+ 回到待机 |\n\n> **注意**：离线指令使用**拼音短语**，由 ESP-SR multinet 模型负责识别。\n> 首次使用时建议开启串口日志查看识别置信度，如不准确可调整 `local_asr.cc` 中的拼音。\n\n---\n\n## 开发说明\n\n- 框架：**ESP-IDF 5.5** + **FreeRTOS**\n- 语音前端：**ESP-SR**（唤醒词 + 命令词）\n- 离线命令识别：**ESP-SR multinet**（`esp_mn_commands_*` API）\n- 音频流：I2S → ES7210\u002FES8311 → Opus 编解码\n- 通信：Wi-Fi \u002F MQTT+UDP \u002F WebSocket\n\n### 构建要求\n\n- 安装 [ESP-IDF v5.5](https:\u002F\u002Fdocs.espressif.com\u002Fprojects\u002Fesp-idf\u002Fen\u002Fv5.5\u002Fesp32s3\u002Fget-started\u002F)\n- Linux 或 macOS 推荐，Windows 也可用\n\n### 添加自定义离线指令\n\n编辑 `main\u002Flocal_asr\u002Flocal_asr.cc` 中的 `kCommands` 数组：\n\n```cpp\nconst LocalAsr::CommandDef LocalAsr::kCommands[] = {\n    {1,  \"da kai deng\",       \"打开灯\"},\n    {2,  \"guan bi deng\",      \"关闭灯\"},\n    \u002F\u002F 在这里添加新指令...\n};\n```\n\n添加后重新编译烧录即可。\n\n---\n\n## 致谢\n\n- [xiaozhi-esp32](https:\u002F\u002Fgithub.com\u002F78\u002Fxiaozhi-esp32) — 虾哥开源的 ESP32 AI 聊天机器人项目\n- [ESP-SR](https:\u002F\u002Fgithub.com\u002Fespressif\u002Fesp-sr) — 乐鑫语音识别框架\n- [ESP-IDF](https:\u002F\u002Fgithub.com\u002Fespressif\u002Fesp-idf) — 乐鑫物联网开发框架\n\n---\n\n## License\n\nMIT License — 与上游项目一致。允许自由使用、修改和商用。\n","xiaozhi-esp32-local 是一个基于 ESP32-S3 平台的离线语音命令识别扩展项目。它通过集成 ESP-SR 多命令词识别技术，在设备无法连接云端服务器时自动降级为本地模式，实现“有网用云端、无网不中断”的双模语音交互体验。项目支持10条中文语音指令，如灯控和时间查询等，并提供4秒聆听窗口以减少误唤醒情况。此外，该系统能够根据网络状态智能切换工作模式，并在本地执行相应命令后给出视觉和听觉反馈。此方案特别适用于智能家居控制场景中，确保即使在网络条件不佳的情况下也能保持良好的用户体验。",2,"2026-06-11 03:55:00","CREATED_QUERY"]