Chatting with windows phone 8 : Speech API

31
Template designed by Chatting with Windows Phone 8: Speech API Massimo Bonanni [email protected] @massimobonanni codetailor.blogspot.com

description

Sessione relative alle Speech API di Windows Phone 8 tenuta al DotNetCampus (www.dotnetcampus.it) edizione 2013

Transcript of Chatting with windows phone 8 : Speech API

Page 1: Chatting with windows phone 8 : Speech API

Template designed by

Chatting with Windows Phone 8: Speech API

Massimo [email protected]@massimobonannicodetailor.blogspot.com

Page 2: Chatting with windows phone 8 : Speech API

brought to you by

Page 3: Chatting with windows phone 8 : Speech API

MASSIMO BONANNI• .NET Senior Developer (soprattutto a causa dell’età ), trainer,

appassionato

• Microsoft MVP per VB.NET dal 2011 (VB.NET in onore dell’età di cui sopra )

• Autore di articoli per alcune delle più importante riviste nazionali di informatica

• Fondatore e Presidente della community DomusDotNet (www.domusdotnet.org)

chi sono

Page 4: Chatting with windows phone 8 : Speech API

WP7.x vs WP8

Comandi Vocali

Text to Speech

Riconoscimento Vocale

Conclusioni

agenda

Page 5: Chatting with windows phone 8 : Speech API

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

WP7.x vs WP8

Page 6: Chatting with windows phone 8 : Speech API

Windows Phone 8 permette allo sviluppatore di utilizzare completamente il supporto legato all’utilizzo della voce:

• Le nostre applicazioni possono essere avviate utilizzando comandi anche complessi (Voice Command);

• Le nostre applicazioni possono «parlare» utilizzando le funzionalità di Speech Synthesis (Text To Speech);

• Le applicazioni sono in grado di comprendere ciò che l’utente pronuncia (Speech Recognition).

WP7.x vs WP8

Page 7: Chatting with windows phone 8 : Speech API

Le funzionalità di Speech Recognition possono necessitare di una connessione ad internet per funzionare

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.

WP7.x vs WP8

Page 8: Chatting with windows phone 8 : Speech API

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

Comandi Vocali

Page 9: Chatting with windows phone 8 : Speech API

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

Comandi Vocali – Voice Command Definition File

Page 10: Chatting with windows phone 8 : Speech API

<VoiceCommands xmlns="http://schemas.microsoft.com/voicecommands/1.0">   

<CommandSet xml:lang="it-IT" Name="DemoIta">

    <CommandPrefix>Demo</CommandPrefix>

     <Example>Apri nuovo documento.</Example>

    

<Command Name="OpenDocument">

     <Example> apri documento 1</Example>

      <ListenFor> apri documento [numero] {number}</ListenFor>

     <Feedback> Sto aprendo il documento numero {number}... </Feedback>

     <Navigate />

    </Command>

.

.

.

     <PhraseList Label="number">

        <Item> 1 </Item>

       <Item> 2 </Item>

       <Item> 3 </Item>

     </PhraseList>

   </CommandSet>

</VoiceCommands>

Comandi Vocali – Voice Command Definition FileNome identificativo del set di

comandi

Vocabolo che avvia l’applicazione

Tag che identifica il singolo comando

Esempio di comando visualizzato dal sistema nell’help

Sintassi 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 11: Chatting with windows phone 8 : Speech API

La classe VoiceCommandService ci consente di installare un VCD:

Comandi Vocali - 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 12: Chatting with windows phone 8 : Speech API

Comandi Vocali – Come funzionano

Demo, cerca Promessi

Sposi

/MainPage.xaml?voiceCommandNam

e=SearchDocument&reco=Demo%20c

erca%20promessi

%20sposi&title=pro....

Page 13: Chatting with windows phone 8 : Speech API

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.

Comandi Vocali e QueryString

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 14: Chatting with windows phone 8 : Speech API

Comandi Vocali - Help dei comandi

Il file dei comandi viene utilizzato anche per l’help visual da mostrare all’utente:

Page 15: Chatting with windows phone 8 : Speech API

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

Comandi Vocali - Phrase list

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

Page 16: Chatting with windows phone 8 : Speech API

dem

o Comandi Vocali

Page 17: Chatting with windows phone 8 : Speech API

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

Text to Speech

Page 18: Chatting with windows phone 8 : Speech API

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

Text to Speech – facile facile

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

Page 19: Chatting with windows phone 8 : Speech API

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.

Text to Speech – le voci

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 20: Chatting with windows phone 8 : Speech API

Il Synthesizer è in grado di utilizzare anche file XML secondo lo standard definito nel Speach Synthesis Markup Language

Text to Speech - Speech Synthesis Markup Language

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

Page 21: Chatting with windows phone 8 : Speech API

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

Text to Speech - Speech Synthesis Markup Language

<!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 22: Chatting with windows phone 8 : Speech API

dem

o Text to Speech

Page 23: Chatting with windows phone 8 : Speech API

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 potrebbe essere 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

Riconoscimento Vocale

Page 24: Chatting with windows phone 8 : Speech API

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.

Riconoscimento Vocale - Grammatiche

Page 25: Chatting with windows phone 8 : Speech API

La modalità più semplice per implementare delle funzionalità di riconoscimento vocale è l’utilizzo della classe SpeechRecognizerUI.

La SpeechRecognizerUI apre l’interfaccia checomunica all’utente che il sistema è in ascolto.

Se non vogliamo la UI possiamo utilizzare la classeSpeechRecognizer

Riconoscimento Vocale – facile facile

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 26: Chatting with windows phone 8 : Speech API

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

Usando le phrase list non si ha la necessità della connessione internet.

Riconoscimento Vocale – Phrase List Grammar

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 27: Chatting with windows phone 8 : Speech API

Il formato SRGS permette di ottenere grammatiche complesse e custom.

Se utilizziamo l’SRGS non abbiamo bisogno della connessionead internet.

SRGS è standard W3Chttp://www.w3.org/TR/speech-grammar/

Riconoscimento Vocale – Custom 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 28: Chatting with windows phone 8 : Speech API

dem

o Riconoscimento

Vocale

Page 29: Chatting with windows phone 8 : Speech API

Utilizzare la voce permette di fornire una user experience migliore rispetto alla sola interazione touch ma…..

• Usate comandi semplici e “naturali”;

• Implementate sempre la controparte touch (non solo voce);

• Scegliete un numero di comandi congrui (non ne prevedete troppi);

• Mantenete le frasi corte per evitare “falsi positivi”;

• Date un feedback all’utente e la possibilità di annullare un commando;

• Localizzate l’utilizzo della voce in tutte le lingue previste dall’applicazione;

• Permettete all’utente di selezionare la voce che piu’ gli aggrada.

Conclusioni

Page 30: Chatting with windows phone 8 : Speech API

Q&ANon sparate sul pianista!!!!!!

Page 31: Chatting with windows phone 8 : Speech API

Grazie a tutti per la partecipazione

Riceverete il link per il download a slide e demo via email nei prossimi giorni

Per contattarmi

[email protected]

Grazie