Speech API: il telefono parla e ci ascolta

31
Massimo Bonanni [email protected] http://codetailor.blogspot.com @massimobonanni Speech API - il telefono parla e ci ascolta ASPItalia.com DomusDotNet

description

Sessione "Speech API: il telefono parla e ci ascolta" tenuta durante l'evento "WP r8me" (http://www.domusdotnet.org/eventi/wp-r8me.aspx) il 18/01/2013

Transcript of Speech API: il telefono parla e ci ascolta

Page 1: Speech API: il telefono parla e ci ascolta

Massimo Bonanni

[email protected]

http://codetailor.blogspot.com

@massimobonanni

Speech API - il telefono parla e ci ascolta

ASPItalia.com DomusDotNet

Page 2: Speech API: il telefono parla e ci ascolta

Agenda

• WP7.x vs WP8• Text to Speech• Comandi Vocali• Riconoscimento Vocale

Page 3: Speech API: il telefono parla e ci ascolta

WP7.x vs WP8

Page 4: Speech API: il telefono parla e ci ascolta

WP7.x vs WP8

• WP7.x ha il supporto ai comandi vocali (ad esempio «Avvia

MyApp» per eseguire l’applicazione MyApp);

• WP7.x permette la lettura degli SMS da parte del device;

• WP7.x permette all’utente di scrivere SMS dettandoli.

….ma tutte queste funzionalità non sono accessibili allo

sviluppatore!!!

Page 5: Speech API: il telefono parla e ci ascolta

WP7.x vs WP8

Windows Phone 8 permette allo sviluppatore di utilizzare

completamente il supporto legato all’utilizzo della voce:

• Le nostre applicazioni possono «parlare» utilizzando le

funzionalità di Speech Synthesis (Text To Speech);

• Le nostre applicazioni possono essere avviate utilizzando

comandi anche complessi (Voice Command);

• Le applicazioni sono in grado di comprendere ciò che l’utente

pronuncia (Speech Recognition).

Page 6: Speech API: il telefono parla e ci ascolta

WP7.x vs WP8

Le funzionalità di Speech Recognition necessitano di una

connessione ad internet per funzionare• ergo non date all’utente solo il riconoscimento vocale

per eseguire un’operazione.

Le funzionalità di Speech Synthesis (Text to Speech) e dei

comandi vocali (Voice Command) non necessitano di una

connessione ad internet.

Page 7: Speech API: il telefono parla e ci ascolta

7

Text to Speech

Page 8: Speech API: il telefono parla e ci ascolta

Text to Speech

Per utilizzare il Text To Speech l’applicazione deve avere la capability

ID_CAP_SPEECH_RECOGNITION abilitata nel manifest.

Le classi utili per il Text To Speech sono nel namespace

Windows.Phone.Speech.Synthesis

Page 9: Speech API: il telefono parla e ci ascolta

Text to Speech – facile facile

• La classe SpeechSynthesizer fornisce funzionalità di

base per il TTS;

• Il metodo SpeakTextAsync «legge» il contenuto di una

stringa in maniera Asincrona (richiede il modificatore

Async nel chiamante);

• Il TTS funziona anche se non c’è connettività.

Public Async Sub Speak()     Dim synth = New SpeechSynthesizer()     Await synth.SpeakTextAsync("Ciao a tutti!") End Sub

Page 10: Speech API: il telefono parla e ci ascolta

Text to Speech – le voci

La classe InstalledVoices mette a disposizione l’elenco delle

voci installate nel dispositivo.

La classe VoiceInformation contiene informazioni riguardo la

specifica voce come lingua, genere (maschile o femminile),

nome visualizzato e descrizione estesa.

Public Sub SetItalianVoice()     Dim synth = New SpeechSynthesizer()

    Dim italianVoices = From v In InstalledVoices.All                       Where v.Language = "it-IT"                       Select v

    synth.SetVoice(italianVoices.First) End Sub

Page 11: Speech API: il telefono parla e ci ascolta

Text to Speech - Speech Synthesis Markup Language

Il Synthesizer è in grado di utilizzare anche file XML secondo

lo standard SSML.

Dim ssmlUri = New Uri("ms-appx:///SSML.xml",  UriKind.RelativeOrAbsolute) Await _synth.SpeakSsmlFromUriAsync(ssmlUri)

Page 12: Speech API: il telefono parla e ci ascolta

Text to Speech - Speech Synthesis Markup Language

SSML è uno standard W3C (http://www.w3.org/TR/speech-

synthesis/)

<!DOCTYPE speak PUBLIC "-//W3C//DTD SYNTHESIS 1.0//EN«              "http://www.w3.org/TR/speech-synthesis/synthesis.dtd"> <speak version="1.0«        xmlns=http://www.w3.org/2001/10/synthesis        xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance        xsi:schemaLocation="http://www.w3.org/2001/10/synthesis                           http://www.w3.org/TR/speech-synthesis/synthesis.xsd"        xml:lang="it-IT">   <p>     <voice gender="female">       <s>Utilizzare le <voice xml:lang="en-US">Speech API</voice>        per dialogare con il proprio <emphasis>Windows Phone 8</emphasis></s>    </voice>   </p> </speak>

Page 13: Speech API: il telefono parla e ci ascolta

DEMO

Text to Speech

Click to place personal photo

Click to place personal photo

Click to place personal photoDEMO

ASPItalia.com DomusDotNet

Page 14: Speech API: il telefono parla e ci ascolta

Comandi Vocali

Page 15: Speech API: il telefono parla e ci ascolta

Comandi Vocali

• Possiamo utilizzare la voce per avviare le nostre applicazioni.

• Per l’utilizzo dei Comandi Vocali non è necessaria una

connessione ad internet.

• Le classi che permettono la gestione dei comandi vocali sono nel

namespace Windows.Phone.Speech.VoiceCommands.

• Sono necessarie le seguenti capability:• ID_CAP_MICROPHONE• ID_CAP_NETWORKING• ID_CAP_SPEECH_RECOGNITION

Page 16: Speech API: il telefono parla e ci ascolta

Comandi Vocali – Voice Command Definition File

E’ un file XML che contiene le

informazioni relative ai comandi

vocali supportati dalla nostra

applicazione.

Deve essere «installato» almeno

una volta prima di poter essere

disponibile nel sistema.

Ogni applicazione ha, al massimo,

un solo VCD.

Può contenere comandi localizzati

Page 17: Speech API: il telefono parla e ci ascolta

Comandi Vocali – Voice Command Definition FileNome

identificativo del set di comandi

Vocabolo che avvia

l’applicazioneTag che identifica il singolo

comandoEsempio di comando visualizzato dal sistema

nell’helpSintassi del comando:

possono esserci vocaboli non obbligatori e placeholder che possono essere sostituiti da

liste di valori

Feedback visivo (e vocale) che il sistema restituisce all’utente

quando il comando è compreso

Pagina dell’applicazione che deve essere aperta dal

sistema

Elenco di valori (Phrase List) utilizzabili cone «variabili»

nei comandi

Page 18: Speech API: il telefono parla e ci ascolta

Comandi Vocali - Installare un VCD

La classe VoiceCommandService ci consente di installare un

VCD:

Try     Dim vcdUri = New System.Uri("ms-appx:///VoiceCommandDefinition.xml",  UriKind.Absolute)     Await VoiceCommandService.InstallCommandSetsFromFileAsync(vcdUri)     MessageBox.Show("VCD Installato correttamente!")Catch ex As Exception     MessageBox.Show("Errore: " & ex.Message)End Try

Page 19: Speech API: il telefono parla e ci ascolta

10/04/202319

Demo, cerca Promessi

Sposi

/MainPage.xa

ml?voiceComm

andName=Sear

chDocument&r

eco=Demo%20c

erca%20prome

ssi

%20sposi&tit

le=pro....

Comandi Vocali – Come funzionano

Page 20: Speech API: il telefono parla e ci ascolta

Comandi Vocali e QueryString

Nel momento in cui avviamo la nostra applicazione utilizzando un

comando vocale, i parametri riconosciuti dal sistema e definiti nel

VCD vengono restituiti nella query string del NavigationContext.

Private Sub MainPage_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded     If NavigationContext.QueryString.ContainsKey("voiceCommandName") Then         Dim voiceCommand = NavigationContext.QueryString("voiceCommandName")         Select Case voiceCommand             Case ”OpenDocument”                 ' Apri il document                 Dim docNumber = NavigationContext.QueryString("number")             Case ”SearchDocument”                 ' Ricerca document                 Dim docTitle = NavigationContext.QueryString("title")         End Select     End If End Sub

Page 21: Speech API: il telefono parla e ci ascolta

Comandi Vocali - Help dei comandi

Page 22: Speech API: il telefono parla e ci ascolta

Comandi Vocali - Phrase list

• Non è possibile aggiungere dinamicamente dei comandi

• Si possono aggiungere dinamicamente valori alle phrase

list

• Per modificare una phrase list occorre:• Recuperare il set di comandi in base alla lingua;• Eseguire l’update della phrase list (la lista può essere

solo completamente riscritta).Dim voiceCommandSet = VoiceCommandService.InstalledCommandSets("DemoIta")If voiceCommandSet IsNot Nothing Then     Await voiceCommandSet.UpdatePhraseListAsync("title",                    {"promessi sposi", "divina commedia", "guerra e pace"})End If

Page 23: Speech API: il telefono parla e ci ascolta

DEMO

Comandi Vocali

Click to place personal photo

Click to place personal photo

Click to place personal photoDEMO

ASPItalia.com DomusDotNet

Page 24: Speech API: il telefono parla e ci ascolta

Riconoscimento Vocale

Page 25: Speech API: il telefono parla e ci ascolta

Riconoscimento Vocale

• WP8 include:• un runtime di Speech Recognition;• delle API per interagire con l’utente;• grammatiche di default;• GUI per permettere all’utente di conoscere e scoprire le funzionalità di

speech recognition.

• Per il riconoscimento vocale è necessaria una connessione ad internet.

• Le classi per il riconoscimento vocale sono nel namespace

Windows.Phone.Speech.Recognition

• Per utilizzare le funzionalità di riconoscimento vocale sono necessarie le

seguenti capability:• ID_CAP_MICROPHONE• ID_CAP_NETWORKING• ID_CAP_SPEECH_RECOGNITION

Page 26: Speech API: il telefono parla e ci ascolta

Riconoscimento Vocale - Grammatiche

• Una grammatica definisce le parole e le frasi che un motore di

riconoscimento vocale è in grado di comprendere.

• In WP8 abbiamo tre tipologie di grammatiche :• Grammatiche predefinite: sono due, una pensata per le

ricerche web e l’altra per le piccole frasi (tipicamente gli SMS);• Lista di vocaboli: è una grammatica custom, molto leggera,

composta da una lista di vocaboli (o brevissime frasi). Adatta

alla selezione di opzioni;• Grammatica XML: basata sullo standard SRGS (Speech

Recognition Grammar Specification) versione 1.0. Permette di

avere anche grammatiche complesse.

Page 27: Speech API: il telefono parla e ci ascolta

Riconoscimento Vocale – facile facile

La modalità più semplice per implementare delle funzionalità di

riconoscimento vocale è l’utilizzo della classe SpeechRecognizerUI.

La SpeechRecognizerUI apre l’interfaccia che

comunica all’utente che il sistema è in ascolto.

Se non vogliamo la UI possiamo utilizzare la classe

SpeechRecognizer

Dim _RecoUI = New SpeechRecognizerUI Dim recoResult = Await _RecoUI.RecognizeWithUIAsync() If recoResult.ResultStatus = SpeechRecognitionUIStatus.Succeeded Then     Me.txtRecognized.Text = recoResult.RecognitionResult.TextElse     MessageBox.Show(recoResult.ResultStatus.ToString()) End If

Page 28: Speech API: il telefono parla e ci ascolta

10/04/202328

Riconoscimento Vocale – Phrase List Grammar

Se vogliamo limitare le parole che il motore di riconoscimento

vocale è in grado di riconoscere possiamo utilizzare una lista di

vocaboli come grammatica.

La collezione Grammars della classe SpeechRecognizer permette di

aggiungere permette di gestire la grammatica.

Possiamo aggiungere quante liste vogliamo identificandole con una

chiave (nell’esempio «phraseList», detta anche «Rule»)

Private Async Function InitializeSpeechRecognizer() As task     ' Istanzio l'oggetto da utilizzare per il riconoscimento     recognizer = New SpeechRecognizer     ' Imposto il file di grammatica ed eseguo il preloading     recognizer.Grammars.AddGrammarFromList("phraseList",  {"topolino", "minni", "paperino", "pluto", "paperina", "pippo"})     Await recognizer.PreloadGrammarsAsync() End Function

Page 29: Speech API: il telefono parla e ci ascolta

10/04/202329

Riconoscimento Vocale – Custom Grammar

Il formato SRGS permette di ottenere

grammatiche complesse e custom.

SRGS è standard W3C

http://www.w3.org/TR/speech-

grammar/

Private Async Function InitializeSpeechRecognizer() As task     ' Istanzio l'oggetto da utilizzare per il riconoscimento     recognizerUI = New SpeechRecognizerUI     ' Imposto alcune proprietà di interfaccia     recognizerUI.Settings.ListenText = "Dimmi quali album o artisti vuoi trovare“     recognizerUI.Settings.ExampleText = "Trova artisti nella categoria rock“     ' Creo l'URI relativo al file di grammatical     Dim grammarFileUri = New Uri("ms-appx:///SRGSGrammar.xml")     ' Imposto il file di grammatica ed eseguo il preloading     recognizerUI.Recognizer.Grammars.AddGrammarFromUri("myGrammar", grammarFileUri)     Await recognizerUI.Recognizer.PreloadGrammarsAsync()End Function

Page 30: Speech API: il telefono parla e ci ascolta

DEMO

Riconoscimento Vocale

Click to place personal photo

Click to place personal photo

Click to place personal photoDEMO

ASPItalia.com DomusDotNet

Page 31: Speech API: il telefono parla e ci ascolta

Riferimenti

• Speech for Windows Phone 8http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj206958(v=vs.105).aspx

• Speech Samples for Windows Phone 8http://aka.ms/v4m2dl

• Speech Recognition Grammar Specification Version 1.0http://www.w3.org/TR/speech-grammar/

• Speech Synthesis Markup Language (SSML) Version 1.0http://www.w3.org/TR/speech-synthesis/

• Channel9 - Speech Input in Windows Phone 8 (Jump Start)http://channel9.msdn.com/Series/MVA-Jump-Start/Building-Apps-for-Windows-Phone-8-Jump-Start-13-Speech-Input-in-Windows-Phone-8