Desideri un piccolo assistente vocale che ti segua davvero, funzioni sul tuo hardware e non ordini per sbaglio dodici ananas perché ti ha frainteso? Un assistente AI fai-da-te con Raspberry Pi è sorprendentemente realizzabile, divertente e flessibile. Dovrai collegare una parola di attivazione, il riconoscimento vocale (ASR = riconoscimento vocale automatico), un modulo per l'elaborazione del linguaggio naturale (regole o un modello di apprendimento per rinforzo) e la sintesi vocale (TTS). Aggiungi qualche script, uno o due servizi e qualche ritocco audio accurato, e avrai 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 : l'audio viene mantenuto in locale ove possibile. Sei tu a decidere cosa esce dal dispositivo.
-
Modulare – i componenti si possono scambiare come con i Lego: motore di riconoscimento vocale, ASR, LLM, TTS.
-
Economico : perlopiù open source, microfoni e altoparlanti standard, e un Raspberry Pi.
-
Personalizzabile : desideri domotica, dashboard, routine e funzionalità personalizzate? Facile.
-
Affidabile : gestito tramite 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
-
Flashare Raspberry Pi OS con Raspberry Pi Imager. È il modo più semplice per ottenere una microSD avviabile con le impostazioni predefinite desiderate. [1]
-
Avvia, connettiti alla rete, quindi aggiorna i pacchetti:
sudo apt update && sudo apt upgrade -y
-
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] -
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.

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 su dispositivo,
whisper.cppfornisce un percorso di inferenza C/C++ snello. [3][4] -
Cervello: A tua scelta – un LLM in cloud tramite API, un motore di regole o un'inferenza locale, a seconda della potenza di calcolo.
-
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: scarica l'SDK/i binding per il tuo linguaggio e segui la guida rapida (tasto 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 di attivazione: troppo sensibile → attivazioni fantasma; troppo rigida → urlerai contro la plastica. Porcupine ti permette di regolare la sensibilità per ogni 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:
-
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
-
Abilitalo:
sudo cp assistant.service /etc/systemd/system/ sudo systemctl daemon-reload sudo systemctl enable --now assistant.service
-
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 piccole. L'addestramento multilingue di Whisper contribuisce alla robustezza se lo si mantiene sul dispositivo o su un server vicino. [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.cppcon 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 -le 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
sudoin 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.cppmantiene 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
Crea un assistente AI fai-da-te modulare e privato con Raspberry Pi combinando Porcupine per la parola di attivazione, Whisper (tramite whisper.cpp) per il riconoscimento vocale automatico, il cervello che preferisci per le risposte e Piper per la sintesi vocale locale. Incapsulalo come servizio systemd, personalizza l'audio e integra azioni MQTT o HTTP. È più economico di quanto pensi e, stranamente, piacevole da usare. [1][2][3][4][5]
Riferimenti
-
Software e raffreddamento per Raspberry Pi – Raspberry Pi Imager (scarica e usa) e informazioni sul prodotto Pi 5 Active Cooler
-
Raspberry Pi Imager: scopri di più
-
Active Cooler (Pi 5): scopri di più
-
-
Porcupine Wake Word – SDK e guida rapida (parole chiave, sensibilità, inferenza locale)
-
Whisper (modello ASR) – Sistema ASR multilingue e robusto, addestrato su circa 680.000 ore di test.
-
Radford et al., Riconoscimento vocale robusto tramite supervisione debole su larga scala (Whisper): leggi di più
-
-
whisper.cpp – Inferenza Whisper ottimizzata per la CPU con interfaccia a riga di comando e passaggi di compilazione
-
Piper TTS – Sintesi vocale neurale locale e veloce con più voci/lingue