Kako napraviti DIY AI asistenta sa Raspberry Pi-jem

Kako napraviti DIY AI asistenta sa Raspberry Pi-jem

Ž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

  1. 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]

  2. Pokrenite računar, povežite se na mrežu, a zatim ažurirajte pakete:

sudo apt ažuriranje && sudo apt nadogradnja -y
  1. 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]

  2. 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.

 

Umjetna inteligencija, Raspberry Pi

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.cpp pruž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:

  1. 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
  1. Omogući:

sudo cp assistant.service /etc/systemd/system/ sudo systemctl daemon-reload sudo systemctl enable --now assistant.service
  1. 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.cpp sa 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 -l i 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 sudo u 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.cpp omoguć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

  1. Raspberry Pi softver i hlađenje – Raspberry Pi Imager (preuzimanje i korištenje) i informacije o proizvodu Pi 5 Active Cooler

  2. Porcupine Wake Word – SDK i brzi početak (ključne riječi, osjetljivost, lokalno zaključivanje)

  3. 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

  4. shippe.cpp – Whisper inferencija prilagođena CPU-u sa CLI i koracima izgradnje

  5. Piper TTS – Brzi, lokalni neuronski TTS s više glasova/jezika

Pronađite najnoviju umjetnu inteligenciju u službenoj trgovini AI Assistant

O nama


Nazad na blog