Riconoscimento Vocale Gratis con Home Assistant

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:

 

Se volete il Bundle:
Il Riconoscimento vocale gratis che andremo a configurare è molto più semplice e qualitativamente migliore con dispositivi USB. Se riuscite a trovare un microfono ed un altoparlante USB è la cosa migliore. Posso intanto suggerirvi questi:
Nelle mie prove io ho utilizzato questo. Devo dire che ha un audio pazzesco. Il Sennheiser ha microfono e altoparlante integrato.
In alternativa potete ripiegare su dispositivi come questi:
Onestamente, vi consiglio di spendere un po’ di più ed orientarsi sul primo. Se un giorno non vorrete più utilizzarlo per la domotica, potrete sempre riutilizzarlo come speaker portatile. Ha un suono davvero buono.
 

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.

 

Se volete il Bundle:

 

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:

  • 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

  1. Permette di avere anche il riconoscimento dall’app sullo smartphone? O nel caso quello come può essere fatto?
    Grazie!
    …e complimenti di nuovo!

  2. 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

  3. 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.

  4. Solo una cosa, non vanno i link dei dispositivi USB, qual’è il primo che consigli? Grazie.
    Ciao Nik

  5. 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

  6. Ciao, per fare un player con home assistant usando modipy. Quindi : dire play #nomeplaylist è complicato? devo sempre passare tramite home assistant, giusto? grazie!

  7. 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

  8. 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?

  9. Inoltre ho impostato tutto per chiamarlo “Jarvis” ma mi prende solo “HEY SNIPS”

    Boh?!?!

  10. Ciao Michele,

    Se non usi Snips e lanci il comando tramite Homeassistant funziona?
    Altri comandi usati con Snips funzionano correttamente?

    Ciao

    Nik

  11. 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

  12. 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)

  13. volevo chiedere se installando home assistant su QNAP e Snips su raspberry, funzionasse lo stesso.

  14. 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

  15. 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

  16. 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

Lascia un commento