# 基于 KickPi K2B + Sherpa-ONNX 的双模式 AI 智能音箱 **Repository Path**: LZJ-I/AI-smart-speaker ## Basic Information - **Project Name**: 基于 KickPi K2B + Sherpa-ONNX 的双模式 AI 智能音箱 - **Description**: 该项目是一个集成语音交互、音乐播放控制、远程 APP 管理于一体的智能音箱系统 - **Primary Language**: C - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 2 - **Created**: 2025-11-27 - **Last Updated**: 2026-06-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 基于 KickPi K2B + Sherpa-ONNX 的双模式 AI 智能音箱 #### 介绍 该项目是一个集成语音交互、音乐播放控制、远程 APP 管理于一体的智能音箱系统 ## **1. 嵌入式端(KickPi K2B)** - **本地语音处理:** 部署小米 Sherpa-ONNX 框架下的 ASR(语音识别)、TTS(语音合成)、KWS(关键词检测)模型 - **音频控制:** 通过 ALSA 音频驱动和 mPlayer 实现歌曲播放与音量控制 - **本地控制:** 单按钮支持单击、双击、长按操作,实现播放 / 暂停、上一首、下一首功能 ## **2. Qt 客户端应用** - **用户界面:** 基于 Qt 框架开发的跨平台应用 - **用户管理:** 注册、登录功能 - **设备管理:** 设备绑定、状态监控 - **远程控制:** 播放控制、音量调节、歌单显示 - **状态同步:** 实时显示设备在线状态和播放信息 ## **3. Libevent 服务器端** - **网络通信:** 基于 **Libevent** 框架的高性能网络服务器 - **歌曲存储: 基于apache**实现的Web服务器,用于存储歌曲,供嵌入式端的mplayer在线播放 - **数据存储:** MySQL 数据库,管理用户数据和设备信息,密码SHA256加密、SQL指令均格式化,防止恶意注入 - **消息转发:** 处理 APP 与嵌入式设备之间的指令转发 - **状态管理:** 维护设备在线状态和用户绑定关系 ------ # **核心功能模块** ## **1. 语音处理模块(sherpa-asr-kws)** **功能描述:** - 实时音频采集与处理 - **关键词唤醒**(如 "小刘同学"、"小米小米") - **语音指令识别**(如 ”开始播放“、”下一首“、”上一首“、”离线模式“、”换一个音色“等) - **在线 / 离线模式切换** **技术特点:** - ALSA 音频驱动 - **重采样器适配模型输入格式** - 双模式工作:KWS 唤醒模式 → ASR 识别模式 - 通过**管道**(FIFO)与主控制模块通信 - 根据主控制模块的信号(signal)切换工作模式 ## **2. 语音合成模块(sherpa-tts)** **功能描述:** - 文本转语音合成 - 多音色切换 - 语音播放控制 **技术特点:** - 实时音频合成与播放 - 支持说话人音色切换(sid 参数控制) - 说话打断机制(SIGUSR1 信号) - float 转 int16_t 音频格式转换 ## **3. AI 对话模块(千问)** **功能描述:** - 智能问答处理 - 语音交互反馈 **技术特点:** - 自定义sh脚本,千问api发送数据,通过管道读取脚本回复 - JSON 格式数据交互 - 回答结果自动转换为语音 ## **4. 核心控制模块(player.c)** **功能描述:** - 模块协调与控制 - 音乐播放管理 - 网络通信处理 - 状态维护与同步 **技术特点:** - select 机制实现多事件监听 - 链表数据结构管理播放列表 - 共享内存(shm)和信号量(sem)实现父、子、孙三进程间通信 - 掉线模式模式自动切换(在线 → 离线) ------ # **双模式工作机制** ## **在线模式** - **网络连接:** 通过 Libevent 服务器实现网络通信 - 功能特点: - 在线音乐播放(Apache 服务器) - 千问 AI 聊天功能 - APP 远程控制 - 实时状态同步 - MySQL 数据存储 ## **离线模式** - 触发条件: - 网络连接异常时自动切换 - 用户呼叫关键词,然后通过语音识别到“离线模式” - 功能特点: - U 盘本地音乐播放 - 基础语音控制(仅 KWS) - 本地按钮操作 - 关闭网络相关功能 ## **模式切换** - **语音切换:** 通过特定语音指令在两种模式间切换 - **自动切换:** 网络状态变化时自动切换模式 - **手动切换:** 嵌入式端手动切换模式 ------ # **通信协议设计** ## **内部通信** - **进程间通信:** 管道(FIFO)机制,实现模型、千问AI、主进程三者通信 - **共享内存:** 播放状态和配置信息,父子孙三进程共享 - **信号机制:** SIGUSR1、SIGUSR2 等信号控制,实现状态通知(如切换离线模式时通知asr—kws进程切换到离线模式) ## **网络通信** - **数据格式:** JSON 格式消息 - 核心指令: - device_report - 设备状态上报 - get_music - 获取音乐列表 - app_start_play/app_stop_play - APP 控制指令 - app_register/app_login/app_bind - 用户管理指令 - 还有很多,例如回复等。 ------ # **技术亮点** ## **1. 双模式设计** - 支持在线和离线两种工作模式 - 网络异常时自动降级,保证基本功能可用 ## **2. 本地 AI 能力** - 全本地化语音处理,响应速度快 - 无需网络即可实现基础语音控制 ## **3. 跨平台控制** - Qt 客户端支持多平台部署 - 实时设备状态监控和远程控制 ## **4. 鲁棒性设计** - 完善的错误处理机制 - 关键资源异常时自动重置 - 详细的日志记录系统 ------ # **功能实现细节** ## **音乐播放控制** - **播放功能:** 支持 MP3 格式(其他格式理论都支持,不过没写。因为mplayer支持绝大多数的音乐格式) - **控制指令:** 播放 / 暂停、上一首、下一首、音量调节 - **播放模式:** 顺序播放、单曲循环、列表循环 ## **语音交互流程** 1. **关键词唤醒:** 用户说出唤醒词(如 "小米小米"、"小刘同学") 2. **指令识别:** 系统进入语音识别模式 3. **指令执行:** 解析并执行用户指令 4. **语音反馈:** 通过 TTS 返回执行结果 5. **执行内容:** 判断是否为指令,如果不是则交由AI处理并回复 ## **APP 功能特点** - **设备管理:** 支持设备绑定 - **状态显示:** 实时显示当前播放歌曲、音量、模式、歌单等 - **推送通知:** 设备上线 / 下线通知 ------ # **项目成果** ## **技术成果** - 完整的嵌入式 AI 语音交互解决方案 - 稳定可靠的双模式工作机制 - 高效的进程间通信和网络通信架构 ## **功能成果** - 实现了从语音唤醒到指令执行的完整链路 - 支持在线和离线两种使用场景 - 提供了便捷的远程控制方式 ## **性能指标** - **语音识别准确率:** 90% (特定关键词) - **响应延迟:** 本地指令 < 100ms,在线指令 < 100ms