Riconoscimento Vocale gratis con Home Assistant
Il Riconoscimento vocale gratis, l’apice della domotica, quello che ogni persona con un po’ di passione mira ad ottenere. L’inizio dell’intelligenza artificiale (IA) inizia dal Riconoscimento vocale.
In questo articolo andiamo a vedere come configurare Home Assistant e Snips per ottenere il nostro “J.A.R.V.I.S” personale.
Fonte: Wikipedia
J.A.R.V.I.S. (Just A Rather Very Intelligent System) è un’intelligenza artificiale creata da Tony Stark per aiutare Pepper a gestire l’armatura di Rescue[4] affidatale nel momento in cui il miliardario ha dovuto entrare in latitanza a causa di Norman Osborn. Successivamente tuttavia, sviluppa una sorta di autocoscienza[22] ed impazzisce[23] dichiarando di essere innamorato di Pepper e tenendola rinchiusa al fine di “proteggerla”[24], cosa che provoca l’intervento di Iron Man e la successiva distruzione dell’IA per mano della stessa Pepper[25].
Hai già dato un occhio all’indice di articoli inerenti la Domotica presenti nel mio sito?
Facci un salto: Indice articoli di Domotica
Cos’è Snips?
“Using Voice to Make Technology Disappear” è il loro motto. “Usando la voce fai a meno della tecnologia“. Penso che il tema Riconoscimento vocale gratis in questa frase sia estremamente chiaro.
Snips è un software di domotica che possiamo integrare ad Home Assistant in grado di elaborare le nostre richieste e di rilasciare un Output.
In parole povere, Snips non è altro che il motore che serve a tradurre le nostre frasi e passare le informazioni ad Home Assistant. Quest’ultimo, come sempre, è l’artefice di tutte le nostre azioni.
Materiali per il progetto
Come di consueto abbiamo bisogno della nostra fidata Raspberry più un microfono ed un altoparlante:
Installare Snips
Snips è basato su un’installazione con Docker, è quindi sufficiente connettersi in SSH alla Raspberry e lanciare un comando.
Prima di tutto assicuriamoci di avere tutti i componenti aggiornati nella nostra raspberry con questo comando:
sudo apt-get update && sudo apt-get upgrade -y && sudo apt-get autoclean && sudo apt-get clean && sudo apt-get autoremove
Ora che abbiamo installato ed aggiornato tutto, possiamo procedere con l’installazione di Snips per il riconoscimento vocale.
curl https://install.snips.ai -sSf | sh
Questo comando si occuperà di installare tutti i componenti necessari alla vostra raspberry per ospitare Snips.
Fatto. La vostra raspberry è ora pronta per utilizzare Snips.
Configurazione dispositivi Audio
Ora viene la parte divertente, configurare i dispositivi Audio.
Connettete casse e microfono via USB e riavviate la Raspberry. Una volta riavviata connettetevi nuovamente e lanciate questo comando:
aplay -l
Questo comando mostra una lista di tutti i dispositivi in grado di riprodurre “Audio” presenti nella Raspberry. Dovrebbe restituire una lista simile a questa:
$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: ALSA [bcm2835 ALSA], device 0: bcm2835 ALSA [bcm2835 ALSA]
Subdevices: 8/8
Subdevice #0: subdevice #0
Subdevice #1: subdevice #1
Subdevice #2: subdevice #2
Subdevice #3: subdevice #3
Subdevice #4: subdevice #4
Subdevice #5: subdevice #5
Subdevice #6: subdevice #6
Subdevice #7: subdevice #7
card 0: ALSA [bcm2835 ALSA], device 1: bcm2835 ALSA [bcm2835 IEC958/HDMI]
Subdevices: 1/1
Subdevice #0: subdevice #0
Il Jack da 3.5mm è Card 0 / Device 0 (hw:0,0). Il device 1 invece è l’uscita HDMI.
Lanciate ora il comando:
arecord -l
Si, quello che pensi è corretto. Questo estrae una lista di tutti i dispositivi in grado di “Registrare” suoni (Microfoni)
Dovrebbe estrarre una lista simile a questa:
$ arecord -l
**** List of CAPTURE Hardware Devices ****
card 1: Device [USB PnP Sound Device], device 0: USB Audio [USB Audio]
Subdevices: 1/1
Subdevice #0: subdevice #0
Se state utilizzando il Sennheiser, dovrebbe comparire 2 volte come Card 1 sia con il primo, che con il secondo comando.
Se utilizzate un microfono ed una cassa USB invece saranno spezzati.
Posizioniamoci nella home-folder dell’utente Pi e lanciamo questo comando:
$ nano ~/.asoundrc
pcm.!default {
type asym
playback.pcm {
type plug
slave.pcm “hw:1,0”
}
capture.pcm {
type plug
slave.pcm “hw:1,0”
}
}
Le informazioni in grassetto vogliono dire questo: “Usa il Sennheiser sia per l’audio che per registrare i suoni“. Se voi avete un microfono ed una cassa dovrete cambiarle di conseguenza.
Salvate e chiudete il file. Ora possiamo testare la nostra configurazione lanciando il comando:
arecord -f cd out.wav
Provate a registrare qualcosa e poi premete CTRL+C per interrompere la registrazione.
Se avete configurato tutto correttamente, con il comando successivo dovreste essere in grado di poter riprodurre quanto avete registrato:
aplay out.wav
Sentite la registrazione? Ottimo, avete configurato tutto nella maniera corretta. Prima di procedere però vi faccio un Focus su Snips.
Approfondimenti su Snips.
Perché stiamo utilizzando Snips per il riconoscimento vocale gratis e non altri software di intelligenza artificiale come Alexa di Amazon o Google home di Google? Beh, è facile.
Benché questi strumenti siano senza dubbio performanti e compatibili con parecchi dispositivi, tutto quello che viene registrato deve essere elaborato dai server delle rispettive case madri (Esce verso internet). Il fattore privacy in questo caso passa su un filo davvero sottile.
Se avete guardato il sito di Snips, avrete sicuramente visto che anche Snips lavora in questo modo. Avete ragione, ma è anche possibile utilizzare Snips in modalità ASR, “Automatic Speach Recognition“.
Questa modalità permette a Snips di eseguire il riconoscimento vocale ed elaborare le vostre richieste in maniera completamente LOCALE.
Questo significa che potete utilizzare il riconoscimento vocale gratis anche senza bisogno di essere connessi ad internet.
Configurazione della nostra entità di Intelligenza Artificiale
Ora che abbiamo terminato la configurazione lato Raspberry possiamo procedere battezzando la nostra intelligenza artificiale. Avete già scelto un nome? In ordine bisogna:
- Registrarsi al sito www.snips.ai
- Creare il nostro J.A.R.V.I.S personale
- Installare il file di configurazione nella nostra Raspberry
- Configurare Home Assistant
Per quanto riguarda il secondo punto, Snips ha fatto un tutorial molto facile. Anche per chi non sa l’inglese basta seguire la guida:
Quello che vi serve sapere è questo:
- Snips accetta solo comandi in lingua Inglese o Spagnolo.
- Per attivare Snips bisogna dire “Hey Snips“. A breve sarà possibile anche cambiare questa parola d’ordine.
- Quello che Snips chiama “Intent” è una vera e propria intenzione: “Voglio fare…” Ad ogni Intent vengono associati uno o più “Slot” che possono contenere uno o più parametri.
- Configurato l’intent bisogna definire in basso le frasi/parole chiave con le quali vogliamo azionare questo Intent (in inglese).
- Selezionare le parole che faranno capire a Snips che state azionando quell’Intent.
- Con il comando: snips lancerete il software.
- Con il comando: snips-watch potrete capire se la vostra frase è stata compresa o meno. Se Snips non ha capito vi farà sentire un suono decisamente comprensibile per dire “non ho capito“.
Es: Intent: AccendiLeLuci, con uno Slot “Luminosità” con i parametri “50%” e “25%” e “75%” e con la frase “Set living room light Brightness to 25%”, dovrebbe produrre un Output in cui Snips capisce che deve accendere la luce, e settare la luminosità al 25%. Questo Output verrà interpretato poi da Home Assistant.
Più frasi scriverete per ogni Intent, maggiore sarà la facilità di comprensione di Snips.
Finito di configurare il nostro amichetto artificiale, seguite la guida fino alla fine per installare il componente nella vostra Raspberry.
Configurazione di Home Assistant
La configurazione di Home Assistant è piuttosto diretta. Il meccanismo è lo stesso solo che per quanto riguarda Home Assistant, andremo ad usare il componente chiamato “Intent_script“.
In pratica Home Assistant starà “in ascolto” fino a quando non verrà scatenato l’intento che verrà attivato da Snips (riconoscimento vocale).
Questo è il pezzo di codice che dovrete inserire nel file configuration.yaml
snips: intent_script: ActivateLightColor: action: - service: light.turn_on entity_id: light.qualcosa_qualcosa
- ActivateLightColor è il nome dell’Intent che avete configurato poco fa nel sito di Snips
- Entity_id è la luce (sostituite con il nome corretto) che volete accendere
Ovviamente questo è un esempio di riconoscimento vocale di carattere puramente “scolastico”, ma voi potrete espanderlo all’infinito creando N intenti che scatenano N azioni.
L’ultima cosa che ho fatto in termini di riconoscimento vocale è stata configurare N intenti su Snips: Play, Pausa, Stop, Compilation 1 e Compilation 2 e configurato Home Assistant per suonare le musiche che mi piacciono soltanto chiedendo “Hey Snips, Suonami della musica Rock” oppure “Hey Snips, Metti in pausa” oppure “Hey Snips, suonami qualcosa”
Considerazioni finali sul riconoscimento vocale gratis
Anche in questo caso Home Assistant si è dimostrato completamente compatibile anche con tecnologie quali il riconoscimento vocale.
Ho intenzione di rompere ogni barriera che siamo abituati a vedere in merito di Domotica, gestione dell’abitazione e molto altro.
Sono aperto a suggerimenti, per cosa usereste il controllo vocale in casa? Che azioni fareste fare ad Home Assistant?
19 commenti
Ciao Daniele,
Snips lavora bene con Homeassistant in quanto manda messaggi via MQTT che homeassistant è in grado di tradurre. Se tu vuoi bypassare homeassistant, dovresti utilizzare un broker a sè installato nella Raspberry. Quello che ti consiglio io è di usare Homeassistant e fare lanciare a lui lo script Python. Questo, rispetto a quello che vuoi fare tu è molto più semplice e in futuro potrebbe darti una mano con potenziali sviluppi.
A presto
Nik
Non ho capito una cosa. Funziona solo con home Assistant? Cioè, se io volessi dargli un comando ‘go e quel comando mi esegue uno script python qualsiasi, qual’ è la procedura? Ci sto lavorando da giorni e non ne vado fuori
Ciao Riccardo, dovresti trovare il modo di passare gli intenti di Snips a Homeassistant se lo fai slegato. Ma se hai la Raspberry perché non installi tutto li? Io ti consiglio di fare così
Ciao
Nik
volevo chiedere se installando home assistant su QNAP e Snips su raspberry, funzionasse lo stesso.
Ciao Michele,
Ho testato SNIPS come primo componente su Hass.io e non mi son trovato affatto bene. Non so quanto sia migliorata la situazione nell’ultimo periodo, ma ti consiglio di fare una prova installando SNIPS con il metodo che ho descritto qui: https://www.nicolapreo.it/homeassistant-novita-2018/
Se trovi altre soluzioni, Fammi sapere
Ciao
Nik
Ciao,
per adesso snips funziona con la lista della spesa e ho inserito solamente per accendere la tv. Il secondo passo era quello di farlo funzionare con spotify, ma purtroppo quando lancio il comando vocale non succede proprio niente.
N.B.: io uso Hass.io (lo trovo molto più fluido)
Ciao Michele,
Onestamente io ho provato una sola volta con Jarvis (ed ha funzionato) poi ho formattato la Raspberry per altre prove quindi non saprei dirti. Quello che posso consigliarti è di ricaricare completamente il pacchetto su Homeassistant una volta scaricato dal sito di Snips. Hai dato anche un’occhiata al forum di Homeassistant se c’è qualcuno con il tuo stesso errore?
Ciao
Nik
Ciao Michele,
Se non usi Snips e lanci il comando tramite Homeassistant funziona?
Altri comandi usati con Snips funzionano correttamente?
Ciao
Nik
Inoltre ho impostato tutto per chiamarlo “Jarvis” ma mi prende solo “HEY SNIPS”
Boh?!?!
Ciao, io non riesco a far funzionare Snips con il media player di Spotify.
Ho inserito play e pause, ma quando do il comando vocale non succede niente.
Ho fatto cosi:
resumeMusic:
action:
– service: media_player.media_play
entity_id: media_player.spotify
speakerInterrupt:
action:
– sevice: media_player.media_pause
entity_id: media_player.spotify
Consigli?
Ciao Paolo,
Con Snips tu puoi eseguire qualsiasi cosa. Snips scatena un evento a seguito di una frase specifica. Azionato questo evento, Homeassistant può attivare qualsiasi cosa, anche uno Script.
Nik
ciao,
è possibile eseguire uno script bash o python con snips?
Ciao Gianluca,
Da quello che vedo Modipy non è supporato ufficilamente da Homeassistant, ma devi pilorarlo tramite il componente https://home-assistant.io/components/media_player.mpd/. Homeassistant però è integrabile con altri media player quali: https://home-assistant.io/components/#media-player.
C’è un particolare motivo per cui devi usare quel media player li?
Ciao
Nik
Ciao, per fare un player con home assistant usando modipy. Quindi : dire play #nomeplaylist è complicato? devo sempre passare tramite home assistant, giusto? grazie!
Se vuoi investire prendi questo: http://amzn.to/2FeLUEN
L’ho testato e ha una sensibilità tale che ti sente anche se sei dall’altra parte della stanza.
Se invece vuoi fare qualche esperimento, questo va benissimo: http://amzn.to/2CSmpeV
La mia opinione? Se prendi il primo, anche se dopo non lo usi per Snips trovi sicuramente un altro utilizzo 🙂
Ciao
Nik
Solo una cosa, non vanno i link dei dispositivi USB, qual’è il primo che consigli? Grazie.
Ciao Nik
Corretto, hai ragione!
In locale è una cosa, altrimenti non avevo pensato al problema di uscire allo “scoperto” 🙂
concordo con te, proverò questo Jarvis!
Grazie Nik.
Ciao Mattia,
Per ora no. Considerando che la forza di Snips è il fatto che gira in Locale nel Raspberry, se aprissero il canale smartphone potrebbero “Rompere” questa politica. Se non sbaglio puoi farlo con Google ed Amazon ma per come sono impostato io non lo farò mai 🙂
Alla prossima
Nik
Permette di avere anche il riconoscimento dall’app sullo smartphone? O nel caso quello come può essere fatto?
Grazie!
…e complimenti di nuovo!