Paano gumawa ng DIY AI Assistant gamit ang Raspberry Pi

Paano gumawa ng DIY AI Assistant gamit ang Raspberry Pi

Gusto mo ba ng maliit na voice assistant na susunod sa gusto mo, tatakbo gamit ang sarili mong hardware, at hindi aksidenteng umoorder ng labindalawang pinya dahil lang sa mali ang pagkakarinig mo? Nakakagulat na nakakamit, masaya, at flexible ang isang DIY AI Assistant na may Raspberry Pi . Magkakaroon ka ng wake word, speech recognition (ASR = automatic speech recognition), utak para sa natural na wika (mga patakaran o LLM), at text-to-speech (TTS). Magdagdag ng ilang script, isa o dalawang serbisyo, at ilang maingat na pag-aayos ng audio, at mayroon ka nang mabulsa na smart speaker na sumusunod sa iyong mga patakaran.

Simulan natin ang pakikipag-usap sa iyong Pi nang walang karaniwang paghila. Tatalakayin natin ang mga piyesa, pag-setup, code, paghahambing, mga dapat malaman... ang buong burrito. 🌯

Mga artikulong maaaring gusto mong basahin pagkatapos nito:

🔗 Paano epektibong pag-aralan ang AI
Gumawa ng roadmap para sa pag-aaral, mga proyektong pangpraktis, at subaybayan ang progreso.

🔗 Paano magsimula ng isang kumpanya ng AI
Patunayan ang problema, bumuo ng MVP, bumuo ng team, at mag-secure ng mga inisyal na customer.

🔗 Paano gamitin ang AI para maging mas produktibo
I-automate ang mga nakagawiang gawain, pahusayin ang mga daloy ng trabaho, at dagdagan ang malikhaing output.

🔗 Paano isama ang AI sa iyong negosyo
Tukuyin ang mga prosesong may malaking epekto, ipatupad ang mga pilot program, sukatin ang ROI, at palakihin.


Ano ang Gumagawa ng Isang Mahusay na DIY AI Assistant Gamit ang Raspberry Pi ✅

  • Pribado bilang default – panatilihing lokal ang audio hangga't maaari. Ikaw ang magpapasya kung ano ang lalabas sa device.

  • Modular – pagpapalit ng mga bahagi tulad ng Lego: wake word engine, ASR, LLM, TTS.

  • Abot-kaya – karamihan ay open source, commodity mics, speakers, at isang Pi.

  • Hackable – gusto mo ba ng home automation, mga dashboard, mga routine, mga custom skill? Madali lang.

  • Maaasahan – pinamamahalaan ang serbisyo, awtomatikong nagbo-boot at nagsisimulang makinig.

  • Masaya – marami kang matututunan tungkol sa audio, mga proseso, at disenyong batay sa kaganapan.

Maliit na tip: Kung gumagamit ka ng Raspberry Pi 5 at plano mong gumamit ng mas mabibigat na lokal na modelo, makakatulong ang isang clip-on cooler sa ilalim ng matagal na karga. (Kung may pag-aalinlangan, piliin ang opisyal na Active Cooler na idinisenyo para sa Pi 5.) [1]


Mga Bahagi at Kagamitan na Kakailanganin Mo 🧰

  • Raspberry Pi : Inirerekomenda ang Pi 4 o Pi 5 para sa headroom.

  • microSD card : inirerekomenda ang 32 GB+.

  • Mikroponong USB : mahusay ang isang simpleng USB conference mic.

  • Speaker : USB o 3.5 mm speaker, o isang I2S amp HAT.

  • Network : Ethernet o Wi-Fi.

  • Mga opsyonal na detalye: case, active cooler para sa Pi 5, push button para sa push-to-talk, LED ring. [1]

Pag-setup ng OS at Baseline

  1. I-flash ang Raspberry Pi OS gamit ang Raspberry Pi Imager. Ito ang direktang paraan para makakuha ng bootable microSD na may mga preset na gusto mo. [1]

  2. Mag-boot, kumonekta sa network, pagkatapos ay i-update ang mga pakete:

sudo apt update at sudo apt upgrade -y
  1. Mga Pangunahing Kaalaman sa Audio : Sa Raspberry Pi OS, maaari mong itakda ang default na output, mga antas, at mga device sa pamamagitan ng desktop UI o raspi-config . Sinusuportahan ang USB at HDMI audio sa iba't ibang modelo; Available ang Bluetooth output sa mga modelong may Bluetooth. [1]

  2. I-verify ang mga device:

arecord -l aplay -l

Pagkatapos ay subukan ang pagkuha at pag-playback. Kung tila kakaiba ang mga antas, suriin ang mga mixer at default bago sisihin ang mikropono.

 

AI raspberry pi

Ang Arkitektura sa Isang Sulyap 🗺️

Ganito ang hitsura ng isang matalinong DIY AI Assistant na may Raspberry Pi

Wake word → live audio capture → ASR transcription → intent handling o LLM → response text → TTS → audio playback → opsyonal na mga aksyon sa pamamagitan ng MQTT o HTTP.

  • Wake word : Ang Porcupine ay maliit, tumpak, at tumatakbo nang lokal na may kontrol sa sensitivity ng bawat keyword. [2]

  • ASR : Ang Whisper ay isang multilingual, pangkalahatang-gamit na modelo ng ASR na sinanay sa ~680k oras; matatag ito sa mga accent/ingay sa background. Para sa paggamit sa device, ang whisper.cpp ay nagbibigay ng isang lean C/C++ inference path. [3][4]

  • Utak : Ang iyong pipiliin – isang cloud LLM sa pamamagitan ng API, isang rules engine, o lokal na paghihinuha depende sa horsepower.

  • TTS : Ang Piper ay bumubuo ng natural na pagsasalita nang lokal, sapat na mabilis para sa mabilis na mga tugon sa katamtamang hardware. [5]


Mabilisang Talahanayan ng Paghahambing 🔎

Kagamitan Pinakamahusay Para sa Presyo lang Bakit Ito Gumagana
Porcupine Wake Word Palaging nakikinig na gatilyo Libreng antas + Mababang CPU, tumpak, madaling pag-bind [2]
Whisper.cpp Lokal na ASR sa Pi Bukas na pinagmulan Mahusay na katumpakan, madaling gamitin sa CPU [4]
Mas Mabilis na Bulong Mas mabilis na ASR sa CPU/GPU Bukas na pinagmulan Mga pag-optimize ng CTranslate2
Piper TTS Lokal na output ng pagsasalita Bukas na pinagmulan Mabilis na mga boses, maraming wika [5]
Cloud LLM API Mayaman na pangangatwiran Batay sa paggamit Nag-aalis ng mabibigat na compute
Node-RED Pag-oorganisa ng mga aksyon Bukas na pinagmulan Mga daloy ng biswal, angkop para sa MQTT

Hakbang-hakbang na Pagbuo: Ang Iyong Unang Voice Loop 🧩

Gagamitin natin ang Porcupine para sa wake word, ang Whisper para sa transcription, isang magaan na "brain" function para sa reply (palitan ng LLM na gusto mo), at ang Piper para sa speech. Gawin itong minimal, pagkatapos ay ulitin.

1) Mga dependency sa pag-install

sudo apt install -y python3-pip portaudio19-dev sox ffmpeg pip3 install sounddevice numpy
  • Porcupine: kunin ang SDK/bindings para sa iyong wika at sundin ang mabilisang pagsisimula (access key + keyword list + audio frames → .process ). [2]

  • Bulong (CPU-friendly): buuin ang bulong.cpp :

I-clone ang git https://github.com/ggml-org/whisper.cpp cd whisper.cpp at cmake -B build at 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

Ang nasa itaas ay sumasalamin sa mabilis na pagsisimula ng proyekto. [4]

Mas gusto ang Python? Ang faster-whisper (CTranlate2) ay kadalasang mas mabilis gamitin kaysa sa vanilla Python sa mga katamtamang laki ng CPU.

2) I-set up ang Piper TTS

git clone https://github.com/rhasspy/piper cd piper make # Mag-download ng voice model na gusto mo, hal., en_US-amy echo "Kumusta." | ./piper --model voices/en/en_US-amy-medium.onnx --output_file hello.wav aplay hello.wav

Ang Piper ay dinisenyo para sa on-device TTS na may maraming opsyon sa boses/wika. [5]

3) Isang minimal na loop ng katulong sa Python

Sinadyang siksik: naghihintay ng wake phrase (stub), nagre-record, nag-transcribe gamit ang whisper.cpp , bumubuo ng reply (placeholder), pagkatapos ay nagsasalita sa pamamagitan ng Piper. Palitan ang placeholder gamit ang iyong paboritong LLM o rule logic.

import os, subprocess, wave import sounddevice as sd WAKE_WORD = "hey computer" # palitan ang Porcupine sa produksyon [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(path, seconds=RECORD_SECONDS): audio = sd.rec(int(segundo * SAMPLE_RATE), samplerate=SAMPLE_RATE, mga channel=CHANNELS, dtype='int16') sd.wait() gamit ang wave.open(landas, 'wb') bilang 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 "weather" in prompt.lower(): return "Hindi ko makita ang mga ulap, pero baka ayos lang. Magdala ng jacket kung sakali." ibalik ang "Sabi mo: " + 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("Handa na ang Assistant. I-type ang wake phrase para subukan.") habang True: typed = input("> ").strip().lower() kung na-type == WAKE_WORD: wav_path = f"{WORKDIR}/input.wav" record_wav(wav_path) text = transcribe(wav_path) reply = generate_reply(text) print("User:", text); print("Assistant:", reply) speak(reply) else: print("I-type ang wake phrase para subukan ang loop.")

Para sa totoong wake-word detection, i-integrate ang streaming detector ng Porcupine (mababang CPU, per-keyword sensitivity). [2]


Pag-tune ng Audio na Tunay na Mahalaga 🎚️

May ilang maliliit na solusyon na makakatulong para maging mas matalino ang iyong assistant nang 10x:

  • Distansya ng mikropono : 30–60 cm ang pinakamainam na gamitin para sa maraming USB mic.

  • Mga Antas : iwasan ang pag-clip sa input at panatilihing maayos ang playback; ayusin ang routing bago habulin ang mga code ghost. Sa Raspberry Pi OS, maaari mong pamahalaan ang output device at mga antas sa pamamagitan ng mga system tool o raspi-config . [1]

  • Akustika ng silid : ang matigas na dingding ay nagdudulot ng mga alingawngaw; nakakatulong ang malambot na banig sa ilalim ng mikropono.

  • Wake word threshold : masyadong sensitibo → ghost triggers; masyadong mahigpit → sisigaw ka sa plastik. Binibigyang-daan ka ng Porcupine na baguhin ang sensitivity sa bawat keyword. [2]

  • Thermals : ang mahahabang transkripsyon sa Pi 5 ay nakikinabang mula sa opisyal na aktibong cooler para sa patuloy na pagganap. [1]


Mula Laruan Tungo sa Kagamitan: Mga Serbisyo, Awtomatikong Pagsisimula, Mga Pagsusuri sa Kalusugan 🧯

Nakakalimutan ng mga tao na magpatakbo ng mga script. Nakakalimutan ng mga computer na maging mabait. Gawing isang pinamamahalaang serbisyo ang iyong loop:

  1. Gumawa ng isang systemd unit:

[Yunit] Paglalarawan=DIY Voice Assistant Pagkatapos=network.target sound.target [Serbisyo] Gumagamit=pi WorkingDirectory=/home/pi/assistant ExecStart=/usr/bin/python3 /home/pi/assistant/assistant.py I-restart=palaging I-restartSec=3 [I-install] WantedBy=multi-user.target
  1. Paganahin ito:

sudo cp assistant.service /etc/systemd/system/ sudo systemctl daemon-reload sudo systemctl paganahin --now assistant.service
  1. Mga buntot ng troso:

journalctl -u katulong -f

Ngayon ay nagsisimula ito sa pag-boot, muling nagre-restart sa pag-crash, at karaniwang kumikilos na parang isang appliance. Medyo nakakabagot, mas maayos na.


Sistema ng Kasanayan: Gawin Itong Tunay na Kapaki-pakinabang sa Bahay 🏠✨

Kapag maayos na ang voice-in at voice-out, magdagdag ng mga aksyon:

  • Intent router : mga simpleng ruta ng keyword para sa mga karaniwang gawain.

  • Smart home : mag-publish ng mga kaganapan sa MQTT o tumawag sa mga HTTP endpoint ng Home Assistant.

  • Mga Plugin : mabibilis na function ng Python tulad ng set_timer , what_is_the_time , play_radio , at run_scene .

Kahit na may cloud LLM na naka-loop, i-ruta muna ang mga halatang lokal na command para sa bilis at pagiging maaasahan.


Local Only vs Cloud Assist: Mga Kalamangan na Mararamdaman Mo 🌓

Lokal lamang
Mga Kalamangan: pribado, offline, mahuhulaan ang mga gastos.
Mga Kahinaan: ang mas mabibigat na modelo ay maaaring mabagal sa maliliit na board. Ang multilingual training ng Whisper ay nakakatulong sa katatagan kung itatago mo ito sa device o sa isang kalapit na server. [3]

Cloud assist
Mga Kalamangan: mabisang pangangatwiran, mas malalaking context window.
Mga Kahinaan: umaalis ang data sa device, dependency sa network, pabagu-bagong gastos.

Madalas na nananalo ang isang hybrid: wake word + ASR local → tawagin ang isang API para sa pangangatwiran → TTS local. [2][3][5]


Pag-troubleshoot: Mga Kakaibang Gremlin at Mabilisang Pag-aayos 👾

  • Mga maling trigger ng Wake word : mas mababang sensitibidad o subukan ang ibang mikropono. [2]

  • ASR lag : gumamit ng mas maliit na modelo ng Whisper o bumuo ng whisper.cpp na may mga release flag ( -j --config Release ). [4]

  • Choppy TTS : paunang bumuo ng mga karaniwang parirala; kumpirmahin ang iyong audio device at mga rate ng sample.

  • Walang nakitang mikropono : tingnan ang arecord -l at mga mixer.

  • Thermal throttling : gamitin ang opisyal na Active Cooler sa Pi 5 para sa patuloy na pagganap. [1]


Mga Tala sa Seguridad at Pagkapribado na Dapat Mong Basahin 🔒

  • Panatilihing updated ang iyong Pi gamit ang APT.

  • Kung gumagamit ka ng anumang cloud API, i-log ang iyong ipinapadala at isaalang-alang muna ang pag-redact ng mga personal na bits nang lokal.

  • Patakbuhin ang mga serbisyo nang may pinakamababang pribilehiyo; iwasan ang sudo sa ExecStart maliban kung kinakailangan.

  • Magbigay ng lokal na mode para sa mga bisita o mga oras ng katahimikan.


Mga Baryante ng Paggawa: Paghaluin at Pagtugmain na Parang Sandwich 🥪

  • Ultra-lokal : Porcupine + whisper.cpp + Piper + mga simpleng tuntunin. Pribado at matatag. [2][4][5]

  • Mabilis na tulong sa cloud : Porcupine + (mas maliit na lokal na Whisper o cloud ASR) + TTS local + cloud LLM.

  • Sentro ng automation sa bahay : Magdagdag ng mga daloy ng Node-RED o Home Assistant para sa mga routine, eksena, at sensor.


Halimbawang Kasanayan: Pag-ilaw gamit ang MQTT 💡

import paho.mqtt.client as mqtt MQTT_HOST = "192.168.1.10" PAKSA = "bahay/sala/ilaw/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 "i-on ang mga ilaw" sa teksto: set_light("on")

Magdagdag ng linya ng boses tulad ng: “buksan mo ang lampara sa sala,” at mararamdaman mong isa kang salamangkero.


Bakit Gumagana ang Stack na Ito sa Praktikal na Operasyon 🧪

  • Mahusay at tumpak ang Porcupine sa pagtukoy ng mga salitang nagising sa maliliit na board, kaya naman posible ang palaging pakikinig. [2]

  • Ang malawak at multilingual na pagsasanay ng Whisper ay ginagawa itong matatag sa iba't ibang kapaligiran at mga punto. [3]

  • ng whisper.cpp na magagamit ang kuryenteng iyon sa mga CPU-only device tulad ng Pi. [4]

  • Pinapanatili ng Piper na mabilis ang mga tugon nang hindi nagpapadala ng audio sa isang cloud TTS. [5]


Masyadong mahaba, hindi ko nabasa

Gumawa ng modular at pribadong DIY AI Assistant gamit ang Raspberry Pi sa pamamagitan ng pagsasama ng Porcupine para sa wake word, Whisper (sa pamamagitan ng whisper.cpp ) para sa ASR, ang iyong napiling utak para sa mga tugon, at Piper para sa lokal na TTS. I-wrap ito bilang isang systemd service, i-tune ang audio, at i-wire sa MQTT o HTTP actions. Mas mura ito kaysa sa iniisip mo, at kakaibang kasiya-siyang gamitin. [1][2][3][4][5]


Mga Sanggunian

  1. Software at Pagpapalamig ng Raspberry Pi – Impormasyon ng produkto ng Raspberry Pi Imager (i-download at gamitin) at Pi 5 Active Cooler

  2. Porcupine Wake Word – SDK at mabilis na pagsisimula (mga keyword, sensitibidad, lokal na hinuha)

  3. Whisper (modelo ng ASR) – Multilingual, matatag na ASR na sinanay sa loob ng ~680k na oras

    • Radford et al., Matatag na Pagkilala sa Pagsasalita sa pamamagitan ng Malawakang Mahinang Superbisyon (Whisper): magbasa pa

  4. whisper.cpp – CPU-friendly na Whisper inference gamit ang CLI at mga hakbang sa pagbuo

  5. Piper TTS – Mabilis, lokal na neural TTS na may maraming boses/wika

Hanapin ang Pinakabagong AI sa Opisyal na Tindahan ng AI Assistant

Tungkol sa Amin


Balik sa blog