Come costruire un assistente AI fai da te con Raspberry Pi

Come costruire un assistente AI fai da te con Raspberry Pi

Vuoi un piccolo assistente vocale che segua davvero i tuoi comandi, funzioni sul tuo hardware e non ordini per sbaglio dodici ananas perché ti ha sentito male? Un assistente AI fai da te con Raspberry Pi è sorprendentemente fattibile, divertente e flessibile. Collegherai una parola di attivazione, il riconoscimento vocale (ASR = riconoscimento automatico del parlato), un cervello per il linguaggio naturale (regole o un LLM) e la sintesi vocale (TTS). Aggiungi qualche script, uno o due servizi e qualche accorta modifica audio e otterrai uno smart speaker tascabile che obbedisce alle tue regole.

Ti aiuteremo a iniziare a parlare con il tuo Pi senza le solite tirate di capelli. Parleremo di componenti, configurazione, codice, confronti, insidie... tutto il necessario. 🌯

Articoli che potrebbero interessarti dopo questo:

🔗 Come studiare l'intelligenza artificiale in modo efficace
Crea una tabella di marcia per lo studio, progetti pratici e monitora i progressi.

🔗 Come avviare un'azienda di intelligenza artificiale
Convalidare il problema, creare l'MVP, assemblare il team, assicurarsi i clienti iniziali.

🔗 Come usare l'intelligenza artificiale per essere più produttivi
Automatizza le attività di routine, semplifica i flussi di lavoro e aumenta la produzione creativa.

🔗 Come integrare l'intelligenza artificiale nella tua attività
Identificare processi ad alto impatto, implementare progetti pilota, misurare il ROI, scalare.


Cosa rende un buon assistente AI fai da te con Raspberry Pi ✅

  • Privato per impostazione predefinita : mantieni l'audio locale ove possibile. Sei tu a decidere cosa lasciare sul dispositivo.

  • Modulare : scambia i componenti come i Lego: motore di wake word, ASR, LLM, TTS.

  • Economici : per lo più open source, microfoni, altoparlanti e un Pi di base.

  • Hackable : vuoi domotica, dashboard, routine, competenze personalizzate? Facile.

  • Affidabile : gestito dal servizio, si avvia e inizia ad ascoltare automaticamente.

  • Divertente : imparerai molto sull'audio, sui processi e sulla progettazione basata sugli eventi.

Piccolo consiglio: se utilizzi un Raspberry Pi 5 e prevedi di utilizzare modelli locali più pesanti, un dissipatore a clip può essere utile in caso di carico sostenuto. (In caso di dubbio, scegli il dissipatore attivo ufficiale progettato per Pi 5.) [1]


Parti e strumenti di cui avrai bisogno 🧰

  • Raspberry Pi : si consigliano Pi 4 o Pi 5 per avere più spazio.

  • Scheda microSD : consigliata almeno 32 GB.

  • Microfono USB : un semplice microfono USB per conferenze è l'ideale.

  • Altoparlante : altoparlante USB o da 3,5 mm, oppure un amplificatore I2S HAT.

  • Rete : Ethernet o Wi-Fi.

  • Finezze opzionali: custodia, dissipatore attivo per Pi 5, pulsante per push-to-talk, anello LED. [1]

Configurazione del sistema operativo e di base

  1. Flasha il sistema operativo Raspberry Pi con Raspberry Pi Imager. È il modo più semplice per ottenere una microSD avviabile con i preset desiderati. [1]

  2. Avvia, connettiti alla rete, quindi aggiorna i pacchetti:

sudo apt update && sudo apt upgrade -y
  1. Nozioni di base sull'audio : su Raspberry Pi OS è possibile impostare l'uscita predefinita, i livelli e i dispositivi tramite l'interfaccia utente desktop o raspi-config . L'audio USB e HDMI è supportato su tutti i modelli; l'uscita Bluetooth è disponibile sui modelli con Bluetooth. [1]

  2. Verifica dispositivi:

arecord -l aplay -l

Quindi testa l'acquisizione e la riproduzione. Se i livelli sembrano anomali, controlla i mixer e le impostazioni predefinite prima di dare la colpa al microfono.

 

Raspberry Pi AI

L'architettura in sintesi 🗺️

Un assistente AI fai da te sensato con Raspberry Pi Flow si presenta così:

Parola di attivazione → acquisizione audio in tempo reale → trascrizione ASR → gestione dell'intento o LLM → testo di risposta → TTS → riproduzione audio → azioni opzionali tramite MQTT o HTTP.

  • Parola di attivazione : Porcupine è piccolo, preciso e funziona localmente con controllo della sensibilità per parola chiave. [2]

  • ASR : Whisper è un modello ASR multilingue e generico, addestrato su circa 680.000 ore; è robusto agli accenti/rumore di fondo. Per l'uso sul dispositivo, whisper.cpp fornisce un percorso di inferenza C/C++ snello. [3][4]

  • Cervello : la tua scelta: un LLM cloud tramite API, un motore di regole o inferenza locale, a seconda della potenza.

  • TTS : Piper genera localmente un parlato naturale, abbastanza velocemente da fornire risposte rapide su hardware modesto. [5]


Tabella di confronto rapido 🔎

Attrezzo Ideale per Prezzo-ish Perché funziona
Parola di veglia del porcospino Trigger sempre in ascolto Livello gratuito + Bassa CPU, accuratezza, associazioni facili [2]
Sussurro.cpp ASR locale su Pi Codice sorgente aperto Buona precisione, compatibile con la CPU [4]
Faster-Whisper ASR più veloce su CPU/GPU Codice sorgente aperto Ottimizzazioni CTranslate2
Piper TTS Output vocale locale Codice sorgente aperto Voci veloci, molte lingue [5]
API Cloud LLM Ragionamento ricco Basato sull'utilizzo Scarica il calcolo pesante
Nodo-ROSSO Orchestrare le azioni Codice sorgente aperto Flussi visivi, compatibili con MQTT

Creazione passo dopo passo: il tuo primo loop vocale 🧩

Useremo Porcupine per la parola di attivazione, Whisper per la trascrizione, una funzione "brain" leggera per la risposta (sostituibile con il vostro LLM preferito) e Piper per il parlato. Mantenete il tutto al minimo, poi iterate.

1) Installare le dipendenze

sudo apt install -y python3-pip portaudio19-dev sox ffmpeg pip3 install sounddevice numpy
  • Porcupine: prendi l'SDK/binding per la tua lingua e segui la guida rapida (chiave di accesso + elenco di parole chiave + frame audio → .process ). [2]

  • Whisper (compatibile con la CPU): compila whisper.cpp :

git clone 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

Quanto sopra rispecchia l'avvio rapido del progetto. [4]

Preferisci Python? faster-whisper (CTranslate2) è spesso più reattivo di Python vanilla su CPU modeste.

2) Imposta Piper TTS

git clone https://github.com/rhasspy/piper cd piper make # Scarica un modello vocale che ti piace, ad esempio en_US-amy echo "Ciao." | ./piper --model voices/en/en_US-amy-medium.onnx --output_file hello.wav aplay hello.wav

Piper è progettato per la sintesi vocale sul dispositivo con più opzioni vocali/linguistiche. [5]

3) Un ciclo di assistente minimo in Python

Volutamente compatto: attende una frase di attivazione (stub), registra, trascrive con whisper.cpp , genera una risposta (segnaposto), quindi parla tramite Piper. Sostituisci il segnaposto con il tuo LLM o la tua logica di regole preferita.

importa os, sottoprocesso, wave importa sounddevice come sd WAKE_WORD = "hey computer" # scambia per Porcupine in produzione [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(secondi * SAMPLE_RATE), samplerate=SAMPLE_RATE, canali=CHANNELS, dtype='int16') sd.wait() con wave.open(path, 'wb') come 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 "Non vedo le nuvole, ma potrebbe andare bene. Porta una giacca per ogni evenienza." return "Hai detto: " + 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("Assistente pronto. Digita la frase di attivazione per il test.") 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("Utente:", text); print("Assistente:", reply) speak(reply) else: print("Digita la frase di attivazione per testare il ciclo.")

Per un rilevamento reale delle parole di attivazione, integrare il rilevatore di streaming di Porcupine (bassa sensibilità della CPU per parola chiave). [2]


La messa a punto audio che conta davvero 🎚️

Bastano pochi piccoli accorgimenti per far sì che il tuo assistente si senta 10 volte più intelligente:

  • Distanza del microfono : 30–60 cm è la distanza ideale per molti microfoni USB.

  • Livelli : evita il clipping in ingresso e mantieni una riproduzione sana; correggi il routing prima di inseguire i ghost del codice. Su Raspberry Pi OS, puoi gestire il dispositivo di output e i livelli tramite gli strumenti di sistema o raspi-config . [1]

  • Acustica della stanza : le pareti dure causano echi; un tappetino morbido sotto il microfono può aiutare.

  • Soglia della parola di attivazione : troppo sensibile → attiva i trigger fantasma; troppo rigida → urlerai contro la plastica. Porcupine ti consente di modificare la sensibilità per parola chiave. [2]

  • Termiche : le lunghe trascrizioni su Pi 5 beneficiano del dissipatore attivo ufficiale per prestazioni sostenute. [1]


Da giocattolo a elettrodomestico: servizi, avvio automatico, controlli di integrità 🧯

Gli esseri umani dimenticano di eseguire gli script. I computer dimenticano di essere gentili. Trasforma il tuo ciclo in un servizio gestito:

  1. Crea un'unità systemd:

[Unità] Descrizione=Assistente vocale fai da te Dopo=network.target sound.target [Servizio] Utente=pi WorkingDirectory=/home/pi/assistant ExecStart=/usr/bin/python3 /home/pi/assistant/assistant.py Riavvia=sempre RestartSec=3 [Installa] WantedBy=multi-user.target
  1. Abilitalo:

sudo cp assistant.service /etc/systemd/system/ sudo systemctl daemon-reload sudo systemctl enable --now assistant.service
  1. Code di tronco:

journalctl -u assistant -f

Ora si avvia all'avvio, si riavvia in caso di crash e, in generale, si comporta come un dispositivo. Un po' noioso, ma molto meglio.


Sistema di abilità: rendilo davvero utile a casa 🏠✨

Una volta che la voce in entrata e quella in uscita sono solide, aggiungi le azioni:

  • Router di intenti : semplici percorsi di parole chiave per attività comuni.

  • Casa intelligente : pubblica eventi su MQTT o chiama gli endpoint HTTP di Home Assistant.

  • Plugin : funzioni Python rapide come set_timer , what_is_the_time , play_radio , run_scene .

Anche con un LLM cloud nel ciclo, instrada prima i comandi locali più ovvi per velocità e affidabilità.


Solo locale vs. Assistenza cloud: compromessi che noterai 🌓

Solo locale
Pro: privato, offline, costi prevedibili.
Contro: i modelli più pesanti potrebbero essere lenti su schede di piccole dimensioni. La formazione multilingue di Whisper contribuisce alla robustezza se la si mantiene sul dispositivo o su un server nelle vicinanze. [3]

Assistenza cloud.
Pro: ragionamento potente, finestre di contesto più ampie.
Contro: dati che escono dal dispositivo, dipendenza dalla rete, costi variabili.

Spesso vince un ibrido: wake word + ASR locale → chiamata API per ragionamento → TTS locale. [2][3][5]


Risoluzione dei problemi: strani gremlin e soluzioni rapide 👾

  • Falsi trigger della parola di attivazione : abbassare la sensibilità o provare un microfono diverso. [2]

  • Ritardo ASR : utilizzare un modello Whisper più piccolo o compilare whisper.cpp con flag di rilascio ( -j --config Release ). [4]

  • TTS discontinuo : pre-genera frasi comuni; conferma il tuo dispositivo audio e le frequenze di campionamento.

  • Nessun microfono rilevato : controllare arecord -l e mixer.

  • Limitazione termica : utilizzare l'Active Cooler ufficiale su Pi 5 per prestazioni sostenute. [1]


Note sulla sicurezza e sulla privacy che dovresti davvero leggere 🔒

  • Mantieni aggiornato il tuo Pi con APT.

  • Se utilizzi un'API cloud, registra ciò che invii e valuta prima di redigere localmente i dati personali.

  • Eseguire i servizi con privilegi minimi; evitare sudo in ExecStart, a meno che non sia necessario.

  • Offrire una modalità solo locale per gli ospiti o orari tranquilli.


Varianti di costruzione: mescola e abbina come un panino 🥪

  • Ultra-locale : Porcupine + whisper.cpp + Piper + regole semplici. Riservato e robusto. [2][4][5]

  • Assistenza cloud veloce : Porcupine + (Whisper locale più piccolo o ASR cloud) + TTS locale + LLM cloud.

  • Centrale di domotica : aggiungi flussi Node-RED o Home Assistant per routine, scene e sensori.


Esempio di abilità: luci accese tramite MQTT 💡

importa paho.mqtt.client come mqtt MQTT_HOST = "192.168.1.10" ARGOMENTO = "casa/soggiorno/luce/set" def set_light(stato: str): client = mqtt.Client() client.connect(MQTT_HOST, 1883, 60) payload = "ON" if state.lower().startswith("on") else "OFF" client.publish(ARGOMENTO, payload, qos=1, retain=False) client.disconnect() # se "accendi le luci" nel testo: set_light("on")

Aggiungi una frase vocale come: "accendi la lampada del soggiorno" e ti sentirai un mago.


Perché questo stack funziona nella pratica 🧪

  • Porcupine è efficiente e preciso nel rilevamento delle parole di attivazione su piccole schede, il che rende fattibile l'ascolto continuo. [2]

  • L'ampia formazione multilingue di Whisper lo rende robusto in ambienti e accenti diversi. [3]

  • whisper.cpp mantiene tale potenza utilizzabile su dispositivi basati solo sulla CPU come il Pi. [4]

  • Piper mantiene le risposte rapide senza inviare l'audio a un cloud TTS. [5]


Troppo lungo, non l'ho letto

Costruisci un assistente AI fai da te modulare e privato con Raspberry Pi combinando Porcupine per la parola di attivazione, Whisper (tramite whisper.cpp ) per l'ASR, il tuo cervello preferito per le risposte e Piper per il TTS locale. Integralo come un servizio systemd, ottimizza l'audio e collega azioni MQTT o HTTP. È più economico di quanto pensi e stranamente piacevole da usare. [1][2][3][4][5]


Riferimenti

  1. Software e raffreddamento Raspberry Pi – Informazioni sul prodotto Raspberry Pi Imager (download e utilizzo) e Pi 5 Active Cooler

  2. Porcupine Wake Word – SDK e avvio rapido (parole chiave, sensibilità, inferenza locale)

  3. Whisper (modello ASR) – ASR multilingue e robusto, addestrato su circa 680.000 ore

    • Radford et al., Riconoscimento vocale robusto tramite supervisione debole su larga scala (Whisper): leggi di più

  4. whisper.cpp – Inferenza Whisper compatibile con la CPU con CLI e passaggi di compilazione

  5. Piper TTS – Sintesi vocale neurale locale veloce con più voci/lingue

Trova l'ultima intelligenza artificiale nello store ufficiale di AI Assistant

Chi siamo


Torna al blog