如何使用树莓派构建DIY人工智能助手

如何使用树莓派构建DIY人工智能助手

想要一个真正听从你的指令、运行在你自己的硬件上、而且不会因为听错而误点十二个菠萝的迷你语音助手吗?用树莓派DIY一个AI助手其实非常简单、有趣且灵活。你只需要连接唤醒词、语音识别(ASR = 自动语音识别)、自然语言处理(规则或语言学习模型)以及文本转语音(TTS)功能。添加一些脚本、一两个服务,并进行一些精心的音频调整,你就能拥有一个可以随身携带、听从你指令的智能音箱。

让我们带你从零基础开始,轻松与你的树莓派对话,告别以往的抓狂。我们将涵盖零件、设置、代码、对比、注意事项……所有细节,应有尽有。🌯

您可能还想阅读以下文章:

🔗 如何有效地学习人工智能
制定学习计划、练习项目并跟踪进度。.

🔗 如何创办一家人工智能公司
验证问题,构建最小可行产品,组建团队,获得首批客户。.

🔗 如何利用人工智能提高生产力
实现日常任务自动化,简化工作流程,并提高创意产出。.

🔗 如何将人工智能融入您的业务
确定高影响力流程,实施试点,衡量投资回报率,扩大规模。.


如何用树莓派打造一款优秀的DIY人工智能助手✅

  • 默认设置为私密——尽可能将音频保留在本地。您可以决定哪些音频会离开设备。

  • 模块化——像乐高积木一样交换组件:唤醒词引擎、ASR、LLM、TTS。

  • 价格实惠——主要使用开源的通用麦克风、扬声器和树莓派。

  • 可定制——想要家庭自动化、仪表盘、例程、自定义技能?轻而易举。

  • 可靠——由服务管理,自动启动并开始监听。

  • 乐趣无穷——你将学到很多关于音频、流程和事件驱动设计的知识。

小提示:如果您使用 Raspberry Pi 5 并计划运行较大型的本地模型,则在持续负载下使用外接散热器会有所帮助。(如有疑问,请选择专为 Pi 5 设计的官方主动式散热器。)[1]


你需要准备的零件和工具🧰

  • 树莓派:建议使用 Pi 4 或 Pi 5 以获得足够的性能余量。

  • microSD 卡:建议使用 32 GB 以上容量。

  • USB麦克风:一个简单的USB会议麦克风就很好用。

  • 扬声器:USB 或 3.5 毫米扬声器,或 I2S 放大器 HAT。

  • 网络:以太网或Wi-Fi。

  • 可选配件:外壳、主动散热器、一键通按钮、LED 灯环。[1]

操作系统和基线设置

  1. Raspberry Pi Imager 刷写 Raspberry Pi 操作系统。这是获取带有所需预设的可启动 microSD 卡的直接方法。[1]

  2. 启动系统,连接网络,然后更新软件包:

sudo apt update && sudo apt upgrade -y
  1. 音频基础知识:在 Raspberry Pi OS 系统中,您可以通过桌面用户界面或raspi-config 命令。所有型号均支持 USB 和 HDMI 音频输出;蓝牙输出仅适用于配备蓝牙功能的型号。[1]

  2. 验证设备:

arecord -l aplay -l

然后测试录制和回放。如果音量听起来不对劲,请先检查混音器和默认设置,然后再考虑麦克风的问题。.

 

人工智能树莓派

建筑概览🗺️

基于树莓派的合理流程如下:

唤醒词 → 实时音频捕获 → ASR 转录 → 意图处理或 LLM → 响应文本 → TTS → 音频播放 → 通过 MQTT 或 HTTP 执行可选操作。.

  • 唤醒词:Porcupine 体积小巧、准确度高,可在本地运行,并支持逐个关键词的灵敏度控制。[2]

  • ASR :Whisper 是一款多语言通用 ASR 模型,经过约 68 万小时的训练,对口音和背景噪声具有较强的鲁棒性。对于设备端使用, whisper.cpp提供了一个简洁的 C/C++ 推理路径。[3][4]

  • 大脑:您可以根据自身能力选择——通过 API 使用云端 LLM、规则引擎或本地推理。

  • TTS :Piper 可在本地生成自然语音,速度足够快,即使在配置一般的硬件上也能提供快速响应。[5]


快速对比表🔎

工具 最适合 价格适中 为什么有效
豪猪唤醒词 始终监听触发器 免费套餐+ 低CPU占用率、准确、易于绑定[2]
Whisper.cpp 树莓派上的本地ASR 开源 准确度高,CPU占用率低[4]
更快的低语 在 CPU/GPU 上实现更快的 ASR 开源 CTranslate2 优化
Piper TTS 本地语音输出 开源 快速的声音,多种语言[5]
云LLM API 丰富的推理 基于使用情况 卸载繁重的计算任务
Node-RED 策划行动 开源 可视化流程,兼容 MQTT

逐步构建:你的第一个语音循环🧩

我们将使用 Porcupine 来处理唤醒词,Whisper 来进行转录,一个轻量级的“大脑”函数来处理回复(替换成你选择的语言学习模型),以及 Piper 来进行语音识别。保持简洁,然后不断迭代。.

1)安装依赖项

sudo apt install -y python3-pip portaudio19-dev sox ffmpeg pip3 install sounddevice numpy
  • Porcupine:获取您语言的 SDK/绑定,并按照快速入门指南操作(访问键 + 关键字列表 + 音频帧 → .process )。[2]

  • Whisper(CPU友好型):构建whisper.cpp

git clone https://github.com/ggml-org/whisper.cpp cd whisper.cpp && cmake -B build && cmake --build build -j ./models/download-ggml-model.sh base.en ./build/bin/whisper-cli -m ./models/ggml-base.en.bin -f your.wav -otxt

上述情况反映了该项目的快速启动。[4]

更喜欢 Python? faster-whisper (CTranslate2) 通常比原生 Python 运行速度更快。

2) 设置 Piper TTS

git clone https://github.com/rhasspy/piper cd piper make # 下载你喜欢的语音模型,例如 en_US-amy echo "Hello there." | ./piper --model voices/en/en_US-amy-medium.onnx --output_file hello.wav aplay hello.wav

Piper 专为设备端 TTS 而设计,提供多种语音/语言选项。[5]

3) Python 中的最小辅助循环

刻意精简:等待唤醒词(占位符),录音,用whisper.cpp,生成回复(占位符),然后通过 Piper 说话。您可以将占位符替换为您喜欢的 LLM 或规则逻辑。

import os, subprocess, wave import sounddevice as sd WAKE_WORD = "hey computer" # 生产环境中替换为 Porcupine [2] RECORD_SECONDS = 6 SAMPLE_RATE = 16000 CHANNELS = 1 WORKDIR = "/home/pi/assistant" ASR_BIN = "/home/pi/whisper.cpp/build/bin/whisper-cli" # [4] ASR_MODEL = "/home/pi/whisper.cpp/models/ggml-base.en.bin" PIPER_BIN = "/home/pi/piper/build/piper" # [5] PIPER_VOICE = "/home/pi/piper/voices/en/en_US-amy-medium.onnx" os.makedirs(WORKDIR, exist_ok=True) def record_wav(path, seconds=RECORD_SECONDS): audio = sd.rec(int(seconds * SAMPLE_RATE), samplerate=SAMPLE_RATE, channels=CHANNELS, dtype='int16') sd.wait() with wave.open(path, 'wb') as w: w.setnchannels(CHANNELS); w.setsampwidth(2); w.setframerate(SAMPLE_RATE) w.writeframes(audio.tobytes()) def transcribe(path): cmd = [ASR_BIN, "-m", ASR_MODEL, "-f", path, "-otxt"] subprocess.run(cmd, check=True, cwd=WORKDIR) with open(path.replace(".wav", ".txt"), "r", encoding="utf-8") as f: return f.read().strip() def generate_reply(prompt): if "weather" in prompt.lower(): return "我看不到云,但天气可能还不错。以防万一,带件外套吧。" return "您说:" + prompt def speak(text): proc = subprocess.Popen([PIPER_BIN, "--model", PIPER_VOICE, "--output_file", f"{WORKDIR}/reply.wav"], stdin=subprocess.PIPE) proc.stdin.write(text.encode("utf-8")); proc.stdin.close(); proc.wait() subprocess.run(["aplay", f"{WORKDIR}/reply.wav"], check=True) print("助手已准备就绪。请输入唤醒词进行测试。") while True: typed = input("> ").strip().lower() if typed == WAKE_WORD: wav_path = f"{WORKDIR}/input.wav" record_wav(wav_path) text = transcribe(wav_path) reply = generate_reply(text) print("用户:", text); print("助手:", reply) speak(reply) else: print("输入唤醒词以测试循环。")

要实现真正的唤醒词检测,可以集成 Porcupine 的流式检测器(CPU 占用低,对每个关键词的灵敏度高)。[2]


真正重要的音频调校🎚️

一些小小的改动就能让你的助手感觉智能十倍:

  • 麦克风距离:30-60厘米是许多USB麦克风的最佳距离。

  • 电平:避免输入信号削波,保持播放正常;在排查代码问题之前,先修复路由。在 Raspberry Pi OS 上,您可以通过系统工具或raspi-config。[1]

  • 房间声学:坚硬的墙壁会产生回声;麦克风下方放置软垫会有所帮助。

  • 唤醒词阈值:太敏感→会触发幽灵唤醒词;太严格→你会对着塑料大喊大叫。Porcupine 允许你针对每个关键词调整灵敏度。[2]

  • 散热:在 Pi 5 上进行长时间转录时,官方主动式散热器能带来持续稳定的性能。[1]


从玩具到家电:服务、自动启动、健康检查🧯

人会忘记运行脚本,电脑也会忘记友好待人。将你的循环脚本转换为托管服务:

  1. 创建 systemd 单元:

[单元] 描述=DIY语音助手 After=network.target sound.target [服务] 用户=pi 工作目录=/home/pi/assistant ExecStart=/usr/bin/python3 /home/pi/assistant/assistant.py Restart=always RestartSec=3 [安装] WantedBy=multi-user.target
  1. 启用它:

sudo cp assistant.service /etc/systemd/system/ sudo systemctl daemon-reload sudo systemctl enable --now assistant.service
  1. 原木尾部:

journalctl -u 助手 -f

现在它能开机启动,崩溃后自动重启,整体表现得像个智能设备。虽然有点乏味,但比以前好多了。.


技能系统:让它在家中真正发挥作用🏠✨

语音输入和语音输出功能完善后,添加操作:

  • 意图路由:用于常见任务的简单关键字路由。

  • 智能家居:向 MQTT 发布事件或调用 Home Assistant 的 HTTP 端点。

  • 插件:快速 Python 函数,如set_timerwhat_is_the_timeplay_radiorun_scene

即使有云端 LLM 在回路中,为了速度和可靠性,也应首先路由明显的本地命令。.


本地部署 vs 云部署:权衡取舍,您将切身感受到🌓

仅限本地使用。
优点:私密、离线、成本可预测。
缺点:在小型电路板上,较复杂的模型运行速度可能较慢。如果将 Whisper 保存在设备本地或附近的服务器上,其多语言训练功能有助于提高模型的鲁棒性。[3]

云辅助的
优点:强大的推理能力、更大的上下文窗口。
缺点:数据会离开设备、依赖网络、成本不稳定。

混合模式通常更受欢迎:唤醒词 + ASR 本地 → 调用 API 进行推理 → TTS 本地。[2][3][5]


故障排除:奇怪的小故障及快速修复方法👾

  • 唤醒词误触发:降低灵敏度或尝试使用其他麦克风。[2]

  • ASR 延迟:使用较小的 Whisper 模型或使用发布标志( -j --config Release whisper.cpp 。[4]

  • TTS 断断续续:预先生成常用短语;请确认您的音频设备和采样率。

  • 未检测到麦克风:请检查arecord -l和混音器。

  • 过热降频:为确保 Pi 5 的持续性能,请使用官方的 Active Cooler 散热器。[1]


您应该认真阅读的安全与隐私提示🔒

  • 使用 APT 更新您的树莓派。.

  • 如果您使用任何云 API,请记录您发送的内容,并考虑先在本地删除个人信息。.

  • 以最小权限运行服务;除非必要,否则避免在 ExecStart 中sudo

  • 提供本地模式或静音时段。


组合搭配:像三明治一样自由组合🥪

  • 超本地化:Porcupine + whisper.cpp + Piper + 简单规则。私密且稳定。[2][4][5]

  • 快速云辅助:Porcupine +(较小的本地 Whisper 或云 ASR)+ 本地 TTS + 云 LLM。

  • 家庭自动化中心:添加 Node-RED 或 Home Assistant 流程,用于例程、场景和传感器。


示例技能:通过 MQTT 控制灯光开启💡

import paho.mqtt.client as mqtt MQTT_HOST = "192.168.1.10" TOPIC = "home/livingroom/light/set" def set_light(state: str): client = mqtt.Client() client.connect(MQTT_HOST, 1883, 60) payload = "ON" if state.lower().startswith("on") else "OFF" client.publish(TOPIC, payload, qos=1, retain=False) client.disconnect() # if "turn on the lights" in text: set_light("on")

添加一句语音,比如:“打开客厅的灯”,你就会感觉自己像个魔法师。.


为什么这套技术栈在实践中行之有效🧪

  • Porcupine 在小型电路板上能够高效、准确地检测唤醒词,这使得持续监听成为可能。[2]

  • Whisper 庞大的多语言训练使其能够适应各种环境和口音。[3]

  • whisper.cpp可以让像 Pi 这样的纯 CPU 设备也能利用这种强大的性能。[4]

  • Piper 能够保持快速响应,而无需将音频发送到云端 TTS。[5]


太长了,没看完。

构建一个模块化、私有的DIY AI 助手,方法是结合 Porcupine(用于唤醒词)、Whisper(通过whisper.cpp )进行自动语音识别 (ASR)、选择合适的语音处理器进行回复,以及 Piper 进行本地文本转语音 (TTS)。将其封装为 systemd 服务,调整音频,并集成 MQTT 或 HTTP 操作。它的成本比你想象的要低,而且使用起来出奇地令人愉悦。[1][2][3][4][5]


参考

  1. 树莓派软件与散热– 树莓派镜像工具(下载及使用)和树莓派5主动式散热器产品信息

  2. Porcupine唤醒词– SDK及快速入门(关键词、灵敏度、本地推理)

  3. Whisper(ASR 模型) ——多语言、强大的 ASR 系统,训练时长约 68 万小时

    • Radford 等人, 《基于大规模弱监督的鲁棒语音识别(Whisper)》:阅读更多

  4. whisper.cpp – 带有命令行界面和构建步骤的 CPU 友好型 Whisper 推理

  5. Piper TTS – 快速、本地化的神经文本转语音系统,支持多种语音/语言

在官方人工智能助手商店查找最新人工智能产品

关于我们


返回博客