Sådan bygger du en gør-det-selv AI-assistent med Raspberry Pi

Sådan bygger du en gør-det-selv AI-assistent med Raspberry Pi

Vil du have en lille stemmeassistent, der rent faktisk følger dine instruktioner, kører på din egen hardware og ikke ved et uheld bestiller tolv ananas, fordi den misforstod dig? En gør-det-selv AI-assistent med Raspberry Pi er overraskende opnåelig, sjov og fleksibel. Du skal tilslutte et "wake word", talegenkendelse (ASR = automatisk talegenkendelse), en hjerne til naturligt sprog (regler eller en LLM) og tekst-til-tale (TTS). Tilføj et par scripts, en eller to tjenester og nogle omhyggelige lydjusteringer, og du har en smart højttaler i lommeformat, der overholder dine regler.

Lad os hjælpe dig fra nul til at tale-med-din-Pi uden den sædvanlige hårtrækning. Vi dækker dele, opsætning, kode, sammenligninger, fejltagelser... hele burritoen. 🌯

Artikler du måske har lyst til at læse efter denne:

🔗 Sådan studerer du AI effektivt
Lav en studieplan, øv dig i projekter og følg fremskridt.

🔗 Sådan starter du en AI-virksomhed
Valider problem, byg MVP, saml team, sikr de første kunder.

🔗 Sådan bruger du AI til at blive mere produktiv
Automatiser rutineopgaver, strømlin arbejdsgange og øg det kreative output.

🔗 Sådan integrerer du AI i din virksomhed
Identificer processer med stor effekt, implementer pilotprojekter, mål ROI, skaler.


Hvad gør en god gør-det-selv AI-assistent med Raspberry Pi ✅

  • Privat som standard – hold lyden lokal, hvor det er muligt. Du bestemmer, hvad der forlader enheden.

  • Modulær – udskift komponenter som Lego: wake word engine, ASR, LLM, TTS.

  • Prisbillig – primært open source, almindelige mikrofoner, højttalere og en Pi.

  • Kan hackes – ønsker du hjemmeautomation, dashboards, rutiner, brugerdefinerede færdigheder? Nemt.

  • Pålidelig – servicestyret, starter og lytter automatisk.

  • Sjovt – du lærer en masse om lyd, processer og eventdrevet design.

Lille tip: Hvis du bruger en Raspberry Pi 5 og planlægger at køre tungere lokale modeller, hjælper en clip-on køler under vedvarende belastning. (Hvis du er i tvivl, så vælg den officielle Active Cooler designet til Pi 5.) [1]


Dele og værktøj du skal bruge 🧰

  • Raspberry Pi : Pi 4 eller Pi 5 anbefales til headroom.

  • microSD-kort : 32 GB+ anbefales.

  • USB-mikrofon : en simpel USB-konferencemikrofon er fantastisk.

  • Højttaler : USB- eller 3,5 mm højttaler eller en I2S-forstærker HAT.

  • Netværk : Ethernet eller Wi-Fi.

  • Ekstraudstyr: kabinet, aktiv køler til Pi 5, trykknap til push-to-talk, LED-ring. [1]

OS og basisopsætning

  1. Flash Raspberry Pi OS med Raspberry Pi Imager. Det er den nemme måde at få et bootbart microSD-kort med de ønskede forudindstillinger. [1]

  2. Start op, opret forbindelse til netværket, og opdater derefter pakker:

sudo apt opdatering && sudo apt opgradering -y
  1. Grundlæggende om lyd : På Raspberry Pi OS kan du indstille standardudgang, niveauer og enheder via skrivebordsgrænsefladen eller raspi-config . USB- og HDMI-lyd understøttes på tværs af modeller; Bluetooth-udgang er tilgængelig på modeller med Bluetooth. [1]

  2. Bekræft enheder:

arecord -l aplay -l

Test derefter optagelse og afspilning. Hvis niveauerne virker mærkelige, så tjek mixere og standardindstillinger, før du skyder skylden på mikrofonen.

 

AI-raspberry Pi

Arkitekturen i et overblik 🗺️

En fornuftig gør-det-selv AI-assistent med Raspberry Pi flow ser sådan ud:

Wake word → live lydoptagelse → ASR-transkription → intenthåndtering eller LLM → svartekst → TTS → lydafspilning → valgfrie handlinger via MQTT eller HTTP.

  • Wake word : Porcupine er lille, præcis og kører lokalt med kontrol af følsomhed pr. søgeord. [2]

  • ASR : Whisper er en flersproget, generel ASR-model, der er trænet i ~680k timer; den er robust over for accenter/baggrundsstøj. Til brug på enheder whisper.cpp en effektiv C/C++-inferenssti. [3][4]

  • Hjerne : Dit valg – en cloud-LLM via API, en regelmotor eller lokal inferens afhængigt af hestekræfter.

  • TTS : Piper genererer naturlig tale lokalt, hurtig nok til hurtige svar på beskeden hardware. [5]


Hurtig sammenligningstabel 🔎

Værktøj Bedst til Pris-agtig Hvorfor det virker
Ordet om pindsvinvågning Altid lyttende trigger Gratis niveau + Lav CPU, præcise, nemme bindinger [2]
Hvisken.cpp Lokal ASR på Pi Åben kildekode God nøjagtighed, CPU-venlig [4]
Hurtigere-Hvisken Hurtigere ASR på CPU/GPU Åben kildekode CTranslate2-optimeringer
Piper TTS Lokal taleoutput Åben kildekode Hurtige stemmer, mange sprog [5]
Cloud LLM API Rig argumentation Brugsbaseret Aflaster tung databehandling
Node-RED Orkestrerende handlinger Åben kildekode Visuelle flows, MQTT-venlig

Trin-for-trin opbygning: Din første stemmesløjfe 🧩

Vi bruger Porcupine til at sætte et "wake word", Whisper til at transkribere, en let "hjerne"-funktion til at svare (erstat med din foretrukne LLM) og Piper til at tale. Hold det minimalt, og gentag derefter.

1) Installer afhængigheder

sudo apt install -y python3-pip portaudio19-dev sox ffmpeg pip3 install sounddevice numpy
  • Porcupine: Hent SDK'et/bindingerne til dit sprog, og følg hurtigstartvejledningen (adgangstast + nøgleordsliste + lydbilleder → .process ). [2]

  • Whisper (CPU-venlig): byg whisper.cpp :

git klon 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

Ovenstående afspejler projektets hurtige start. [4]

Foretrækker du Python? faster-whisper (CTranslate2) er ofte hurtigere end almindelig Python på moderate CPU'er.

2) Opsæt Piper TTS

git clone https://github.com/rhasspy/piper cd piper make # Download en stemmemodel du kan lide, f.eks. en_US-amy echo "Hej der." | ./piper --model voices/en/en_US-amy-medium.onnx --output_file hello.wav aplay hello.wav

Piper er designet til TTS på enheder med flere stemme-/sprogindstillinger. [5]

3) En minimal assistentløkke i Python

Bevidst kompakt: venter på en aktiveringsfrase (stub), optager, transskriberer med whisper.cpp , genererer et svar (pladsholder), og taler derefter via Piper. Skift pladsholderen med din foretrukne LLM eller regellogik.

import os, subprocess, wave import sounddevice as sd WAKE_WORD = "hey computer" # swap for Porcupine i produktion [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(sti, sekunder=RECORD_SECONDS): audio = sd.rec(int(sekunder * SAMPLE_RATE), samplerate=SAMPLE_RATE, kanaler=KANALER, dtype='int16') sd.wait() med wave.open(sti, 'wb') som w: w.setnchannels(KANALER); 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 "Jeg kan ikke se skyerne, men det kan være fint. Tag en jakke med for en sikkerheds skyld." return "Du sagde: " + 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("Assistent klar. Skriv den aktiveringsfrase, der skal testes.") 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("Bruger:", text); print("Assistent:", svar) speak(svar) ellers: print("Skriv aktiveringsfrasen for at teste løkken.")

For ægte wake-word-detektion, integrer Porcupines streamingdetektor (lav CPU, følsomhed pr. søgeord). [2]


Lydjustering der rent faktisk betyder noget 🎚️

Et par små rettelser får din assistent til at føle sig 10 gange klogere:

  • Mikrofonafstand : 30-60 cm er et optimalt område for mange USB-mikrofoner.

  • Niveauer : undgå klipning ved input og hold afspilningen i orden; ret routing før du jagter kodespøgelser. På Raspberry Pi OS kan du administrere outputenhed og niveauer via systemværktøjer eller raspi-config . [1]

  • Rumakustik : hårde vægge forårsager ekkoer; en blød måtte under mikrofonen hjælper.

  • Tærskelværdi for vågneord : for følsom → ghost triggers; for streng → du kommer til at råbe ad plastik. Porcupine lader dig justere følsomheden pr. søgeord. [2]

  • Termiske egenskaber : Lange transskriptioner på Pi 5 drager fordel af den officielle aktive køler for vedvarende ydeevne. [1]


Fra legetøj til apparat: Service, autostart, sundhedstjek 🧯

Mennesker glemmer at køre scripts. Computere glemmer at være flinke. Lav dit loop om til en administreret tjeneste:

  1. Opret en systemd-enhed:

[Enhed] Beskrivelse=DIY Stemmeassistent Efter=network.target lyd.target [Tjeneste] Bruger=pi Arbejdsmappe=/home/pi/assistant ExecStart=/usr/bin/python3 /home/pi/assistant/assistant.py Genstart=altid GenstartSec=3 [Installer] WantedBy=multi-user.target
  1. Aktivér det:

sudo cp assistant.service /etc/systemd/system/ sudo systemctl daemon-reload sudo systemctl enable --now assistant.service
  1. Log haler:

journalctl -u assistent -f

Nu starter den ved opstart, genstarter ved nedbrud og opfører sig generelt som et apparat. Lidt kedeligt, meget bedre.


Færdighedssystem: Gør det rent faktisk nyttigt derhjemme 🏠✨

Når stemme-ind og stemme-ud er ensartede, tilføj handlinger:

  • Intent-router : enkle nøgleordsruter til almindelige opgaver.

  • Smart hjem : Udgiv begivenheder til MQTT eller kald Home Assistants HTTP-slutpunkter.

  • Plugins : hurtige Python-funktioner som set_timer , what_is_the_time , play_radio , run_scene .

Selv med en cloud-LLM i loopet, skal du rute åbenlyse lokale kommandoer først for at opnå hastighed og pålidelighed.


Kun lokal vs. cloud-assistance: Afvejninger du vil mærke 🌓

Kun lokalt
Fordele: privat, offline, forudsigelige omkostninger.
Ulemper: tungere modeller kan være langsomme på små boards. Whispers flersprogede træning hjælper med robustheden, hvis du opbevarer den på enheden eller på en server i nærheden. [3]

ved cloud-assistance
: Kraftfuld argumentation, større kontekstvinduer.
Ulemper: Data forlader enheden, netværksafhængighed, variable omkostninger.

En hybrid vinder ofte: wake word + ASR lokal → kald et API til ræsonnement → TTS lokal. [2][3][5]


Fejlfinding: Mærkelige gremliner og hurtige løsninger 👾

  • Falske udløsere ved opvågningsord : sænk følsomhederne eller prøv en anden mikrofon. [2]

  • ASR-forsinkelse : brug en mindre Whisper-model eller byg whisper.cpp med release-flag ( -j --config Release ). [4]

  • Hakkende TTS : Forudgenerer almindelige sætninger; bekræft din lydenhed og samplinghastigheder.

  • Ingen mikrofon fundet : tjek arecord -l og mixere.

  • Termisk regulering : brug den officielle Active Cooler på Pi 5 for vedvarende ydeevne. [1]


Sikkerheds- og privatlivsnoter, du rent faktisk bør læse 🔒

  • Hold din Pi opdateret med APT.

  • Hvis du bruger en cloud-API, så log hvad du sender, og overvej først at redigere personlige bits lokalt.

  • Kør tjenester med færrest rettigheder; undgå sudo i ExecStart medmindre det er påkrævet.

  • Tilbyd en lokal tilstand kun for gæster eller stille timer.


Byg varianter: Bland og match som en sandwich 🥪

  • Ultralokalt : Porcupine + whisper.cpp + Piper + enkle regler. Privat og robust. [2][4][5]

  • Hurtig cloud-assistance : Porcupine + (mindre lokal Whisper eller cloud ASR) + TTS lokal + cloud LLM.

  • Hjemmeautomationscentral : Tilføj Node-RED- eller Home Assistant-flows til rutiner, scener og sensorer.


Eksempel på færdighed: Lys tændt via MQTT 💡

import paho.mqtt.client as mqtt MQTT_HOST = "192.168.1.10" TOPIC = "home/stue/lys/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 "tænd lyset" i teksten: set_light("on")

Tilføj en replik som: "tænd lampen i stuen", og du vil føle dig som en troldmand.


Hvorfor denne stak virker i praksis 🧪

  • Porcupine er effektiv og præcis til at detektere wake-word på små boards, hvilket gør det muligt at lytte altid. [2]

  • Whispers omfattende, flersprogede træning gør den robust i forskellige miljøer og accenter. [3]

  • whisper.cpp holder den strømforsyning tilgængelig på enheder, der kun bruger CPU'en, som f.eks. Pi'en. [4]

  • Piper sørger for hurtige svar uden at sende lyd til en cloud-TTS. [5]


For lang, læste den ikke

Byg en modulær, privat gør-det-selv AI-assistent med Raspberry Pi ved at kombinere Porcupine til wake word, Whisper (via whisper.cpp ) til ASR, dit valg af hjerne til svar og Piper til lokal TTS. Pak det ind som en systemd-tjeneste, finjuster lyd og tilslut MQTT- eller HTTP-handlinger. Det er billigere end du tror, ​​og mærkeligt nok dejligt at leve med. [1][2][3][4][5]


Referencer

  1. Raspberry Pi Software & Køling – Raspberry Pi Imager (download & brug) og Pi 5 Active Cooler produktinformation

  2. Porcupine Wake Word – SDK og hurtigstart (nøgleord, følsomhed, lokal inferens)

  3. Whisper (ASR-model) – Flersproget, robust ASR trænet på ~680.000 timer

    • Radford et al., Robust talegenkendelse via storstilet svag overvågning (Hvisken): læs mere

  4. whisper.cpp – CPU-venlig Whisper-inferens med CLI og byggetrin

  5. Piper TTS – Hurtig, lokal neural TTS med flere stemmer/sprog

Find den nyeste AI i den officielle AI-assistentbutik

Om os


Tilbage til bloggen