Wil jy 'n klein stemassistent hê wat werklik jou voorbeeld volg, op jou eie hardeware loop en nie per ongeluk twaalf pynappels bestel omdat dit jou verkeerd gehoor het nie? 'n DIY KI-assistent met Raspberry Pi is verbasend haalbaar, prettig en buigsaam. Jy sal 'n wekwoord, spraakherkenning (ASR = outomatiese spraakherkenning), 'n brein vir natuurlike taal (reëls of 'n LLM), en teks-na-spraak (TTS) koppel. Voeg 'n paar skrifte, een of twee dienste en 'n paar noukeurige klankaanpassings by, en jy het 'n sakbare slimluidspreker wat jou reëls gehoorsaam.
Kom ons kry jou van nul na praat-met-jou-Pi sonder die gewone hare trek. Ons sal onderdele, opstelling, kode, vergelykings, foute... die hele burrito dek. 🌯
Artikels wat jy dalk na hierdie een wil lees:
🔗 Hoe om KI effektief te bestudeer
Skep 'n studiepadkaart, oefenprojekte en hou vordering dop.
🔗 Hoe om 'n KI-maatskappy te begin
Valideer probleem, bou MVP, stel span saam, beveilig aanvanklike kliënte.
🔗 Hoe om KI te gebruik om meer produktief te wees
Outomatiseer roetinetake, stroomlyn werkvloeie en verbeter kreatiewe uitsette.
🔗 Hoe om KI in jou besigheid te integreer
Identifiseer hoë-impak prosesse, implementeer loodsprojekte, meet ROI, skaal.
Wat maak 'n goeie DIY KI-assistent met Raspberry Pi ✅
-
Privaat by verstek – hou oudio plaaslik waar moontlik. Jy besluit wat die toestel verlaat.
-
Modulêr – ruil komponente soos Lego: wekwoord-enjin, ASR, LLM, TTS.
-
Bekostigbaar – meestal oopbron, kommoditeitsmikrofone, luidsprekers en 'n Pi.
-
Hackable – wil jy tuisoutomatisering, dashboards, roetines, persoonlike vaardighede hê? Maklik.
-
Betroubaar – diensbestuur, begin outomaties en luister.
-
Pret – jy sal baie leer oor klank, prosesse en gebeurtenisgedrewe ontwerp.
Klein wenk: As jy 'n Raspberry Pi 5 gebruik en beplan om swaarder plaaslike modelle te gebruik, help 'n aanknipbare verkoeler onder volgehoue las. (As jy twyfel, kies die amptelike Aktiewe Verkoeler wat vir Pi 5 ontwerp is.) [1]
Onderdele en gereedskap wat jy nodig het 🧰
-
Raspberry Pi : Pi 4 of Pi 5 word aanbeveel vir kopruimte.
-
microSD-kaart : 32 GB+ aanbeveel.
-
USB-mikrofoon : 'n eenvoudige USB-konferensiemikrofoon is wonderlik.
-
Luidspreker : USB- of 3.5 mm-luidspreker, of 'n I2S-versterker HAT.
-
Netwerk : Ethernet of Wi-Fi.
-
Opsionele bykomstighede: kas, aktiewe verkoeler vir Pi 5, drukknop vir druk-om-te-praat, LED-ring. [1]
OS- en basislynopstelling
-
Flash Raspberry Pi OS met Raspberry Pi Imager. Dis die maklike manier om 'n selflaaibare microSD te kry met die voorinstellings wat jy wil hê. [1]
-
Begin, koppel aan die netwerk, en werk dan pakkette op:
sudo apt opdatering && sudo apt opgradering -y
-
Oudio-basiese beginsels : Op Raspberry Pi OS kan jy die standaarduitset, vlakke en toestelle instel via die lessenaar-UI of
raspi-config. USB- en HDMI-oudio word ondersteun op alle modelle; Bluetooth-uitset is beskikbaar op modelle met Bluetooth. [1] -
Verifieer toestelle:
arekord -l speel -l
Toets dan die opname en terugspeel. As die vlakke vreemd lyk, kontroleer mengers en verstekwaardes voordat jy die mikrofoon blameer.
Die Argitektuur In 'n Oogopslag 🗺️
n Verstandige DIY KI-assistent met Raspberry Pi -vloei lyk so:
Wekwoord → regstreekse klankopname → ASR-transkripsie → voornemehantering of LLM → reaksieteks → TTS → klankterugspeel → opsionele aksies via MQTT of HTTP.
-
Wekwoord : Porcupine is klein, akkuraat en loop plaaslik met sensitiwiteitsbeheer per sleutelwoord. [2]
-
ASR : Whisper is 'n veeltalige, algemene ASR-model wat op ~680k uur opgelei is; dit is robuust teen aksente/agtergrondgeraas. Vir gebruik op die toestel
whisper.cpp'n slanke C/C++-inferensiepad. [3][4] -
Brein : Jou keuse – 'n wolk-LLM via API, 'n reël-enjin of plaaslike inferensie, afhangende van perdekrag.
-
TTS : Piper genereer natuurlike spraak plaaslik, vinnig genoeg vir vinnige reaksies op beskeie hardeware. [5]
Vinnige vergelykingstabel 🔎
| Gereedskap | Beste vir | Prys-agtig | Waarom dit werk |
|---|---|---|---|
| Ystervark Wake Word | Altyd-luisterende sneller | Gratis vlak + | Lae SVE, akkurate, maklike bindings [2] |
| Fluister.cpp | Plaaslike ASR op Pi | Oopbron | Goeie akkuraatheid, SVE-vriendelik [4] |
| Vinniger-Fluister | Vinniger ASR op SVE/GPU | Oopbron | CTranslate2 optimaliserings |
| Piper TTS | Plaaslike spraakuitvoer | Oopbron | Vinnige stemme, baie tale [5] |
| Wolk LLM API | Ryk redenasie | Gebruiksgebaseerd | Verlig swaar berekeninge |
| Node-ROOI | Orkestrerende aksies | Oopbron | Visuele vloei, MQTT-vriendelik |
Stap-vir-stap bou: Jou eerste stemlus 🧩
Ons sal Porcupine vir wekwoord gebruik, Whisper vir transkripsie, 'n liggewig "brein"-funksie vir die antwoord (vervang met jou LLM van keuse), en Piper vir spraak. Hou dit minimaal, en herhaal dan.
1) Installeer afhanklikhede
sudo apt installeer -y python3-pip portaudio19-dev sox ffmpeg pip3 installeer klanktoestel numpy
-
Ystervark: gryp die SDK/bindings vir jou taal en volg die vinnige begin (toegangsleutel + sleutelwoordlys + oudiorame →
.process). [2] -
Whisper (SVE-vriendelik): bou whisper.cpp :
git kloon https://github.com/ggml-org/whisper.cpp cd whisper.cpp && cmake -B bou && cmake --bou bou -j ./models/download-ggml-model.sh base.en ./build/bin/whisper-cli -m ./models/ggml-base.en.bin -f your.wav -otxt
Bogenoemde weerspieël die projek se vinnige begin. [4]
Verkies jy Python?
faster-whisper(CTranslate2) is dikwels vinniger as gewone Python op beskeie SVE's.
2) Stel Piper TTS op
git kloon https://github.com/rhasspy/piper cd piper make # Laai 'n stemmodel af wat jy wil, bv., en_US-amy echo "Hallo daar." | ./piper --model voices/en/en_US-amy-medium.onnx --output_file hello.wav aplay hello.wav
Piper is ontwerp vir TTS op toestelle met verskeie stem-/taalopsies. [5]
3) 'n Minimale assistentlus in Python
Doelbewus kompak: wag vir 'n wekfrase (stub), neem op, transkribeer met whisper.cpp , genereer 'n antwoord (plekhouer), en praat dan via Piper. Ruil die plekhouer met jou gunsteling LLM of reëllogika.
invoer os, subproses, golf invoer klanktoestel as sd WAKE_WORD = "hey computer" # ruil vir Porcupine in produksie [2] RECORD_SECONDS = 6 SAMPLE_RATE = 16000 CHANNELS = 1 WORKDIR = "/home/pi/assistent" 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=Waar) def record_wav(pad, sekondes=RECORD_SECONDS): klank = sd.rec(int(sekondes * SAMPLE_RATE), samplerate=SAMPLE_RATE, kanale=KANALE, dtype='int16') sd.wait() met wave.open(pad, 'wb') as w: w.setnchannels(KANALE); 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 "Ek kan nie die wolke sien nie, maar dit mag dalk goed wees. Bring 'n baadjie net ingeval." gee terug "Jy het gesê: " + prompt def praat(teks): proc = subprocess.Popen([PIPER_BIN, "--model", PIPER_VOICE, "--output_file", f"{WORKDIR}/reply.wav"], stdin=subprocess.PIPE) proc.stdin.write(teks.encode("utf-8")); proc.stdin.close(); proc.wait() subprocess.run(["aplay", f"{WORKDIR}/reply.wav"], check=True) print("Assistent gereed. Tik die wek-frase om te toets.") terwyl Waar: 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(teks) print("Gebruiker:", text); druk("Assistent:", antwoord) praat(antwoord) anders: druk("Tik die wek-frase om die lus te toets.")
Vir werklike wekwoord-opsporing, integreer Porcupine se stroomdetektor (lae SVE, sensitiwiteit per sleutelwoord). [2]
Oudio-instelling wat werklik saak maak 🎚️
’n Paar klein regstellings laat jou assistent 10x slimmer voel:
-
Mikrofoonafstand : 30–60 cm is 'n ideale afstand vir baie USB-mikrofone.
-
Vlakke : vermy knip op invoer en hou terugspeel gesond; herstel roetering voordat kode-spoke gejaag word. Op Raspberry Pi OS kan jy die uitvoertoestel en vlakke bestuur via stelselgereedskap of
raspi-config. [1] -
Kamerakoestiek : harde mure veroorsaak eggo's; 'n sagte mat onder die mikrofoon help.
-
Drempel vir wakker woord : te sensitief → spooksnellers; te streng → jy sal op plastiek skree. Porcupine laat jou toe om sensitiwiteit per sleutelwoord aan te pas. [2]
-
Termika : lang transkripsies op Pi 5 trek voordeel uit die amptelike aktiewe verkoeler vir volgehoue werkverrigting. [1]
Van Speelding na Toestel: Dienste, Outomatiese Aanvang, Gesondheidstoetse 🧯
Mense vergeet om skripte uit te voer. Rekenaars vergeet om gaaf te wees. Verander jou lus in 'n bestuurde diens:
-
Skep 'n systemd-eenheid:
[Eenheid] Beskrywing=DIY Stemassistent Na=netwerk.teiken klank.teiken [Diens] Gebruiker=pi Werkgids=/home/pi/assistent ExecStart=/usr/bin/python3 /home/pi/assistant/assistant.py Herbegin=altyd HerbeginSek=3 [Installeer] WantedBy=multi-gebruiker.teiken
-
Aktiveer dit:
sudo cp assistent.diens /etc/systemd/stelsel/ sudo systemctl daemon-herlaai sudo systemctl aktiveer --nou assistent.diens
-
Logsterte:
journalctl -u assistent -f
Nou begin dit met opstart, herbegin met 'n ineenstorting, en tree oor die algemeen op soos 'n toestel. 'n Bietjie vervelig, baie beter.
Vaardigheidstelsel: Maak dit werklik nuttig by die huis 🏠✨
Sodra stem-in en stem-uit solied is, voeg aksies by:
-
Intent router : eenvoudige sleutelwoordroetes vir algemene take.
-
Slimhuis : publiseer gebeurtenisse na MQTT of skakel Home Assistant se HTTP-eindpunte aan.
-
Inproppe : vinnige Python-funksies soos
set_timer,what_is_the_time,play_radio,run_scene.
Selfs met 'n wolk-LLM in die lus, roeteer voor die hand liggende plaaslike opdragte eers vir spoed en betroubaarheid.
Slegs Plaaslik vs Wolkbystand: Afwegings wat jy sal voel 🌓
Slegs plaaslik
Voordele: privaat, vanlyn, voorspelbare koste.
Nadele: swaarder modelle kan stadig wees op klein borde. Whisper se veeltalige opleiding help met robuustheid as jy dit op die toestel of op 'n nabygeleë bediener hou. [3]
Wolkbystand
Voordele: kragtige redenasie, groter konteksvensters.
Nadele: data verlaat toestel, netwerkafhanklikheid, veranderlike koste.
'n Hibriede wen dikwels: wekwoord + ASR lokaal → roep 'n API vir redenasie → TTS lokaal. [2][3][5]
Probleemoplossing: Vreemde Gremlins en vinnige oplossings 👾
-
Wakkerwoord vals snellers : verlaag sensitiwiteite of probeer 'n ander mikrofoon. [2]
-
ASR-vertraging : gebruik 'n kleiner Whisper-model of bou
whisper.cppmet vrystellingsvlae (-j --config Release). [4] -
Hakkerige TTS : genereer algemene frases vooraf; bevestig jou oudiotoestel en steekproeftempo's.
-
Geen mikrofoon bespeur nie : kontroleer
arecord -len mengers. -
Termiese verstikking : gebruik die amptelike Aktiewe Verkoeler op Pi 5 vir volgehoue werkverrigting. [1]
Sekuriteits- en privaatheidsnotas wat jy eintlik moet lees 🔒
-
Hou jou Pi op datum met APT.
-
As jy enige wolk-API gebruik, teken aan wat jy stuur en oorweeg dit om eers persoonlike stukkies plaaslik te redigeer.
-
Begin dienste met die minste voorregte; vermy
sudoin ExecStart tensy dit vereis word. -
Voorsien 'n slegs-plaaslike modus vir gaste of stil ure.
Bouvariante: Meng en pas soos 'n toebroodjie 🥪
-
Ultra-lokaal : Ystervark + whisper.cpp + Piper + eenvoudige reëls. Privaat en stewig. [2][4][5]
-
Vinnige wolkbystand : Porcupine + (kleiner plaaslike Whisper of wolk ASR) + TTS plaaslik + wolk LLM.
-
Huisoutomatiseringssentrale : Voeg Node-RED- of Home Assistant-vloei by vir roetines, tonele en sensors.
Voorbeeldvaardigheid: Ligte Aan via MQTT 💡
invoer paho.mqtt.client as mqtt MQTT_HOST = "192.168.1.10" ONDERWERP = "huis/sitkamer/lig/stel" def stel_lig(toestand: str): kliënt = mqtt.Kliënt() kliënt.connect(MQTT_HOST, 1883, 60) loonvrag = "AAN" if toestand.lower().begin met("aan") anders "AF" kliënt.publiseer(ONDERWERP, loonvrag, qos=1, behou=Onwaar) kliënt.disconnect() # if "skakel die ligte aan" in teks: stel_lig("aan")
Voeg 'n stemreël by soos: "skakel die sitkamerlamp aan," en jy sal soos 'n towenaar voel.
Waarom hierdie stapel in die praktyk werk 🧪
-
Ystervark is doeltreffend en akkuraat met die opsporing van wekwoorde op klein borde, wat altyd-luister moontlik maak. [2]
-
Whisper se uitgebreide, veeltalige opleiding maak dit bestand teen verskillende omgewings en aksente. [3]
-
whisper.cpphou daardie krag bruikbaar op SVE-alleen toestelle soos die Pi. [4] -
Piper hou antwoorde vinnig sonder om oudio na 'n wolk-TTS te stuur. [5]
Te lank, het dit nie gelees nie
Bou 'n modulêre, private DIY KI-assistent met Raspberry Pi deur Porcupine vir wekwoord, Whisper (via whisper.cpp ) vir ASR, jou keuse van brein vir antwoorde, en Piper vir plaaslike TTS te kombineer. Draai dit toe as 'n systemd-diens, stem klank in en koppel MQTT- of HTTP-aksies. Dis goedkoper as wat jy dink, en vreemd genoeg heerlik om mee saam te leef. [1][2][3][4][5]
Verwysings
-
Raspberry Pi Sagteware & Verkoeling – Raspberry Pi Imager (aflaai & gebruik) en Pi 5 Aktiewe Verkoeler produkinligting
-
Porcupine Wake Word – SDK en vinnige begin (sleutelwoorde, sensitiwiteit, plaaslike inferensie)
-
Whisper (ASR-model) – Meertalige, robuuste ASR opgelei op ~680k uur
-
Radford et al., Robuuste Spraakherkenning via Grootskaalse Swak Toesig (Fluister): lees meer
-
-
whisper.cpp – SVE-vriendelike Whisper-inferensie met CLI en boustappe
-
Piper TTS – Vinnige, plaaslike neurale TTS met verskeie stemme/tale