Želite malog glasovnog asistenta koji zaista prati vaše upute, radi na vašem hardveru i neće slučajno naručiti dvanaest ananasa jer vas je pogrešno čuo? DIY AI asistent s Raspberry Pi-jem je iznenađujuće ostvariv, zabavan i fleksibilan. Povezat ćete riječ za buđenje, prepoznavanje govora (ASR = automatsko prepoznavanje govora), mozak za prirodni jezik (pravila ili LLM) i pretvaranje teksta u govor (TTS). Dodajte nekoliko skripti, jednu ili dvije usluge i neka pažljiva podešavanja zvuka i dobit ćete džepni pametni zvučnik koji poštuje vaša pravila.
Hajde da vas odvedemo od nule do razgovora sa vašim Pi-jem bez uobičajenog čupanja kose. Pokrićemo dijelove, podešavanje, kod, poređenja, greške... cijeli burrito. 🌯
Članci koje biste možda željeli pročitati nakon ovog:
🔗 Kako efikasno proučavati vještačku inteligenciju
Napravite plan učenja, vježbajte projekte i pratite napredak.
🔗 Kako pokrenuti kompaniju za vještačku inteligenciju
Validirajte problem, izgradite MVP, okupite tim, osigurajte početne kupce.
🔗 Kako koristiti vještačku inteligenciju za veću produktivnost
Automatizirajte rutinske zadatke, pojednostavite radne procese i povećajte kreativni učinak.
🔗 Kako uključiti vještačku inteligenciju u vaše poslovanje
Identifikujte procese sa visokim uticajem, implementirajte pilot projekte, izmjerite povrat ulaganja, skalirajte.
Šta čini dobrog DIY AI asistenta sa Raspberry Pi-jem ✅
-
Privatno prema zadanim postavkama – zvuk se čuva lokalno gdje god je to moguće. Vi odlučujete šta ostavlja uređaj.
-
Modularno – zamjenjive komponente poput Lego-a: mehanizam za buđenje riječi, ASR, LLM, TTS.
-
Pristupačno – uglavnom otvorenog koda, standardni mikrofoni, zvučnici i Pi.
-
Hakirano – želite automatizaciju doma, kontrolne ploče, rutine, prilagođene vještine? Jednostavno.
-
Pouzdano – upravljano uslugom, pokreće se i počinje automatski slušati.
-
Zabavno – naučit ćete mnogo o zvuku, procesima i dizajnu vođenom događajima.
Mali savjet: Ako koristite Raspberry Pi 5 i planirate koristiti teže lokalne modele, hladnjak koji se pričvršćuje pomaže pri dugotrajnom opterećenju. (U slučaju sumnje, odaberite službeni aktivni hladnjak dizajniran za Pi 5.) [1]
Dijelovi i alati koji će vam trebati 🧰
-
Raspberry Pi : Preporučuje se Pi 4 ili Pi 5 za veći prostor.
-
microSD kartica : preporučuje se 32 GB+.
-
USB mikrofon : jednostavan USB konferencijski mikrofon je odličan.
-
Zvučnik : USB ili 3,5 mm zvučnik, ili I2S pojačalo HAT.
-
Mreža : Ethernet ili Wi-Fi.
-
Dodatni detalji: kućište, aktivni hladnjak za Pi 5, dugme za pritisni i razgovaraj, LED prsten. [1]
OS i osnovna podešavanja
-
Flešujte Raspberry Pi OS pomoću Raspberry Pi Imagera. To je jednostavan način da dobijete bootabilnu microSD karticu sa željenim podešavanjima. [1]
-
Pokrenite računar, povežite se na mrežu, a zatim ažurirajte pakete:
sudo apt ažuriranje && sudo apt nadogradnja -y
-
Osnove zvuka : Na Raspberry Pi OS-u možete postaviti zadani izlaz, nivoe i uređaje putem korisničkog interfejsa na radnoj površini ili
raspi-config. USB i HDMI audio su podržani na svim modelima; Bluetooth izlaz je dostupan na modelima s Bluetoothom. [1] -
Verifikujte uređaje:
arecord -l aplay -l
Zatim testirajte snimanje i reprodukciju. Ako vam se nivoi čine čudnim, provjerite miksere i zadane postavke prije nego što okrivite mikrofon.

Arhitektura na prvi pogled 🗺️
Praktičan DIY AI asistent sa Raspberry Pi tokom izgleda ovako:
Buđenje → snimanje zvuka uživo → ASR transkripcija → rukovanje namjerom ili LLM → tekst odgovora → TTS → reprodukcija zvuka → opcionalne radnje putem MQTT-a ili HTTP-a.
-
Buđenje : Porcupine je mali, precizan i radi lokalno s kontrolom osjetljivosti za svaku ključnu riječ. [2]
-
ASR : Whisper je višejezični, ASR model opće namjene obučen na ~680k sati; otporan je na akcente/pozadinsku buku. Za upotrebu na uređaju,
shippe.cpppruža jednostavan C/C++ inferencijski put. [3][4] -
Brain : Vaš izbor - cloud LLM putem API-ja, mehanizam za pravila ili lokalno zaključivanje, ovisno o snazi.
-
TTS : Piper generira prirodni govor lokalno, dovoljno brzo za brze odgovore na skromnoj opremi. [5]
Tabela za brzo poređenje 🔎
| Alat | Najbolje za | Prilično skupo | Zašto to funkcioniše |
|---|---|---|---|
| Riječ za buđenje dikobraza | Okidač za stalno slušanje | Besplatni nivo + | Nisko opterećenje CPU-a, precizno, jednostavno povezivanje [2] |
| Whisper.cpp | Lokalni ASR na Pi-ju | Otvoreni kod | Dobra tačnost, prilagođeno CPU-u [4] |
| Brže-šapat | Brži ASR na CPU/GPU | Otvoreni kod | CTranslate2 optimizacije |
| Piper TTS | Lokalni govorni izlaz | Otvoreni kod | Brzi glasovi, mnogo jezika [5] |
| API za LLM u oblaku | Bogato obrazloženje | Na osnovu upotrebe | Rasprema velike količine računarskih resursa |
| Čvor-CRVENI | Orkestriranje akcija | Otvoreni kod | Vizualni tokovi, prilagođeni MQTT-u |
Korak-po-korak izrada: Vaša prva glasovna petlja 🧩
Koristit ćemo Porcupine za riječ koja vas budi, Whisper za transkripciju, laganu "brain" funkciju za odgovor (zamijenite je sa svojim odabranim LLM-om) i Piper za govor. Neka bude minimalno, a zatim iterirajte.
1) Instalirajte zavisnosti
sudo apt install -y python3-pip portaudio19-dev sox ffmpeg pip3 install zvučni uređaj numpy
-
Porcupine: preuzmite SDK/vezivanja za svoj jezik i slijedite upute za brzi početak (pristupni ključ + lista ključnih riječi + audio okviri →
.process). [2] -
Whisper (prilagođeno CPU-u): izgraditi shipset.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
Gore navedeno odražava brzi početak projekta. [4]
Preferirate Python?
faster-whisper(CTranslate2) je često brži od običnog Pythona na skromnijim procesorima.
2) Podesite Piper TTS
git clone https://github.com/rhasspy/piper cd piper make # Preuzmite glasovni model koji vam se sviđa, npr. en_US-amy echo "Zdravo." | ./piper --model voices/en/en_US-amy-medium.onnx --output_file hello.wav aplay hello.wav
Piper je dizajniran za TTS na uređaju s više opcija glasa/jezika. [5]
3) Minimalna pomoćna petlja u Pythonu
Namjerno kompaktno: čeka frazu za buđenje (stub), snima, transkribuje sa shittle.cpp , generiše odgovor (privremeno mjesto), a zatim govori putem Pipera. Zamijenite privremeno mjesto sa svojim omiljenim LLM-om ili logikom pravila.
import os, subprocess, wave import sounddevice as sd WAKE_WORD = "hej računare" # zamjena za Porcupine u produkciji [2] RECORD_SECONDS = 6 SAMPLE_RATE = 16000 KANALI = 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(putanja, sekunde=RECORD_SECONDS): audio = sd.rec(int(sekunde * SAMPLE_BRZINA), samplerate=SAMPLE_BRZINA, channels=KANALI, dtype='int16') sd.wait() with wave.open(putanja, 'wb') as w: w.setnchannels(KANALI); 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 "Ne vidim oblake, ali možda će biti u redu. Ponesite jaknu za svaki slučaj." vrati "Rekli ste: " + prompt def speak(tekst): 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("Asistent je spreman. Ukucajte frazu za buđenje za testiranje.") while True: typed = input("> ").strip().lower() if typed == RIJEČ_BUĐENJA: wav_path = f"{WORKDIR}/input.wav" record_wav(wav_path) text = transcribe(wav_path) reply = generate_reply(tekst) print("Korisnik:", text); print("Asistent:", odgovor) speak(odgovor) else: print("Ukucajte frazu za buđenje da biste testirali petlju.")
Za pravo otkrivanje "wake-word"-a, integrirajte Porcupine-ov detektor streaminga (nizak CPU, osjetljivost po ključnoj riječi). [2]
Podešavanje zvuka koje je zaista važno 🎚️
Nekoliko sitnih ispravki čini da se vaš asistent osjeća 10 puta pametnije:
-
Udaljenost mikrofona : 30–60 cm je idealna vrijednost za mnoge USB mikrofone.
-
Nivoi : izbjegavajte prekide na ulazu i održavajte reprodukciju razumnom; ispravite usmjeravanje prije nego što se uhvatite za probleme s kodom. Na Raspberry Pi OS-u, možete upravljati izlaznim uređajima i nivoima putem sistemskih alata ili
raspi-config-a. [1] -
Akustika prostorije : tvrdi zidovi uzrokuju odjeke; mekana podloga ispod mikrofona pomaže.
-
Prag za aktivne riječi : previše osjetljivo → aktiviraju se ghost signali; previše strogo → vikat ćete na plastiku. Porcupine vam omogućava podešavanje osjetljivosti po ključnoj riječi. [2]
-
Termalni sistemi : dugi transkripti na Pi 5 imaju koristi od zvaničnog aktivnog hladnjaka za održive performanse. [1]
Prelazak sa igračke na uređaj: Servisi, automatsko pokretanje, provjere ispravnosti 🧯
Ljudi zaboravljaju pokretati skripte. Računari zaboravljaju biti ljubazni. Pretvorite svoju petlju u upravljanu uslugu:
-
Kreirajte systemd jedinicu:
[Jedinica] Opis=DIY Glasovni asistent Nakon=network.target sound.target [Usluga] Korisnik=pi WorkingDirectory=/home/pi/assistant ExecStart=/usr/bin/python3 /home/pi/assistant/assistant.py Restart=uvijek RestartSec=3 [Instalacija] WantedBy=multi-user.target
-
Omogući:
sudo cp assistant.service /etc/systemd/system/ sudo systemctl daemon-reload sudo systemctl enable --now assistant.service
-
Repovi trupaca:
journalctl -u asistent -f
Sada se pokreće prilikom podizanja sistema, ponovo pokreće prilikom pada sistema i generalno se ponaša kao uređaj. Malo dosadno, ali mnogo bolje.
Sistem vještina: Učinite ga zaista korisnim kod kuće 🏠✨
Kada su glasovni unos i izlaz ujednačeni, dodajte akcije:
-
Intent ruter : jednostavne rute po ključnim riječima za uobičajene zadatke.
-
Pametni dom : objavljivanje događaja na MQTT-u ili pozivanje HTTP krajnjih tačaka Home Assistanta.
-
Dodaci : brze Python funkcije poput
set_timer,what_is_the_time,play_radio,run_scene.
Čak i sa cloud LLM-om u petlji, prvo usmjerite očigledne lokalne komande radi brzine i pouzdanosti.
Samo lokalno u odnosu na Cloud Assist: Kompromisi koje ćete osjetiti 🌓
Samo lokalno
Prednosti: privatno, van mreže, predvidljivi troškovi.
Nedostaci: teži modeli mogu biti spori na malim pločama. Whisperova višejezična obuka pomaže u robusnosti ako ga držite na uređaju ili na obližnjem serveru. [3]
Pomoć u oblaku.
Prednosti: snažno zaključivanje, veći kontekstni prozori.
Nedostaci: podaci napuštaju uređaj, ovisnost o mreži, varijabilni troškovi.
Hibrid često pobjeđuje: riječ za buđenje + lokalni ASR → poziv API-ja za zaključivanje → lokalni TTS. [2][3][5]
Rješavanje problema: Čudni Gremlini i brza rješenja 👾
-
Lažni okidači riječi za buđenje : smanjite osjetljivost ili pokušajte s drugim mikrofonom. [2]
-
ASR kašnjenje : koristite manji Whisper model ili izgradite
shittle.cppsa zastavicama za izdavanje (-j --config Release). [4] -
Isprekidani TTS : unaprijed generirajte uobičajene fraze; potvrdite svoj audio uređaj i brzine uzorkovanja.
-
Nije detektovan mikrofon : provjerite
arecord -li miksere. -
Termalno ograničavanje : koristite službeni Active Cooler na Pi 5 za održive performanse. [1]
Napomene o sigurnosti i privatnosti koje biste zaista trebali pročitati 🔒
-
Održavajte svoj Pi ažuriranim pomoću APT-a.
-
Ako koristite bilo koji cloud API, evidentirajte ono što šaljete i prvo razmislite o lokalnom redigiranju ličnih podataka.
-
Pokreni servise sa najmanjim privilegijama; izbjegavaj
sudou ExecStartu osim ako nije potrebno. -
Omogućite samo lokalni način rada za goste ili tihe sate.
Varijante izgradnje: Kombinujte kao sendvič 🥪
-
Ultra-lokalno : Porcupine + shittle.cpp + Piper + jednostavna pravila. Privatno i čvrsto. [2][4][5]
-
Brza pomoć u oblaku : Porcupine + (manji lokalni Whisper ili cloud ASR) + lokalni TTS + cloud LLM.
-
Centrala za kućnu automatizaciju : Dodajte Node-RED ili Home Assistant tokove za rutine, scene i senzore.
Primjer vještine: Uključivanje svjetla putem MQTT-a 💡
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() # ako je "uključi svjetla" u tekstu: set_light("on")
Dodajte glasovnu rečenicu poput: „upali lampu u dnevnoj sobi“ i osjećat ćete se kao čarobnjak.
Zašto ovaj stek funkcioniše u praksi 🧪
-
Porcupine je efikasan i precizan u detekciji riječi koje izazivaju budnost na malim pločama, što omogućava stalno slušanje. [2]
-
Whisper-ova opsežna, višejezična obuka čini je otpornom na različita okruženja i akcente. [3]
-
wishept.cppomogućava korištenje te snage na uređajima koji koriste samo CPU, poput Pi-ja. [4] -
Piper održava odgovore brzim bez slanja zvuka u TTS u oblaku. [5]
Predugo, nisam pročitao/la
Napravite modularnog, privatnog DIY AI asistenta s Raspberry Pi-jem kombinirajući Porcupine za riječ za buđenje, Whisper (putem shittle.cpp ) za ASR, vaš izbor brain za odgovore i Piper za lokalni TTS. Umotajte ga kao sistemski servis, podesite zvuk i povežite ga s MQTT ili HTTP akcijama. Jeftinije je nego što mislite, a neobično je ugodno živjeti s njim. [1][2][3][4][5]
Reference
-
Raspberry Pi softver i hlađenje – Raspberry Pi Imager (preuzimanje i korištenje) i informacije o proizvodu Pi 5 Active Cooler
-
Raspberry Pi Imager: pročitajte više
-
Aktivni hladnjak (Pi 5): pročitajte više
-
-
Porcupine Wake Word – SDK i brzi početak (ključne riječi, osjetljivost, lokalno zaključivanje)
-
Whisper (ASR model) – Višejezični, robusni ASR obučen na ~680k sati
-
Radford i dr., Robusno prepoznavanje govora putem slabog nadzora velikih razmjera (šapat): pročitajte više
-
-
shippe.cpp – Whisper inferencija prilagođena CPU-u sa CLI i koracima izgradnje
-
Piper TTS – Brzi, lokalni neuronski TTS s više glasova/jezika