Norite mažyčio balso asistento, kuris iš tikrųjų sektų jūsų pavyzdžiu, veiktų jūsų aparatinėje įrangoje ir netyčia neužsakytų dvylikos ananasų, jei jus neteisingai išgirstų? „ Pasidaryk pats“ dirbtinio intelekto asistentas su „Raspberry Pi“ yra stebėtinai įgyvendinamas, smagus ir lankstus. Jums tereikia prijungti žadinimo žodį, kalbos atpažinimo funkciją (ASR = automatinis kalbos atpažinimas), natūralios kalbos smegenis (taisykles arba LLM) ir teksto įgarsinimo funkciją (TTS). Pridėkite kelis scenarijus, vieną ar dvi paslaugas ir keletą kruopščių garso pakeitimų, ir turėsite kišeninę išmaniąją kolonėlę, kuri laikosi jūsų taisyklių.
Padėkime jums pradėti kalbėtis su savo Pi nuo nulio be įprasto galvos raustymo. Aptarsime dalis, sąranką, kodą, palyginimus, gudrybes... visą burrito procesą. 🌯
Straipsniai, kuriuos galbūt norėsite perskaityti po šio:
🔗 Kaip efektyviai studijuoti dirbtinį intelektą
Sukurkite mokymosi planą, praktikos projektus ir stebėkite pažangą.
🔗 Kaip įkurti dirbtinio intelekto įmonę
Patvirtinti problemą, sukurti MVP, suburti komandą, pritraukti pirminius klientus.
🔗 Kaip naudoti dirbtinį intelektą, kad būtumėte produktyvesni
Automatizuokite įprastas užduotis, supaprastinkite darbo eigą ir padidinkite kūrybinę produkciją.
🔗 Kaip integruoti dirbtinį intelektą į savo verslą
Nustatyti didelio poveikio procesus, įgyvendinti bandomuosius projektus, išmatuoti investicijų grąžą, plėsti veiklą.
Kas daro „pasidaryk pats“ dirbtinio intelekto asistentą su „Raspberry Pi“ ✅
-
Privatus pagal numatytuosius nustatymus – garsas, kai įmanoma, turi būti vietinis. Jūs sprendžiate, kas palieka įrenginį.
-
Modulinis – keičiami komponentai, tokie kaip „Lego“: žadinimo žodžių variklis, ASR, LLM, TTS.
-
Įperkamos kainos – dažniausiai atvirojo kodo, įprasti mikrofonai, garsiakalbiai ir „Pi“.
-
Įsilaužiama – norite namų automatizavimo, ataskaitų suvestinių, rutinų, pritaikytų įgūdžių? Lengva.
-
Patikimas – paslaugos valdomas, įsijungia ir pradeda klausytis automatiškai.
-
Smagu – daug sužinosite apie garsą, procesus ir įvykiais pagrįstą dizainą.
Mažas patarimas: jei naudojate „Raspberry Pi 5“ ir planuojate naudoti sunkesnius vietinius modelius, esant nuolatinei apkrovai, pravers prisegamas aušintuvas. (Kilus abejonių, rinkitės oficialų „Pi 5“ skirtą aktyvųjį aušintuvą.) [1]
Reikalingos dalys ir įrankiai 🧰
-
„Raspberry Pi“ : dėl laisvos vietos viršuje rekomenduojama naudoti „Pi 4“ arba „Pi 5“.
-
„microSD“ kortelė : rekomenduojama 32 GB ir daugiau.
-
USB mikrofonas : paprastas USB konferencinis mikrofonas puikiai tinka.
-
Garsiakalbis : USB arba 3,5 mm garsiakalbis arba I2S stiprintuvas HAT.
-
Tinklas : Ethernet arba „Wi-Fi“.
-
Papildomi priedai: korpusas, aktyvus aušintuvas „Pi 5“, mygtukas tiesioginiam kalbėjimui, LED žiedas. [1]
OS ir pradinė sąranka
-
„Flash Raspberry Pi“ OS atnaujinimas su „Raspberry Pi Imager“. Tai paprastas būdas gauti paleidžiamą „microSD“ kortelę su norimais išankstiniais nustatymais. [1]
-
Paleiskite, prisijunkite prie tinklo ir atnaujinkite paketus:
sudo apt atnaujinimas ir sudo apt atnaujinimas -y
-
Garso pagrindai : „Raspberry Pi“ OS galite nustatyti numatytąją išvestį, lygius ir įrenginius naudodami darbalaukio vartotojo sąsają arba
„raspi-config“. USB ir HDMI garsas palaikomas visuose modeliuose; „Bluetooth“ išvestis galima modeliuose su „Bluetooth“. [1] -
Patikrinkite įrenginius:
arecord -l aplay -l
Tada patikrinkite įrašymą ir atkūrimą. Jei lygiai atrodo keisti, prieš kaltindami mikrofoną, patikrinkite maišytuvus ir numatytuosius nustatymus.

Architektūra trumpai 🗺️
Protingas „ pasidaryk pats“ dirbtinio intelekto asistentas su „Raspberry Pi“ srautu atrodo taip:
Žadinimo žodis → tiesioginio garso įrašymas → ASR transkripcija → ketinimų apdorojimas arba LLM → atsako tekstas → TTS → garso atkūrimas → pasirenkami veiksmai per MQTT arba HTTP.
-
Žadinimo žodis : „Porcupine“ yra mažas, tikslus ir veikia lokaliai, kontroliuojant jautrumą pagal raktinius žodžius. [2]
-
ASR : „Whisper“ yra daugiakalbis, bendrosios paskirties ASR modelis, apmokytas maždaug 680 tūkst. valandų; jis atsparus akcentams / foniniam triukšmui. Įrenginyje naudojimui
„whisper.cpp“teikia supaprastintą C/C++ išvadų kelią. [3][4] -
Smegenys : Jūsų pasirinkimas – debesijos LLM per API, taisyklių variklis arba vietinė išvada, priklausomai nuo arklio galios.
-
TTS : „Piper“ generuoja natūralią kalbą vietoje, pakankamai greitai, kad būtų galima greitai reaguoti net ir esant nedidelei įrangai. [5]
Greito palyginimo lentelė 🔎
| Įrankis | Geriausiai tinka | Brangūs | Kodėl tai veikia |
|---|---|---|---|
| Porcupine Wake Word | Visada klausantis paleidiklis | Nemokamas lygis + | Mažas procesoriaus apkrovimas, tikslus, paprastas sujungimas [2] |
| Šnabždesys.cpp | Vietinis ASR Pi įrenginyje | Atvirojo kodo | Geras tikslumas, taupo procesoriaus energiją [4] |
| Greitesnis šnabždesys | Greitesnis ASR procesoriuje / grafikos procesoriuje | Atvirojo kodo | CTranslate2 optimizavimai |
| Piper TTS | Vietinė kalbos išvestis | Atvirojo kodo | Greiti balsai, daug kalbų [5] |
| Debesijos LLM API | Turtingas samprotavimas | Naudojimo pagrindu | Atsikrato didelių skaičiavimų |
| Mazgas-RED | Veiksmų organizavimas | Atvirojo kodo | Vizualiniai srautai, pritaikyti MQTT |
Žingsnis po žingsnio kūrimas: jūsų pirmoji balso kilpa 🧩
Žodžiui žadinti naudosime „Porcupine“, transkripcijai – „Whisper“, atsakymui – lengvą „smegenų“ funkciją (pakeiskite pasirinkta teisės magija), o kalbai – „Piper“. Išlaikykite minimalų dydį, tada kartokite.
1) Įdiekite priklausomybes
sudo apt install -y python3-pip portaudio19-dev sox ffmpeg pip3 install garso įrenginys numpy
-
„Porcupine“: atsisiųskite savo kalbos SDK / susiejimus ir atlikite greito paleidimo veiksmus (prieigos raktas + raktinių žodžių sąrašas + garso kadrai →
.process). [2] -
„Whisper“ (centriniam procesoriui pritaikytas): sukurti „whisper.cpp“ :
„git“ klonas 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
Tai atspindi greitą projekto pradžią. [4]
Pirmenybę teikiate „Python“?
„faster-whisper“ (CTranslate2) dažnai veikia sparčiau nei įprastas „Python“ kukliuose procesoriuose.
2) Nustatykite „Piper TTS“
git clone https://github.com/rhasspy/piper cd piper make # Atsisiųskite jums patinkantį balso modelį, pvz., en_US-amy echo „Sveiki.“ | ./piper --model voices/en/en_US-amy-medium.onnx --output_file hello.wav aplay hello.wav
„Piper“ yra skirtas įrenginyje integruotam TTS su keliomis balso / kalbos parinktimis. [5]
3) Minimalus asistento ciklas Python kalboje
Sąmoningai kompaktiškas: laukia pažadinimo frazės (stub), įrašo, transkribuoja su whisper.cpp , sugeneruoja atsakymą (vietos žymeklį), tada kalba per Piper. Vietos žymeklį pakeičia mėgstama LLM arba taisyklių logika.
import os, subprocess, wave import sounddevice as sd WAKE_WORD = "ei, kompiuteris" # pakeisti „Porcupine“ produkcijoje [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(kelias, sekundės=ĮRAŠYMO_SEKUNDĖS): audio = sd.rec(int(sekundės * 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 "oras" in prompt.lower(): return "Nematau debesų, bet galbūt viskas bus gerai. Pasiimkite striukę, dėl viso pikto." return „Jūs pasakėte: “ + 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("Asistentas pasiruošęs. Įveskite žadinimo frazę, kad patikrintumėte.") 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("Vartotojas:", text); print("Asistentas:", reply) speak(reply) else: print("Įveskite pažadinimo frazę, kad patikrintumėte ciklą.")
Norint aptikti tikrą pažadinimo žodį, integruokite „Porcupine“ srautinio perdavimo detektorių (mažas procesoriaus našumas, jautrumas kiekvienam raktažodžiui). [2]
Garso derinimas, kuris iš tikrųjų svarbus 🎚️
Keletas mažų pataisymų leis jūsų asistentui pasijusti 10 kartų protingesniam:
-
Mikrofonų atstumas : 30–60 cm yra optimalus atstumas daugeliui USB mikrofonų.
-
Lygiai : venkite įvesties signalo nukirpimo ir išlaikykite atkūrimą tinkamą; pataisykite maršrutizavimą prieš bandydami atkurti kodą. „Raspberry Pi“ OS sistemoje galite valdyti išvesties įrenginį ir lygius naudodami sistemos įrankius arba
„raspi-config“. [1] -
Kambario akustika : kietos sienos sukelia aidą; minkštas kilimėlis po mikrofonu padeda.
-
Žodinio žadinimo slenkstis : per jautrus → sukelia vaiduokliškus veiksnius; per griežtas → rėksite ant plastiko. „Porcupine“ leidžia koreguoti jautrumą kiekvienam raktiniam žodžiui. [2]
-
Terminiai elementai : ilgiems „Pi 5“ transkripcijos įrašams naudojamas oficialus aktyvus aušintuvas, užtikrinantis ilgalaikį veikimą. [1]
Perėjimas nuo žaislo prie prietaiso: paslaugos, automatinis paleidimas, būklės patikrinimai 🧯
Žmonės pamiršta vykdyti scenarijus. Kompiuteriai pamiršta būti malonūs. Paverskite savo ciklą valdoma paslauga:
-
Sukurkite „systemd“ vienetą:
[Vienetas] Aprašymas=„Pasidaryk pats“ balso asistentas After=network.target sound.target [Paslauga] Vartotojas=pi WorkingDirectory=/home/pi/assistant ExecStart=/usr/bin/python3 /home/pi/assistant/assistant.py Paleisti iš naujo=always RestartSec=3 [Įdiegti] WantedBy=multi-user.target
-
Įgalinti:
sudo cp assistant.service /etc/systemd/system/ sudo systemctl daemon-reload sudo systemctl enable --now assistant.service
-
Rąstų uodegos:
journalctl -u asistentas -f
Dabar jis paleidžiamas paleidžiant sistemą, persikrauna po gedimo ir apskritai elgiasi kaip įrenginys. Truputį nuobodu, bet daug geriau.
Įgūdžių sistema: padarykite ją iš tikrųjų naudingą namuose 🏠✨
Kai įgarsinimas ir išgarsinimas bus tvarkingi, pridėkite veiksmus:
-
Intent maršrutizatorius : paprasti raktinių žodžių maršrutai įprastoms užduotims.
-
Išmanieji namai : publikuokite įvykius MQTT arba skambinkite „Home Assistant“ HTTP galiniams taškams.
-
Įskiepiai : greitos Python funkcijos, tokios kaip
„set_timer“,„what_is_the_time“,„play_radio“,„run_scene“.
Net ir turėdami debesies LLM cikle, pirmiausia nukreipkite akivaizdžias vietines komandas, kad būtų užtikrintas greitis ir patikimumas.
Tik vietinis ir „Cloud Assist“: kompromisai, kuriuos pajusite 🌓
Tik vietinis
Privalumai: privatus, neprisijungus, nuspėjamos išlaidos.
Trūkumai: sunkesni modeliai gali būti lėti mažose lentose. „Whisper“ daugiakalbis mokymas padeda išlaikyti patikimumą, jei jį laikote įrenginyje arba netoliese esančiame serveryje. [3]
Debesijos pagalbos
privalumai: veiksmingas samprotavimas, didesni kontekstiniai langai.
Trūkumai: duomenys palieka įrenginį, priklausomybė nuo tinklo, kintamos išlaidos.
Hibridas dažnai laimi: pažadinimo žodis + ASR vietinis → iškviečia API samprotavimui → TTS vietinis. [2][3][5]
Trikčių šalinimas: keisti gremlinai ir greiti sprendimai 👾
-
Žodinio pažadinimo klaidingi suveikimai : sumažinkite jautrumą arba išbandykite kitą mikrofoną. [2]
-
ASR delsa : naudokite mažesnį „Whisper“ modelį arba sukurkite
„whisper.cpp“su išleidimo vėliavėlėmis (-j --config Release). [4] -
Nutrūkstamas TTS : iš anksto sugeneruokite įprastas frazes; patvirtinkite savo garso įrenginį ir diskretizavimo dažnius.
-
Neaptiktas mikrofonas : patikrinkite
„arecord -l“ir maišytuvus. -
Terminis droseliavimas : ilgalaikiam veikimui „Pi 5“ naudokite oficialų aktyvųjį aušintuvą. [1]
Saugumo ir privatumo pastabos, kurias turėtumėte perskaityti 🔒
-
Nuolat atnaujinkite savo Pi su APT.
-
Jei naudojate debesies API, pirmiausia užregistruokite siunčiamus duomenis ir apsvarstykite galimybę vietoje redaguoti asmeninius duomenis.
-
Paleiskite paslaugas su mažiausiais privilegijomis; venkite
sudokomandą „ExecStart“, nebent tai būtina. -
Svečiams numatyti tik vietinį režimą
Konstravimo variantai: derinkite kaip sumuštinį 🥪
-
Ultralokalus : Porcupine + whisper.cpp + Piper + paprastos taisyklės. Privatus ir tvirtas. [2][4][5]
-
Greitas debesies palaikymas : „Porcupine“ + (mažesnis vietinis „Whisper“ arba debesies ASR) + vietinis TTS + debesies LLM.
-
Namų automatizavimo centras : pridėkite „Node-RED“ arba „Home Assistant“ srautus, skirtus rutinoms, scenoms ir jutikliams.
Įgūdžio pavyzdys: Šviesos įjungtos per MQTT 💡
import paho.mqtt.client as mqtt MQTT_HOST = "192.168.1.10" TOPIC = "namai/svetainė/apšvietimas/nustatymas" def set_light(state: str): client = mqtt.Client() client.connect(MQTT_HOST, 1883, 60) payload = "ĮJUNGTA" if state.lower().startswith("įjungta") else "IŠJUNGTA" client.publish(TOPIC, payload, qos=1, retain=False) client.disconnect() # if "įjungti šviesas" in text: set_light("įjungta")
Pridėkite tokią balso frazę kaip: „įjunkite svetainės lempą“ ir pasijusite kaip burtininkas.
Kodėl šis stekas veikia praktiškai 🧪
-
„Porcupine“ efektyviai ir tiksliai aptinka pažadinimo žodžius mažose lentose, todėl įmanoma nuolat klausytis. [2]
-
Platus, daugiakalbis „Whisper“ mokymų paketas yra atsparus įvairioms aplinkoms ir akcentams. [3]
-
„whisper.cpp“leidžia naudoti šią galią tik procesoriaus valdomuose įrenginiuose, tokiuose kaip „Pi“. [4] -
„Piper“ užtikrina greitus atsakymus neperkeliant garso į debesies TTS. [5]
Per ilga, neskaičiau
Sukurkite modulinį, privatų „pasidaryk pats“ dirbtinio intelekto asistentą su „Raspberry Pi“ , derindami „Porcupine“ žadinimo žodžiui, „Whisper“ (per whisper.cpp ) ASR, pasirinktą „smegenį“ atsakymams ir „Piper“ vietiniam TTS. Apvyniokite jį kaip sisteminę paslaugą, sureguliuokite garsą ir prijunkite MQTT arba HTTP veiksmus. Tai pigiau, nei manote, ir, keistai, malonu su tuo gyventi. [1][2][3][4][5]
Nuorodos
-
„Raspberry Pi“ programinė įranga ir aušinimas – „Raspberry Pi Imager“ (atsisiųskite ir naudokite) ir „Pi 5 Active Cooler“ produkto informacija
-
Raspberry Pi Imager: skaitykite daugiau
-
Aktyvus aušintuvas (Pi 5): skaitykite daugiau
-
-
„Porcupine Wake Word“ – SDK ir greita pradžia (raktiniai žodžiai, jautrumas, vietinis išvados darymas)
-
„Whisper“ (ASR modelis) – daugiakalbis, patikimas ASR, apmokytas maždaug 680 tūkst. valandų
-
Radford ir kt., Patikimas kalbos atpažinimas taikant didelio masto silpną priežiūrą (Whisper): skaitykite daugiau
-
-
whisper.cpp – procesoriui pritaikyta „Whisper“ išvada su CLI ir kūrimo žingsniais
-
„Piper TTS“ – greitas, vietinis neuroninis TTS su keliais balsais / kalbomis