Nota
Ciao, benvenuto nella SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community su Facebook! Scopri di più su Raspberry Pi, Arduino e ESP32 insieme ad altri appassionati.
Perché unirti a noi?
Supporto Esperto: Risolvi problemi post-vendita e sfide tecniche con l’aiuto della nostra comunità e del nostro team.
Impara e Condividi: Scambia suggerimenti e tutorial per migliorare le tue competenze.
Anteprime Esclusive: Accedi in anteprima agli annunci di nuovi prodotti e alle anticipazioni.
Sconti Speciali: Approfitta di sconti esclusivi sui nostri prodotti più recenti.
Promozioni e Giveaway Festivi: Partecipa a giveaway e promozioni in occasione delle festività.
👉 Sei pronto a esplorare e creare con noi? Clicca [here] e unisciti oggi stesso!
16. Auto a Controllo Vocale con Vosk (Offline)
Vosk è un motore di riconoscimento vocale (STT) leggero che supporta molte lingue e funziona completamente offline su Raspberry Pi. Serve la connessione a Internet solo la prima volta per scaricare un modello linguistico. Dopo di ciò, tutto funziona senza rete.
In questa lezione impareremo a:
Controllare il microfono su Raspberry Pi.
Installare e testare Vosk con un modello linguistico scelto.
Costruire una PiCar-X a controllo vocale che ascolta una parola di attivazione e risponde ai comandi come forward, backward, left e right.
Prima di iniziare
Assicurati di aver completato:
Installare Tutti i Moduli (Importante) — Installa i moduli
robot-hat,vilib,picar-x, poi esegui lo scripti2samp.sh.
1. Controlla il tuo Microfono
Prima di utilizzare il riconoscimento vocale, assicurati che il tuo microfono USB funzioni correttamente.
Elenca i dispositivi di registrazione disponibili:
arecord -lCerca una riga simile a
card 1: ... device 0.Registra un breve campione (sostituisci
1,0con i numeri trovati):arecord -D plughw:1,0 -f S16_LE -r 16000 -d 3 test.wav
Esempio: se il tuo dispositivo è
card 2, device 0, usa:
arecord -D plughw:2,0 -f S16_LE -r 16000 -d 3 test.wav
Riproducilo per confermare la registrazione:
aplay test.wavRegola il volume del microfono se necessario:
alsamixer
Premi F6 per selezionare il tuo microfono USB.
Trova il canale Mic o Capture.
Assicurati che non sia silenziato ([MM] significa muto, premi
Mper riattivarlo → dovrebbe mostrare [OO]).Usa le frecce ↑ / ↓ per modificare il volume di registrazione.
2. Testare Vosk
Passaggi per provarlo:
Crea un nuovo file:
cd ~/picar-x/example sudo nano test_stt_vosk.py
Copia il codice di esempio al suo interno. Premi
Ctrl+X, poiYeEnterper salvare ed uscire.from picarx.stt import Vosk vosk = Vosk(language="en-us") print(vosk.available_languages) while True: print("Say something") result = vosk.listen(stream=False) print(result)
Esegui il programma:
sudo python3 test_stt_vosk.py
La prima volta che esegui questo codice con una nuova lingua, Vosk scaricherà automaticamente il modello linguistico (per impostazione predefinita scarica la versione small). Allo stesso tempo, stamperà l’elenco delle lingue supportate. Poi vedrai:
vosk-model-small-en-us-0.15.zip: 100%|███████████████████| 39.3M/39.3M [00:05<00:00, 7.85MB/s] ['ar', 'ar-tn', 'ca', 'cn', 'cs', 'de', 'en-gb', 'en-in', 'en-us', 'eo', 'es', 'fa', 'fr', 'gu', 'hi', 'it', 'ja', 'ko', 'kz', 'nl', 'pl', 'pt', 'ru', 'sv', 'te', 'tg', 'tr', 'ua', 'uz', 'vn'] Say something
Questo significa:
Il file del modello (
vosk-model-small-en-us-0.15) è stato scaricato.L’elenco delle lingue supportate è stato stampato.
Il sistema è ora in ascolto — parla nel microfono della PiCar-X e il testo riconosciuto apparirà nel terminale.
Suggerimenti:
Tieni il microfono a circa 15–30 cm di distanza.
Scegli un modello che corrisponda alla tua lingua e accento.
Modalità Streaming (opzionale)
Puoi anche trasmettere la voce in streaming continuo per vedere i risultati parziali mentre parli:
from picarx.stt import Vosk
vosk = Vosk(language="en-us")
while True:
print("Say something")
for result in vosk.listen(stream=True):
if result["done"]:
print(f"final: {result['final']}")
else:
print(f"partial: {result['partial']}", end="\r", flush=True)
3. Auto a Controllo Vocale
Ora colleghiamo il riconoscimento vocale alla PiCar-X!
Useremo una parola di attivazione («hey robot») così l’auto ascolterà i comandi solo dopo essere stata attivata. Questo risparmia CPU ed evita attivazioni indesiderate.
Esegui il codice
cd ~/picar-x/example
sudo python3 16.voice_controlled_car.py
In questo programma, l’auto:
Attende la parola di attivazione «hey robot».
Dopo l’attivazione, puoi parlare naturalmente — finché la frase contiene una delle parole chiave (forward, backward, left, right), l’auto risponderà.
Ad esempio:
“Can you move forward a little?” → l’auto si muove in avanti.
“Please turn left now.” → l’auto gira a sinistra.
Il comando «sleep» interrompe il ciclo di controllo e riporta l’auto in modalità attesa.
Codice
from picarx import Picarx
from picarx.stt import Vosk
import time
px = Picarx()
stt = Vosk(language="en-us")
WAKE_WORDS = ["hey robot"]
print('Say "hey robot" to wake me up! Then say: forward / backward / left / right. Say "sleep" to stop listening.')
try:
while True:
# --- wait for wake word once ---
stt.wait_until_heard(WAKE_WORDS)
print("Wake word detected. Listening for commands... (say 'sleep' to pause)")
# --- command loop: multiple commands after one wake ---
while True:
res = stt.listen(stream=False)
text = res.get("text", "") if isinstance(res, dict) else str(res)
text = text.lower().strip()
if not text:
continue
print("Heard:", text)
if "sleep" in text:
# pause command mode; go back to wait for wake word
px.stop(); px.set_dir_servo_angle(0)
print("Sleeping. Say 'hey robot' to wake me again.")
break
elif "forward" in text:
px.set_dir_servo_angle(0)
px.forward(30); time.sleep(1); px.stop()
elif "backward" in text:
px.set_dir_servo_angle(0)
px.backward(30); time.sleep(1); px.stop()
elif "left" in text:
px.set_dir_servo_angle(-25)
px.forward(30); time.sleep(1)
px.stop(); px.set_dir_servo_angle(0)
elif "right" in text:
px.set_dir_servo_angle(25)
px.forward(30); time.sleep(1)
px.stop(); px.set_dir_servo_angle(0)
# (ignore other words)
except KeyboardInterrupt:
pass
finally:
px.stop(); px.set_dir_servo_angle(0)
print("Stopped and centered. Bye.")
Risoluzione dei Problemi
No such file or directory (quando esegui `arecord`)
Potresti aver usato il numero di scheda/dispositivo sbagliato. Esegui:
arecord -le sostituisci
1,0con i numeri mostrati per il tuo microfono USB.Il file registrato non ha audio
Apri il mixer e controlla il volume del microfono:
alsamixer
Premi F6 per selezionare il tuo microfono USB.
Assicurati che Mic/Capture non sia silenziato ([OO] invece di [MM]).
Aumenta il livello con la freccia ↑.
Vosk non riconosce la voce
Assicurati che il codice lingua corrisponda al tuo modello (ad esempio
en-usper l’inglese,zh-cnper il cinese).Tieni il microfono a 15–30 cm di distanza ed evita rumori di fondo.
Parla chiaramente e lentamente.
La parola di attivazione (“hey robot”) non viene mai rilevata
Pronunciala con tono naturale, non troppo velocemente.
Controlla che il programma stampi effettivamente il testo riconosciuto. Se non lo fa, il microfono non funziona.
Latenza elevata / riconoscimento lento
Il modello scaricato automaticamente è small (più veloce ma meno preciso).
Se è ancora lento, chiudi altri programmi per liberare CPU.