告别唤醒词!打造你的专属AI家庭助手:Onju Voice完全部署指南

告别唤醒词!打造你的专属AI家庭助手:Onju Voice完全部署指南

【免费下载链接】onju-voice A hackable AI home assistant platform 【免费下载链接】onju-voice 项目地址: https://gitcode.com/gh_mirrors/onj/onju-voice

你是否厌倦了每次与智能音箱交互都必须先说唤醒词?是否担心语音数据被云端处理的隐私问题?本文将带你从零开始构建一个无需唤醒词、本地化运行的AI家庭助手平台——Onju Voice,通过改造20美元的Google Nest Mini硬件,实现真正属于你的智能语音交互体验。

读完本文,你将能够:

  • 理解Onju Voice平台的架构与工作原理
  • 完成从硬件改造到软件部署的全流程
  • 配置本地语音识别与AI响应系统
  • 实现智能家居控制、消息处理等实用功能
  • 优化语音交互体验,消除唤醒词限制

平台架构概览

Onju Voice是一个模块化的AI家庭助手平台,采用"设备-服务器"架构,主要由三部分组成:

mermaid

核心组件解析

组件功能技术栈位置
音频输入采集语音信号SPH0645麦克风设备端
语音活动检测识别说话开始/结束webrtcvad算法服务器端
语音识别音频转文本Whisper模型服务器端
指令处理理解用户意图LLM模型(GPT-3.5/4)服务器端
文本转语音生成语音响应ElevenLabs API服务器端
音频输出播放响应内置扬声器设备端
状态指示显示设备状态NeoPixel LED设备端

硬件准备与改造

设备选型

Onju Voice基于Google Nest Mini(2nd gen)改造,选择该设备的原因:

  • 价格低廉(二手市场约$20-40)
  • 优质的扬声器和麦克风阵列
  • 紧凑的设计与良好的声学特性
  • 内置静音开关和触摸控制

硬件改造步骤

  1. 拆解Nest Mini

    • 使用塑料撬棒沿边缘小心分离上盖
    • 卸下4颗固定螺丝
    • 断开电池和主板连接线
  2. PCB替换

    • 移除原装主板
    • 安装Onju Voice定制PCB
    • 连接扬声器、麦克风和LED灯带
  3. 组件焊接

    • 焊接ESP32-S3模块
    • 连接触摸传感器
    • 安装PSRAM芯片

定制PCB可通过PCBWay订购,设计文件位于项目hardware目录下。

替代方案

如果没有Nest Mini,可使用以下组件搭建原型:

组件推荐型号用途
开发板ESP32-S3 DevKitC主控制器
麦克风Adafruit SPH0645音频输入
放大器PAM8302音频放大
扬声器1W 4Ω小型扬声器音频输出
LEDNeoPixel RGB灯带状态指示

服务器环境搭建

系统要求

  • CPU: 4核及以上(推荐Intel i5/Ryzen 5)
  • 内存: 8GB RAM(运行Whisper base模型)
  • 存储: 至少10GB可用空间
  • 操作系统: Ubuntu 20.04+/Windows 10+/macOS 12+

安装步骤

  1. 克隆代码仓库
git clone https://link.gitcode.com/i/02a42fbdf94f8ff67c6ccd3efb2eb1ad
cd onju-voice/server
  1. 创建虚拟环境
python -m venv venv
source venv/bin/activate  # Linux/macOS
# 或
venv\Scripts\activate  # Windows
  1. 安装依赖
pip install -r requirements.txt
  1. 安装Whisper
pip install -U openai-whisper
# 安装ffmpeg
sudo apt update && sudo apt install ffmpeg  # Linux
# 或
brew install ffmpeg  # macOS

配置文件详解

核心配置文件server/config.yaml参数说明:

# 功能模块开关
use_maubot: False        # 消息处理模块
use_home_assistant: True # 智能家居控制
use_notes: True          # 笔记系统

# LLM配置
llm:
  gpt_model: "gpt-3.5-turbo"  # 模型选择
  max_messages: 15            # 对话历史长度
  users_name: "用户"           # 用户名
  init_prompt: >              # 系统提示词
    你是用户的友好助手,始终用少于20个词回应...

# 音频处理配置
mic:
  chunk: 480         # 音频块大小(30ms)
  format: "int16"    # 音频格式
  rate: 16000        # 采样率
  channels: 1        # 声道数

# VAD配置
vad:
  window_length: 0.8          # 音频窗口长度(秒)
  pre_buffer_length: 1.0      # 前置缓冲长度(秒)
  silence_stopping_ratio: 0.2 # 停止录音的静音比例
  silence_stopping_time: 1.5  # 静音停止时间(秒)

软件安装与配置

服务器端部署

  1. 配置凭据
# 复制凭据模板
cp credentials.json.example credentials.json

编辑credentials.json添加必要信息:

{
  "openai_api_key": "your_openai_key",
  "elevenlabs_api_key": "your_elevenlabs_key",
  "home_assistant_url": "http://localhost:8123",
  "home_assistant_token": "your_ha_token"
}
  1. 启动服务器
# 基础启动
python server.py

# 带功能模块启动
python server.py --n --ha --mb --send --whisper base.en

参数说明:

  • --n: 启用笔记功能
  • --ha: 启用家庭助手集成
  • --mb: 启用消息处理
  • --send: 允许发送消息
  • --whisper: 指定Whisper模型

设备固件烧录

  1. Arduino IDE设置
  • 添加ESP32开发板URL:
    https://espressif.github.io/arduino-esp32/package_esp32_index.json
    
  • 安装ESP32开发板支持(版本2.0.0+)
  • 安装依赖库:
    • Adafruit NeoPixel Library
    • WiFiManager
  1. 配置固件
# 进入固件目录
cd onjuino

# 配置WiFi凭据
cp credentials.h.example credentials.h

编辑credentials.h设置WiFi信息:

const char* ssid = "your_wifi_ssid";
const char* password = "your_wifi_password";
  1. 烧录固件
  • 连接ESP32-S3到电脑
  • 选择开发板: ESP32S3 Dev Module
  • 配置工具选项:
    • USB CDC on Boot: Enabled
    • PSRAM: OPI PSRAM
    • 端口: 选择正确的COM端口
  • 点击上传按钮

功能模块详解

语音交互流程

mermaid

智能家居控制

通过Home Assistant集成控制智能设备:

  1. 配置Home Assistant

    • 安装Home Assistant
    • 在配置文件中启用API
    • 创建长期访问令牌
  2. 使用示例

# 控制灯光示例(llm.py)
def control_light(self, device, entity_id, rgb_color=None, brightness=None):
    """控制智能家居灯光"""
    data = {}
    if rgb_color:
        data['rgb_color'] = rgb_color
    if brightness:
        data['brightness'] = brightness
        
    url = f"{self.ha_url}/api/services/light/turn_on"
    headers = {
        "Authorization": f"Bearer {self.ha_token}",
        "Content-Type": "application/json"
    }
    
    response = requests.post(url, headers=headers, json={
        "entity_id": entity_id,** data
    })
    return response.json()
  1. 语音指令示例
    • "把客厅灯调亮"
    • "将卧室灯光设为蓝色"
    • "关闭所有灯光"

消息处理系统

集成Maubot和Beeper处理消息:

  1. 配置Maubot

    • 安装Maubot服务器
    • 部署Onju Voice插件
    • 配置Beeper集成
  2. 消息处理功能

# 消息回复示例(llm.py)
def reply_message(self, device, index, message):
    """回复消息"""
    url = f"{self.maubot_url}/reply/{index}"
    headers = {
        "Content-Type": "application/json"
    }
    
    payload = {
        "message": message,
        "footer": self.footer
    }
    
    if self.send_replies:
        response = requests.post(url, headers=headers, json=payload)
        return response.json()
    else:
        self.log.info(f"[DRY RUN] 回复消息 #{index}: {message}")
        return {"status": "dry_run", "message": message}

笔记系统

快速记录和查询笔记:

  1. 添加笔记

    • 语音指令: "记笔记:明天早上9点开会"
    • 自动保存到notes.json
  2. 查询笔记

    • 语音指令: "我昨天记了什么笔记?"
    • LLM自动解析日期并返回相关笔记
  3. 笔记数据结构

{
  "notes": [
    {
      "id": 1,
      "content": "明天早上9点开会",
      "timestamp": 1680000000,
      "device": "living_room"
    }
  ]
}

高级配置与优化

本地LLM部署

为增强隐私性,可部署本地LLM替代OpenAI API:

  1. 安装Ollama
curl https://ollama.ai/install.sh | sh
  1. 下载模型
ollama pull mistral
  1. 修改配置
# 在config.yaml中设置
llm:
  gpt_model: "local"
  local_llm_url: "http://localhost:11434/api/generate"
  local_model_name: "mistral"

性能优化

  1. Whisper模型选择
模型大小准确率速度推荐场景
tiny.en14MB最快资源受限设备
base.en39MB一般用途
small.en124MB中等追求平衡
medium.en417MB很高高性能服务器
  1. 网络优化

    • 使用5GHz WiFi减少干扰
    • 配置QoS确保音频流优先
    • 优化UDP缓冲区大小
  2. 电源管理

    • 配置深度睡眠模式
    • 调整LED亮度降低功耗
    • 设置空闲超时自动关闭

常见问题与解决方案

连接问题

问题解决方案
设备无法连接WiFi检查凭据格式,确保使用2.4GHz网络
服务器找不到设备验证多播设置,检查防火墙规则
音频断断续续减少WiFi干扰,优化网络带宽

语音识别问题

问题解决方案
识别准确率低切换到更大的Whisper模型,减少背景噪音
频繁误触发调整VAD阈值,增加silence_stopping_time
识别延迟高使用更小的模型,优化服务器性能

性能问题

问题解决方案
响应延迟长启用流式处理,优化LLM提示词
服务器CPU占用高降低Whisper模型复杂度,限制并发连接
设备发热优化固件,减少不必要的传感器 polling

使用技巧与最佳实践

日常使用技巧

  1. 交互方式

    • 轻触设备唤醒麦克风(默认超时5分钟)
    • 使用静音开关完全禁用录音
    • 双击设备播放上次响应
  2. 指令示例

    • "设置客厅温度为24度"
    • "明天天气怎么样?"
    • "读一下未读消息"
    • "添加购物清单:牛奶、鸡蛋"
  3. 场景模式

    • 早晨模式:新闻简报+天气+日程
    • 离家模式:关闭灯光+锁门+启动监控
    • 睡眠模式:调低音量+夜间响应模式

自定义与扩展

  1. 自定义LED效果
// 在onjuino.ino中添加
void customLedEffect(int pattern) {
  switch(pattern) {
    case 0: // 呼吸效果
      for(int b=0; b<255; b++) {
        setAllLeds(b, 0, 0);
        delay(5);
      }
      // ... 呼吸效果实现
      break;
    case 1: // 彩虹效果
      // ... 彩虹效果实现
      break;
  }
}
  1. 添加新功能
    • 创建新的Python模块(如calendar.py)
    • 实现功能函数(如get_events())
    • 在LLM提示词中添加功能描述
    • 更新函数调用定义

项目扩展与贡献

扩展方向

  1. 多房间音频同步

    • 实现多设备音频同步播放
    • 支持立体声和环绕声
  2. 高级语音识别

    • 添加说话人识别
    • 支持多语言切换
    • 实现自定义命令词
  3. 本地TTS替代方案

    • 集成Coqui TTS
    • 训练个性化语音模型
    • 实现完全离线语音合成

贡献指南

  1. 提交代码

    • Fork项目仓库
    • 创建特性分支: git checkout -b feature/amazing-feature
    • 提交更改: git commit -m 'Add some amazing feature'
    • 推送分支: git push origin feature/amazing-feature
    • 创建Pull Request
  2. 报告问题

    • 使用GitHub Issues跟踪bug
    • 提供详细的复现步骤
    • 包含系统配置和日志信息
  3. 改进文档

    • 更新README.md
    • 添加新功能教程
    • 完善API文档

总结与展望

Onju Voice提供了一个灵活、可扩展的AI家庭助手平台,通过改造低成本硬件实现了无唤醒词交互的智能体验。本文详细介绍了从硬件改造到软件部署的全过程,涵盖了核心功能模块和高级配置选项。

未来发展方向:

  • 完全离线运行能力
  • 多模态交互支持(语音+视觉)
  • 增强的隐私保护功能
  • 更自然的对话能力

通过不断优化和扩展,Onju Voice有潜力成为商业智能音箱的真正开源替代方案,让用户完全掌控自己的智能家庭助手。

资源与参考


如果觉得本项目有帮助,请点赞、收藏并关注后续更新。下期将介绍如何训练自定义语音模型,实现更个性化的TTS体验。

【免费下载链接】onju-voice A hackable AI home assistant platform 【免费下载链接】onju-voice 项目地址: https://gitcode.com/gh_mirrors/onj/onju-voice

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值