Com crear un assistent d'IA DIY amb Raspberry Pi

Com crear un assistent d'IA DIY amb Raspberry Pi

Voleu un assistent de veu petit que realment segueixi el vostre exemple, funcioni amb el vostre propi maquinari i no demani accidentalment dotze pinyes perquè us ha sentit malament? Un assistent d'IA casolà amb Raspberry Pi és sorprenentment assolible, divertit i flexible. Connectareu una paraula de despertador, reconeixement de veu (ASR = reconeixement automàtic de veu), un cervell per al llenguatge natural (regles o un LLM) i text a veu (TTS). Afegiu-hi uns quants scripts, un o dos serveis i alguns ajustos d'àudio acurats, i tindreu un altaveu intel·ligent de butxaca que obeeix les vostres regles.

Et portarem de zero a parlar amb el teu Pi sense les estrebades habituals. Tractarem les peces, la configuració, el codi, les comparacions, els enganys... tot el burrito. 🌯

Articles que potser t'agradaria llegir després d'aquest:

🔗 Com estudiar la IA de manera eficaç
Crea una guia d'estudi, practica projectes i fes un seguiment del progrés.

🔗 Com iniciar una empresa d'IA
Validar el problema, construir el MVP, reunir l'equip, assegurar els clients inicials.

🔗 Com utilitzar la IA per ser més productiu
Automatitza les tasques rutinàries, optimitza els fluxos de treball i augmenta la producció creativa.

🔗 Com incorporar la IA al teu negoci
Identificar processos d'alt impacte, implementar pilots, mesurar el retorn de la inversió, escalar.


Què fa que un assistent d'IA DIY sigui un bon assistent amb Raspberry Pi ✅

  • Privat per defecte : mantén l'àudio local sempre que sigui possible. Tu decideixes què surt del dispositiu.

  • Modular : intercanvi de components com Lego: motor de paraules de despertador, ASR, LLM, TTS.

  • Assequible : majoritàriament de codi obert, micròfons, altaveus i una Pi.

  • Hackable : vols domòtica, quadres de comandament, rutines, habilitats personalitzades? Fàcil.

  • Fiable : gestionat per servei, arrenca i comença a escoltar automàticament.

  • Divertit : aprendràs molt sobre àudio, processos i disseny basat en esdeveniments.

Petit consell: si feu servir una Raspberry Pi 5 i teniu previst executar models locals més pesants, un refrigerador de clip ajuda sota una càrrega sostinguda. (En cas de dubte, trieu el refrigerador actiu oficial dissenyat per a Pi 5.) [1]


Recanvis i eines que necessitaràs 🧰

  • Raspberry Pi : es recomana Pi 4 o Pi 5 per al marge estàtic.

  • Targeta microSD : es recomana una o més de 32 GB.

  • Micròfon USB : un micròfon de conferència USB senzill és fantàstic.

  • Altaveu : altaveu USB o de 3,5 mm, o un amplificador I2S HAT.

  • Xarxa : Ethernet o Wi-Fi.

  • Accessoris opcionals: carcassa, refrigerador actiu per a Pi 5, botó per prémer per parlar, anell LED. [1]

Configuració del sistema operatiu i de la línia de base

  1. Flasheu el sistema operatiu Raspberry Pi amb Raspberry Pi Imager. És la manera senzilla d'obtenir una microSD d'arrencada amb els paràmetres preestablerts que vulgueu. [1]

  2. Arrencada, connexió a la xarxa i actualització dels paquets:

sudo apt update && sudo apt upgrade -y
  1. Conceptes bàsics d'àudio : al sistema operatiu Raspberry Pi podeu definir la sortida, els nivells i els dispositius predeterminats a través de la interfície d'usuari de l'escriptori o raspi-config . L'àudio USB i HDMI és compatible amb tots els models; la sortida Bluetooth està disponible en models amb Bluetooth. [1]

  2. Verificar dispositius:

arecord -l reproduir -l

Després, prova la captura i la reproducció. Si els nivells semblen estranys, comprova els mescladors i els valors per defecte abans de culpar el micròfon.

 

Raspberry Pi amb IA

L'arquitectura d'un cop d'ull 🗺️

Un assistent d'IA DIY sensat amb Raspberry Pi flow té aquest aspecte:

Paraula de despertador → captura d'àudio en directe → transcripció ASR → gestió d'intencions o LLM → text de resposta → TTS → reproducció d'àudio → accions opcionals via MQTT o HTTP.

  • Paraula de despertador : Porcupine és petit, precís i s'executa localment amb control de sensibilitat per paraula clau. [2]

  • ASR : Whisper és un model ASR multilingüe i d'ús general entrenat en ~680.000 hores; és robust als accents/soroll de fons. Per a ús en dispositius, whisper.cpp proporciona una ruta d'inferència C/C++ simplificada. [3][4]

  • Cervell : La teva elecció: un LLM al núvol mitjançant API, un motor de regles o inferència local segons la potència.

  • TTS : Piper genera veu natural localment, prou ràpid per a respostes àgils en maquinari modest. [5]


Taula de comparació ràpida 🔎

Eina Ideal per a Preu raonable Per què funciona
Paraula de despertar del porc espí Disparador d'escolta constant Nivell gratuït + CPU baixa, precisió, vinculacions fàcils [2]
Whisper.cpp ASR local a Pi Codi obert Bona precisió, optimitza el consum de CPU [4]
Xiuxiueig més ràpid ASR més ràpid a la CPU/GPU Codi obert Optimitzacions de CTranslate2
Piper TTS Sortida de veu local Codi obert Veus ràpides, molts idiomes [5]
API de Cloud LLM Raonament ric Basat en l'ús Descarrega càlculs pesats
Node-RED Orquestrant accions Codi obert Fluxos visuals, compatibles amb MQTT

Construcció pas a pas: el teu primer bucle de veu 🧩

Farem servir Porcupine per a la paraula de despertador, Whisper per a la transcripció, una funció "cervell" lleugera per a la resposta (substituïu-la per la vostra LLM preferida) i Piper per a la parla. Mantingueu-ho mínim i després itereu.

1) Instal·lar dependències

sudo apt install -y python3-pip portaudio19-dev sox ffmpeg pip3 install sounddevice numpy
  • Porcupine: agafa l'SDK/enllaços per al teu idioma i segueix les instruccions d'inici ràpid (tecla d'accés + llista de paraules clau + fotogrames d'àudio → .process ). [2]

  • Whisper (optimitzat per a la CPU): compila whisper.cpp :

cloneu el 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 el vostre.wav -otxt

L'anterior reflecteix l'inici ràpid del projecte. [4]

Prefereixes Python? faster-whisper (CTranslate2) sovint és més àgil que el Python estàndard en CPU modestes.

2) Configura el TTS de Piper

clone de git https://github.com/rhasspy/piper cd piper make # Baixeu un model de veu que us agradi, p. ex., en_US-amy echo "Hola." | ./piper --model voices/en/en_US-amy-medium.onnx --output_file hola.wav aplay hola.wav

Piper està dissenyat per a TTS en dispositiu amb múltiples opcions de veu/idioma. [5]

3) Un bucle d'assistent mínim en Python

Deliberadament compacte: espera una frase d'activació (stub), enregistra, transcriu amb whisper.cpp , genera una resposta (marcador de posició) i després parla a través de Piper. Canvia el marcador de posició amb el teu LLM o lògica de regla preferida.

importa os, subprocess, wave importa sounddevice as sd WAKE_WORD = "hey computer" # canvia per Porcupine en producció [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(segons * SAMPLE_RATE), samplerate=SAMPLE_RATE, channels=CHANNELS, dtype='int16') sd.wait() amb wave.open(path, 'wb') com a 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 "No puc veure els núvols, però podria estar bé. Porteu una jaqueta per si de cas." return "Has dit: " + 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("Assistent a punt. Escriu la frase d'activació per provar.") 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("Usuari:", text); print("Assistent:", reply) speak(reply) else: print("Escriu la frase d'activació per provar el bucle.")

Per a una detecció real de paraules clau, integreu el detector de flux de Porcupine (baixa sensibilitat de CPU i per paraula clau). [2]


Afinació d'àudio que realment importa 🎚️

Unes quantes petites correccions fan que el teu assistent sembli 10 vegades més intel·ligent:

  • Distància del micròfon : de 30 a 60 cm és un punt ideal per a molts micròfons USB.

  • Nivells : eviteu el retall a l'entrada i manteniu la reproducció sana; corregiu l'encaminament abans de perseguir els fantasmes del codi. Al sistema operatiu Raspberry Pi, podeu gestionar el dispositiu de sortida i els nivells mitjançant les eines del sistema o raspi-config . [1]

  • Acústica de la sala : les parets dures provoquen ressons; una estora tova sota el micròfon ajuda.

  • Llindar de paraula de despertador : massa sensible → activadors fantasma; massa estricte → estaràs cridant al plàstic. Porcupine et permet ajustar la sensibilitat per paraula clau. [2]

  • Tèrmiques : les transcripcions llargues del Pi 5 es beneficien del refrigerador actiu oficial per a un rendiment sostingut. [1]


De joguina a electrodomèstic: serveis, inici automàtic, comprovacions d'estat 🧯

Els humans s'obliden d'executar scripts. Els ordinadors s'obliden de ser amables. Converteix el teu bucle en un servei gestionat:

  1. Crea una unitat systemd:

[Unitat] Descripció=Assistent de veu DIY Després=network.target sound.target [Servei] Usuari=pi WorkingDirectory=/home/pi/assistant ExecStart=/usr/bin/python3 /home/pi/assistant/assistant.py Restart=always RestartSec=3 [Instal·lació] WantedBy=multi-user.target
  1. Activa-ho:

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

journalctl -u assistent -f

Ara s'inicia en arrencar, es reinicia en fallar i, en general, es comporta com un aparell. Una mica avorrit, molt millor.


Sistema d'habilitats: fes que sigui realment útil a casa 🏠✨

Un cop la veu d'entrada i de sortida estiguin sòlides, afegiu accions:

  • Encaminador d'intencions : rutes de paraules clau simples per a tasques comunes.

  • Llar intel·ligent : publica esdeveniments a MQTT o crida els punts finals HTTP de Home Assistant.

  • Complements : funcions ràpides de Python com ara set_timer , what_is_the_time , play_radio , run_scene .

Fins i tot amb un LLM al núvol al bucle, encamina primer les ordres locals òbvies per obtenir velocitat i fiabilitat.


Només local vs. Assistència al núvol: els inconvenients que notaràs 🌓

Només local
Avantatges: privat, fora de línia, costos predictibles.
Inconvenients: els models més pesats poden ser lents en taulers petits. L'entrenament multilingüe de Whisper ajuda amb la robustesa si el manteniu al dispositiu o en un servidor proper. [3]

Assistència al núvol
Avantatges: raonament potent, finestres de context més grans.
Inconvenients: les dades surten del dispositiu, dependència de la xarxa, costos variables.

Un híbrid sovint guanya: paraula d'activació + ASR local → crida a una API per al raonament → TTS local. [2][3][5]


Resolució de problemes: Gremlins estranys i solucions ràpides 👾

  • Falsos activadors de paraules de despertador : reduïu les sensibilitats o proveu un micròfon diferent. [2]

  • Retard ASR : utilitzeu un model Whisper més petit o creeu whisper.cpp amb indicadors de llançament ( -j --config Release ). [4]

  • TTS entretallat : pregenera frases comunes; confirma el dispositiu d'àudio i les freqüències de mostreig.

  • No s'ha detectat cap micròfon : comproveu arecord -l i els mescladors.

  • Regulació tèrmica : utilitzeu el refrigerador actiu oficial del Pi 5 per a un rendiment sostingut. [1]


Notes de seguretat i privadesa que realment hauries de llegir 🔒

  • Mantingueu el vostre Pi actualitzat amb APT.

  • Si feu servir alguna API al núvol, registreu el que envieu i considereu primer la possibilitat de redactar els bits personals localment.

  • Executeu serveis amb el mínim privilegi; eviteu sudo a ExecStart tret que sigui necessari.

  • Proporcioneu un mode només local per a convidats o hores tranquil·les.


Crea variants: barreja i combina com un entrepà 🥪

  • Ultralocal : Porcupine + whisper.cpp + Piper + regles simples. Privat i robust. [2][4][5]

  • Assistència ràpida al núvol : Porcupine + (Whisper local més petit o ASR al núvol) + TTS local + LLM al núvol.

  • Central domòtica : afegiu fluxos de Node-RED o Home Assistant per a rutines, escenes i sensors.


Exemple d'habilitat: Encesa de llums via MQTT 💡

import paho.mqtt.client as mqtt MQTT_HOST = "192.168.1.10" TOPIC = "casa/sala/llum/conjunt" def set_light(estat: 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 "encendre els llums" in text: set_light("on")

Afegeix una frase de veu com ara: "encén el llum de la sala d'estar" i et sentiràs com un mag.


Per què aquesta pila funciona a la pràctica 🧪

  • El Porcupine és eficient i precís en la detecció de paraules de despertador en taulers petits, cosa que fa possible l'escolta constant. [2]

  • L'àmplia formació multilingüe de Whisper el fa robust per a entorns i accents variats. [3]

  • whisper.cpp manté aquesta potència utilitzable en dispositius només de CPU com la Pi. [4]

  • Piper manté les respostes àgils sense enviar l'àudio a un TTS al núvol. [5]


Massa llarg, no l'he llegit

Construeix un assistent d'IA modular i privat amb Raspberry Pi combinant Porcupine per a la paraula de despertador, Whisper (via whisper.cpp ) per a l'ASR, el cervell que triïs per a les respostes i Piper per al TTS local. Embolica'l com un servei systemd, ajusta l'àudio i connecta a les accions MQTT o HTTP. És més barat del que penses i, curiosament, agradable de viure-hi. [1][2][3][4][5]


Referències

  1. Programari i refrigeració de Raspberry Pi : informació sobre el Raspberry Pi Imager (descàrrega i ús) i el refrigerador actiu del Pi 5

  2. Porcupine Wake Word : SDK i inici ràpid (paraules clau, sensibilitat, inferència local)

  3. Whisper (model ASR) : ASR robust i multilingüe entrenat durant ~680.000 hores

    • Radford et al., Reconeixement robust de la veu mitjançant supervisió feble a gran escala (Whisper): llegiu-ne més

  4. whisper.cpp – Inferència Whisper optimitzada per a la CPU amb CLI i passos de compilació

  5. Piper TTS : TTS neuronal local ràpid amb múltiples veus/idiomes

Troba la darrera versió d'IA a la botiga oficial d'assistents d'IA

Sobre nosaltres


Torna al bloc