Cum să construiești un asistent AI DIY cu Raspberry Pi

Cum să construiești un asistent AI DIY cu Raspberry Pi

Îți dorești un asistent vocal minuscul care să te urmeze cu adevărat, să funcționeze pe propriul hardware și să nu comande accidental doisprezece ananasuri pentru că te-a auzit greșit? Un asistent AI DIY cu Raspberry Pi este surprinzător de realizabil, distractiv și flexibil. Vei conecta un cuvânt de trezire, recunoaștere vocală (ASR = recunoaștere automată a vorbirii), un creier pentru limbaj natural (reguli sau un LLM) și text-to-speech (TTS). Adaugă câteva scripturi, unul sau două servicii și câteva setări audio atente și ai o boxă inteligentă de buzunar care respectă regulile tale.

Hai să te ducem de la zero la a vorbi cu Pi-ul tău, fără obișnuitele smucituri. Vom acoperi componentele, configurarea, codul, comparațiile, problemele... tot burrito-ul. 🌯

Articole pe care ți-ar putea plăcea să le citești după acesta:

🔗 Cum să studiezi eficient inteligența artificială
Creați o foaie de parcurs pentru studiu, exersați proiecte și urmăriți progresul.

🔗 Cum să pornești o companie de inteligență artificială
Validarea problemei, construirea MVP-ului, formarea echipei, asigurarea clienților inițiali.

🔗 Cum să folosești inteligența artificială pentru a fi mai productiv
Automatizează sarcinile de rutină, eficientizează fluxurile de lucru și sporește producția creativă.

🔗 Cum să integrezi inteligența artificială în afacerea ta
Identificați procese cu impact ridicat, implementați proiecte pilot, măsurați rentabilitatea investiției, scalați.


Ce face un asistent AI DIY bun cu Raspberry Pi ✅

  • Privat în mod implicit – păstrează sunetul local acolo unde este posibil. Tu decizi ce iese de pe dispozitiv.

  • Modular – componente de înlocuire precum Lego: motor de cuvinte de trezire, ASR, LLM, TTS.

  • Accesibil – în mare parte open source, microfoane, difuzoare și un Pi obișnuite.

  • Hackabil – vrei automatizare a locuinței, tablouri de bord, rutine, abilități personalizate? Simplu.

  • Fiabil – gestionat de servicii, pornește și începe să asculte automat.

  • Distractiv – vei învăța multe despre audio, procese și design bazat pe evenimente.

Un mic sfat: Dacă folosești un Raspberry Pi 5 și intenționezi să folosești modele locale mai grele, un cooler cu clips te ajută la sarcină susținută. (Dacă ai dubii, alege coolerul activ oficial conceput pentru Pi 5.) [1]


Piese și unelte de care veți avea nevoie 🧰

  • Raspberry Pi : Se recomandă Pi 4 sau Pi 5 pentru spațiu liber.

  • Card microSD : se recomandă 32 GB+.

  • Microfon USB : un microfon USB simplu pentru conferințe este excelent.

  • Difuzor : difuzor USB sau de 3,5 mm sau un amplificator I2S HAT.

  • Rețea : Ethernet sau Wi-Fi.

  • Dotări opționale: carcasă, răcitor activ pentru Pi 5, buton pentru funcția „apasă și vorbește”, inel LED. [1]

Configurarea sistemului de operare și a liniei de bază

  1. Flashează sistemul de operare Raspberry Pi cu Raspberry Pi Imager. Este modalitatea simplă de a obține o cartelă microSD bootabilă cu presetările dorite. [1]

  2. Porniți, conectați-vă la rețea, apoi actualizați pachetele:

sudo apt update && sudo apt upgrade -y
  1. Noțiuni de bază despre audio : Pe Raspberry Pi OS puteți seta ieșirea implicită, nivelurile și dispozitivele prin intermediul interfeței desktop sau al funcției raspi-config . Ieșirea audio USB și HDMI este acceptată pe toate modelele; ieșirea Bluetooth este disponibilă pe modelele cu Bluetooth. [1]

  2. Verificați dispozitivele:

arecord -l redare -l

Apoi testează captura și redarea. Dacă nivelurile par ciudate, verifică mixerele și setările implicite înainte de a da vina pe microfon.

 

Raspberry Pi cu inteligență artificială

Arhitectura dintr-o privire 🗺️

Un asistent AI DIY practic cu Raspberry Pi flow arată astfel:

Cuvânt de trezire → captură audio live → transcriere ASR → gestionarea intenției sau LLM → text de răspuns → TTS → redare audio → acțiuni opționale prin MQTT sau HTTP.

  • Cuvânt cheie : Porcupine este mic, precis și rulează local cu control al sensibilității pentru fiecare cuvânt cheie în parte. [2]

  • ASR : Whisper este un model ASR multilingv, de uz general, antrenat pe parcursul a ~680k ore; este robust la accente/zgomot de fundal. Pentru utilizare pe dispozitiv, whisper.cpp oferă o cale de inferență C/C++ simplificată. [3][4]

  • Brain : Alegerea ta – un LLM în cloud prin API, un motor de reguli sau inferență locală, în funcție de putere.

  • TTS : Piper generează vorbire naturală local, suficient de rapid pentru răspunsuri rapide pe hardware modest. [5]


Tabel comparativ rapid 🔎

Instrument Cel mai bun pentru Preț cam mic De ce funcționează
Porcupine Wake Word Declanșator de ascultare permanentă Nivel gratuit + CPU redus, precis, legături ușoare [2]
Șoaptă.cpp ASR local pe Pi Sursă deschisă Precizie bună, prietenos cu procesorul [4]
Șoaptă mai rapidă ASR mai rapid pe CPU/GPU Sursă deschisă Optimizări CTranslate2
Piper TTS Ieșire vocală locală Sursă deschisă Voci rapide, multe limbi [5]
API-ul Cloud LLM Raționament bogat Bazat pe utilizare Elimină sarcinile de calcul intense
Nod-RED Orchestrarea acțiunilor Sursă deschisă Fluxuri vizuale, compatibile cu MQTT

Construcție pas cu pas: Prima ta buclă vocală 🧩

Vom folosi Porcupine pentru cuvântul de trezire, Whisper pentru transcriere, o funcție ușoară „creier” pentru răspuns (înlocuiți cu LLM-ul ales) și Piper pentru vorbire. Păstrați-l minimal, apoi iterați.

1) Instalați dependențele

sudo apt install -y python3-pip portaudio19-dev sox ffmpeg pip3 instalează sounddevice numpy
  • Porcupine: ia SDK-ul/legaturile pentru limba ta și urmează instrucțiunile de pornire rapidă (cheie de acces + listă de cuvinte cheie + cadre audio → .process ). [2]

  • Whisper (prietenos cu procesorul): construiește whisper.cpp :

clonă git 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 fișierul_tau.wav -otxt

Cele de mai sus reflectă demararea rapidă a proiectului. [4]

Preferi Python? faster-whisper (CTranslate2) este adesea mai rapid decât Python standard pe procesoare modeste.

2) Configurați Piper TTS

git clone https://github.com/rhasspy/piper cd piper make # Descarcă un model vocal care îți place, de ex., ro_US-amy echo „Salut.” | ./piper --model voices/ro/ro_US-amy-medium.onnx --output_file hello.wav aplay hello.wav

Piper este conceput pentru TTS pe dispozitiv cu opțiuni multiple de voce/limbă. [5]

3) O buclă asistentă minimală în Python

Deliberat compact: așteaptă o frază de activare (stub), înregistrează, transcrie cu whisper.cpp , generează un răspuns (substitut), apoi vorbește prin Piper. Schimbați substituentul cu LLM-ul sau logica de regulă preferată.

import os, subprocess, wave import sounddevice as sd WAKE_WORD = "hey computer" # schimbă pentru Porcupine în producție [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(secunde * SAMPLE_RATE), samplerate=SAMPLE_RATE, channels=CHANNELS, dtype='int16') sd.wait() cu wave.open(cale, 'wb') ca 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 "vreme" in prompt.lower(): return "Nu văd norii, dar s-ar putea să fie bine. Adu-ți o jachetă pentru orice eventualitate." return "Ai spus: " + 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("Asistentul este gata. Introduceți fraza de activare pentru testare.") 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("Utilizator:", text); print("Asistent:", reply) speak(reply) else: print("Introduceți fraza de activare pentru a testa bucla.")

Pentru detectarea reală a cuvintelor cheie, integrați detectorul de streaming din Porcupine (sensibilitate redusă a CPU-ului, per cuvânt cheie). [2]


Reglarea audio care chiar contează 🎚️

Câteva mici remedieri îl fac pe asistentul tău să pară de 10 ori mai inteligent:

  • Distanța microfonului : 30–60 cm este un punct ideal pentru multe microfoane USB.

  • Niveluri : evitați clipping-ul la intrare și mențineți redarea sănătoasă; remediați rutarea înainte de a urmări codul fantomă. Pe Raspberry Pi OS, puteți gestiona dispozitivul de ieșire și nivelurile prin intermediul instrumentelor de sistem sau al raspi-config . [1]

  • Acustica camerei : pereții tari provoacă ecouri; un covoraș moale sub microfon ajută.

  • Pragul cuvântului de activare : prea sensibil → declanșatoare fantomă; prea strict → vei țipa la plastic. Porcupine îți permite să ajustezi sensibilitatea în funcție de cuvântul cheie. [2]

  • Termicitate : transcripțiile lungi de pe Pi 5 beneficiază de răcitorul activ oficial pentru performanță susținută. [1]


De la jucărie la electrocasnic: Servicii, pornire automată, verificări ale stării de funcționare 🧯

Oamenii uită să ruleze scripturi. Calculatoarele uită să fie amabile. Transformă-ți bucla într-un serviciu gestionat:

  1. Creați o unitate systemd:

[Unitate] Descriere=Asistent vocal DIY După=network.target sound.target [Serviciu] Utilizator=pi Director de lucru=/home/pi/assistant ExecStart=/usr/bin/python3 /home/pi/assistant/assistant.py Restart=always RestartSec=3 [Instalare] WantedBy=multi-user.target
  1. Activează-l:

sudo cp assistant.service /etc/systemd/system/ sudo systemctl daemon-reload sudo systemctl enable --now assistant.service
  1. Cozi de jurnal:

journalctl -u asistent -f

Acum pornește la bootare, repornește la blocare și, în general, se comportă ca un dispozitiv. Un pic plictisitor, mult mai bun.


Sistem de abilități: Fă-l cu adevărat util acasă 🏠✨

După ce vocea de intrare și de ieșire este solidă, adăugați acțiuni:

  • Router de intenție : rute simple de cuvinte cheie pentru sarcini comune.

  • Casă inteligentă : publicați evenimente în MQTT sau apelați punctele finale HTTP ale Home Assistant.

  • Plugin-uri : funcții rapide Python precum set_timer , what_is_the_time , play_radio , run_scene .

Chiar și cu un LLM în cloud în buclă, direcționați mai întâi comenzile locale evidente pentru viteză și fiabilitate.


Numai Local vs. Asistență în Cloud: Compromisuri pe care le vei simți 🌓

Numai local
Avantaje: privat, offline, costuri previzibile.
Dezavantaje: modelele mai grele pot fi lente pe plăci mici. Antrenamentul multilingv al Whisper ajută la robustețe dacă îl păstrați pe dispozitiv sau pe un server din apropiere. [3]

asistență în cloud
: raționament puternic, ferestre contextuale mai mari.
Dezavantaje: datele părăsesc dispozitivul, dependență de rețea, costuri variabile.

Un hibrid câștigă adesea: cuvânt de activare + ASR local → apelează un API pentru raționament → TTS local. [2][3][5]


Depanare: Gremlini ciudați și remedieri rapide 👾

  • Declanșări false ale cuvântului de activare : reduceți sensibilitățile sau încercați un alt microfon. [2]

  • Lag ASR : folosiți un model Whisper mai mic sau construiți whisper.cpp cu semnalizatoare de lansare ( -j --config Release ). [4]

  • TTS sacadat : pre-generează fraze comune; confirmă dispozitivul audio și ratele de eșantionare.

  • Niciun microfon detectat : verificați arecord -l și mixerele.

  • Limitare termică : utilizați sistemul oficial de răcire activă de pe Pi 5 pentru performanță susținută. [1]


Note de securitate și confidențialitate pe care ar trebui să le citești cu adevărat 🔒

  • Menține-ți Pi-ul actualizat cu APT.

  • Dacă folosești orice API în cloud, înregistrează ceea ce trimiți și ia în considerare mai întâi cenzurarea locală a informațiilor personale.

  • Rulați serviciile cu cele mai puține privilegii; evitați sudo în ExecStart decât dacă este necesar.

  • Oferiți un mod exclusiv local pentru oaspeți sau în orele liniștite.


Variante de construcție: Combină și asortează ca un sandviș 🥪

  • Ultra-local : Porcupine + whisper.cpp + Piper + reguli simple. Privat și robust. [2][4][5]

  • Asistență rapidă în cloud : Porcupine + (Whisper local mai mic sau ASR în cloud) + TTS local + LLM în cloud.

  • Centrală de automatizare a locuinței : Adăugați fluxuri Node-RED sau Home Assistant pentru rutine, scene și senzori.


Exemplu de abilitate: Aprinderea luminilor prin MQTT 💡

import paho.mqtt.client as mqtt MQTT_HOST = "192.168.1.10" TOPIC = "acasă/sufragerie/lumină/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 "aprinde luminile" in text: set_light("on")

Adaugă o replică vocală precum: „aprinde lampa din sufragerie” și te vei simți ca un vrăjitor.


De ce funcționează această stivă în practică 🧪

  • Porcupine este eficient și precis în detectarea cuvintelor cheie pe plăci mici, ceea ce face posibilă ascultarea permanentă. [2]

  • Antrenamentul amplu și multilingv al programului Whisper îl face robust în medii și accente variate. [3]

  • whisper.cpp menține acea putere utilizabilă pe dispozitivele care folosesc doar CPU, cum ar fi Pi. [4]

  • Piper menține răspunsurile rapide fără a trimite sunetul către un TTS în cloud. [5]


Prea lung, nu l-am citit

asistent AI modular, privat, , combinând Porcupine pentru cuvântul de trezire, Whisper (prin whisper.cpp ) pentru ASR, creierul ales pentru răspunsuri și Piper pentru TTS local. Împachetează-l ca un serviciu systemd, ajustează sunetul și conectează acțiunile MQTT sau HTTP. Este mai ieftin decât crezi și, în mod ciudat, plăcut de utilizat. [1][2][3][4][5]


Referințe

  1. Software și răcire Raspberry Pi – Raspberry Pi Imager (descărcare și utilizare) și informații despre produsul Pi 5 Active Cooler

  2. Porcupine Wake Word – SDK și pornire rapidă (cuvinte cheie, sensibilitate, inferență locală)

  3. Whisper (model ASR) – ASR robust, multilingv, antrenat pe o perioadă de ~680.000 de ore

    • Radford și colab., Recunoaștere robustă a vorbirii prin supraveghere slabă la scară largă (Whisper): citește mai mult

  4. whisper.cpp – Inferență Whisper prietenoasă cu procesorul, cu CLI și pași de compilare

  5. Piper TTS – TTS neuronal local rapid, cu voci/limbi multiple

Găsește cea mai recentă tehnologie AI în Magazinul oficial de asistenți AI

Despre noi


Înapoi la blog