SlideShare a Scribd company logo
WINDOWS PHONE 8
SPEECH: PARLIAMO CON
LA NOSTRA APP
Michele Locuratolo
Nokia Developer Champion
Microsoft MVP
AGENDA
Nuove funzionalità riconoscimento vocale

_1

Uso dei comandi vocali

_2

Riconoscimento vocale e sintesi nelle app

_3
NUOVE FUNZIONALITÀ
RICONOSCIMENTO VOCALE
•

•
•

VoiceCommand: viene gestita a livello di sistma operativo e
permette di interagire con la nostra app dall’esterno (quando l’app
non è in esecuzione
Speech Recognition: è il motore vero e proprio di riconoscimento
vocale, quello che permette di “tradurre” l’input vocale in testo
Text to speech (TTS): è il sintetizzatore vocale. Quello che ci
permette di far “parlare” la nostra applicazione
SCHEMA INTERAZIONE
SCENARI D’USO
•
•
•
•

Aprire un app ad una pagina specifica (“mostrami il meteo di oggi”)
Dettare appunti vocali
Interagire con l’applicazione (“leggimi la nota 5”)
… etc
VOICE COMMAND: STEP BY STEP
1.
2.
3.
4.

Specificare i comandi nel VoiceCommandDefinition
Registrare il file VCD (al primo avvio)
Gestire i comandi all’avvio dell’applicazione
Aggiornare, se necessario, i parametri dinamicamente
VOICE COMMAND OVERVIEW
•
•
•

Da una qualunque schermata sul device, si può pronunciare il nome
dell’applicazione ed il comando da eseguire.
L’app viene lanciata passando il comando ed i parametri in
querystring
Built-UI per feedback, discoverability etc
VOICE COMMAND OVERVIEW
•
•
•
•
•

I comandi sono contenuti nel file VoiceCommandDefinition (VCD)
Supporto per Dynamic Parameter
Supporto per più lingue
Il VCD viene istanziato una sola volta all’avvio dell’applicazione
I parametri possono essere aggiornati dinamicamente
ANATOMIA VCD (STEP 1)
Lingua
Esempio da
mostrare nella
UI

Nome leggibile
con cui aprire
l’app
Comando
Pagina di
destinazione

Parametri
VOICE COMMAND UI
REGISTRAZIONE VCD (STEP 2)
using Windows.Phone.Speech.VoiceCommands;
// Carica il fine VCD App.xaml.cs
private async void Application_Launching(object sender, LaunchingEventArgs e){
try {
// Specificare il path del file
Uri uri = new Uri("ms-appx:///VoiceCommandDefinition.xml");
await VoiceCommandService.InstallCommandSetsFromFileAsync(uri);
}
catch (Exception ex) {
// Gestire l’eccezione
}
}
GESTIONE COMANDI (STEP 3)
private void MainPage_Loaded(object sender, RoutedEventArgs e){
// Was the page launched by voice commands?
if (this.NavigationContext.QueryString.ContainsKey("voiceCommandName")){
string voiceCommandName = this.NavigationContext.QueryString["voiceCommandName"];
switch (voiceCommandName) {
case “ShowNotes":
string noteID = this.NavigationContext.QueryString["num"];
// Mostra la nota selezionata
break;
// altro
default:
// No match
break;
}
}
}
AGGIORNAMENTO PARAMETRI (STEP 5)
// Recupera il commandset
VoiceCommandSet memosVcs =
VoiceCommandService.InstalledCommandSets[“DemoCommandSet”];
// Aggiorna l’elenco dei parametri(any time)
await memosVcs.UpdatePhraseListAsync("num",
new string[] {"1", "2", "3", "4", "5"});

Aggiornamento dinamico per nuovi elementi relativi all’applicazione (ad esempio,
ID delle note, titoli etc)
CAPABILITIES
Required capabilities
ID_CAP_MICROPHONE
ID_CAP_SPEECH_RECOGNITION
DEMO

Nokia Internal Use Only
IN APP DIALOG
•
•
•
•

Sintesi vocale (Text to Speech)
Riconoscimento vocale
Buit-In UI per feedback
«grammatiche» predefinite e custom
DEMO TTS

Nokia Internal Use Only
TTS
private async void playNote_click(object sender, EventArgs e) {
SpeechSynthesizer synth = new SpeechSynthesizer();
await synth.SpeakTextAsync(_selectedNote.Text);
}


TTS
Sintesi vocale di testi normali
Sintesi Speech Synthesis Markup Language (SSML) via
SpeakSsmlAsync
Eventi:

•
•

•
•
•

•

•

SpeechStarted
BookmarkedReached

API per selezionare la voce da usare
http://msdn.microsoft.com/en-us/library/hh361578
DEMO SSML

Nokia Internal Use Only
RICONOSCIMENTO VOCALE
Riconoscimento vocale integrato
Possibilità di utilizzo di custom grammar
Built-in UI personalizzabile (esempio etc)
Result object con

•
•
•

•
•
•
•
•

Alternates
Confidence
Semantics
Etc…
SPEECHRECOGNIZERUI
ListenText

definisce il messaggio da visualizzare nell’interfaccia di riconoscimento vocale (ad
esempio: detta la tua nota)

ExampleText

è il classico testo di esempio da mostrare all’utente

ReadoutEnabled

se impostato a true, il testo riconosciuto verrà riletto dal sistema. E’ molto utile per dare
un feedback all’utente che, molto probabilmente, non stà guardando il display del
dispositivo

ShowConfirmation

mostra l’eventuale conferma di avvenuto riconoscimento. Se impostato a false, il testo
riconosciuto non verrà riletto
SPEECHRECOGNIZERUI
private async void recNote_click(object sender, EventArgs e) {
SpeechRecognizerUI sr = new SpeechRecognizerUI();
sr.Settings.ListenText = "Cosa scrivo?";
sr.Settings.ExampleText = "far vedere la demo";
sr.Settings.ReadoutEnabled = true;
sr.Settings.ShowConfirmation = true;
SpeechRecognitionUIResult result = await sr.RecognizeWithUIAsync();
if (result.ResultStatus == SpeechRecognitionUIStatus.Succeeded) {
tbxNote.Text = result.RecognitionResult.Text;
}
}
CONFIDENCE
•

•
•

Il livello di confidence, accessibile dalla property
result.RecognitionResult.TextConfidence
Può avere i valori High, Medium, Low e Rejected
In caso di confidence != High, possiamo accedere alle alternative
usando il metodo GetAlternates()
DEMO SPEECH
RECOGNITION

Nokia Internal Use Only
SPEECH RECOGNITION GRAMMAR
•
•

•
•
•

•

Set di parole specifiche interne all’applicazione
Limitazione del range di ricerca delle parole
Miglioramento accuratezza
Latenza ridotta
No UI di conferma
Molto usato per comandi come Salva, Annulla etc.
SPEECH RECOGNITION GRAMMAR
2 set predefiniti su Windows Phone
Default: Short message dictation (SMD)
WebSearch

Esempio
myReco.Grammars.AddGrammarFromPredefinedType
("mySearch",SpeechPredefinedGrammar.WebSearc);
CUSTOM GRAMMAR COMANDI
//Istanziamo il sintetizzatore
SpeechSynthesizer synthesizer = new SpeechSynthesizer();
//Definiamo i comandi
SpeechRecognizer recognizerCommand = new SpeechRecognizer();
var command = new[] { "salva", "annulla", "ripeti" };
recognizerCommand.Grammars.AddGrammarFromList("commands", command);
//Richiediamo il comando da eseguire
await synthesizer.SpeakTextAsync("puoi dire salva ripeti o annulla");
SpeechRecognitionResult commandresult = await recognizerCommand.RecognizeAsync();
string commandResultText = commandresult.Text.ToLower();
switch (commandResultText) {
case "salva"
IN-APP DIALOG
•
•

Possiblità di interagire con l’applicazione usando la voce
Merge di comandi e speech recognition
DEMO IN-APP
DIALOG

Nokia Internal Use Only
CONCLUSIONI
•
•
•
•

•

Ricco set di API per riconoscimento vocale
Possibilità di avviare l’applicazione con la
voce
Text to Speech
Riconoscimento vocale
In-App dialog per poter interagire
dinamicamente con l’app
RISORSE
•
•

•

Documentazione ufficiale: http://msdn.microsoft.com/enus/library/windowsphone/develop/jj206958(v=vs.105).aspx
SSML: http://www.w3.org/TR/speech-synthesis/
Lista articoli in italiano: http://www.michelelocuratolo.com/speech-api-inwindows-phone-8-2/

© 2012 Nokia. All rights reserved.
© 2012 Microsoft. All rights reserved.

12/17/2013

Nokia Internal Use Only
Thank you!

© 2012 Nokia. All rights reserved.
© 2012 Microsoft. All rights reserved.

12/17/2013

Nokia Internal Use Only

More Related Content

Windows Phone 8 speech: parliamo con la nostra app

  • 1. WINDOWS PHONE 8 SPEECH: PARLIAMO CON LA NOSTRA APP Michele Locuratolo Nokia Developer Champion Microsoft MVP
  • 2. AGENDA Nuove funzionalità riconoscimento vocale _1 Uso dei comandi vocali _2 Riconoscimento vocale e sintesi nelle app _3
  • 3. NUOVE FUNZIONALITÀ RICONOSCIMENTO VOCALE • • • VoiceCommand: viene gestita a livello di sistma operativo e permette di interagire con la nostra app dall’esterno (quando l’app non è in esecuzione Speech Recognition: è il motore vero e proprio di riconoscimento vocale, quello che permette di “tradurre” l’input vocale in testo Text to speech (TTS): è il sintetizzatore vocale. Quello che ci permette di far “parlare” la nostra applicazione
  • 5. SCENARI D’USO • • • • Aprire un app ad una pagina specifica (“mostrami il meteo di oggi”) Dettare appunti vocali Interagire con l’applicazione (“leggimi la nota 5”) … etc
  • 6. VOICE COMMAND: STEP BY STEP 1. 2. 3. 4. Specificare i comandi nel VoiceCommandDefinition Registrare il file VCD (al primo avvio) Gestire i comandi all’avvio dell’applicazione Aggiornare, se necessario, i parametri dinamicamente
  • 7. VOICE COMMAND OVERVIEW • • • Da una qualunque schermata sul device, si può pronunciare il nome dell’applicazione ed il comando da eseguire. L’app viene lanciata passando il comando ed i parametri in querystring Built-UI per feedback, discoverability etc
  • 8. VOICE COMMAND OVERVIEW • • • • • I comandi sono contenuti nel file VoiceCommandDefinition (VCD) Supporto per Dynamic Parameter Supporto per più lingue Il VCD viene istanziato una sola volta all’avvio dell’applicazione I parametri possono essere aggiornati dinamicamente
  • 9. ANATOMIA VCD (STEP 1) Lingua Esempio da mostrare nella UI Nome leggibile con cui aprire l’app Comando Pagina di destinazione Parametri
  • 11. REGISTRAZIONE VCD (STEP 2) using Windows.Phone.Speech.VoiceCommands; // Carica il fine VCD App.xaml.cs private async void Application_Launching(object sender, LaunchingEventArgs e){ try { // Specificare il path del file Uri uri = new Uri("ms-appx:///VoiceCommandDefinition.xml"); await VoiceCommandService.InstallCommandSetsFromFileAsync(uri); } catch (Exception ex) { // Gestire l’eccezione } }
  • 12. GESTIONE COMANDI (STEP 3) private void MainPage_Loaded(object sender, RoutedEventArgs e){ // Was the page launched by voice commands? if (this.NavigationContext.QueryString.ContainsKey("voiceCommandName")){ string voiceCommandName = this.NavigationContext.QueryString["voiceCommandName"]; switch (voiceCommandName) { case “ShowNotes": string noteID = this.NavigationContext.QueryString["num"]; // Mostra la nota selezionata break; // altro default: // No match break; } } }
  • 13. AGGIORNAMENTO PARAMETRI (STEP 5) // Recupera il commandset VoiceCommandSet memosVcs = VoiceCommandService.InstalledCommandSets[“DemoCommandSet”]; // Aggiorna l’elenco dei parametri(any time) await memosVcs.UpdatePhraseListAsync("num", new string[] {"1", "2", "3", "4", "5"}); Aggiornamento dinamico per nuovi elementi relativi all’applicazione (ad esempio, ID delle note, titoli etc)
  • 16. IN APP DIALOG • • • • Sintesi vocale (Text to Speech) Riconoscimento vocale Buit-In UI per feedback «grammatiche» predefinite e custom
  • 18. TTS private async void playNote_click(object sender, EventArgs e) { SpeechSynthesizer synth = new SpeechSynthesizer(); await synth.SpeakTextAsync(_selectedNote.Text); } 
  • 19. TTS Sintesi vocale di testi normali Sintesi Speech Synthesis Markup Language (SSML) via SpeakSsmlAsync Eventi: • • • • • • • SpeechStarted BookmarkedReached API per selezionare la voce da usare http://msdn.microsoft.com/en-us/library/hh361578
  • 21. RICONOSCIMENTO VOCALE Riconoscimento vocale integrato Possibilità di utilizzo di custom grammar Built-in UI personalizzabile (esempio etc) Result object con • • • • • • • • Alternates Confidence Semantics Etc…
  • 22. SPEECHRECOGNIZERUI ListenText definisce il messaggio da visualizzare nell’interfaccia di riconoscimento vocale (ad esempio: detta la tua nota) ExampleText è il classico testo di esempio da mostrare all’utente ReadoutEnabled se impostato a true, il testo riconosciuto verrà riletto dal sistema. E’ molto utile per dare un feedback all’utente che, molto probabilmente, non stà guardando il display del dispositivo ShowConfirmation mostra l’eventuale conferma di avvenuto riconoscimento. Se impostato a false, il testo riconosciuto non verrà riletto
  • 23. SPEECHRECOGNIZERUI private async void recNote_click(object sender, EventArgs e) { SpeechRecognizerUI sr = new SpeechRecognizerUI(); sr.Settings.ListenText = "Cosa scrivo?"; sr.Settings.ExampleText = "far vedere la demo"; sr.Settings.ReadoutEnabled = true; sr.Settings.ShowConfirmation = true; SpeechRecognitionUIResult result = await sr.RecognizeWithUIAsync(); if (result.ResultStatus == SpeechRecognitionUIStatus.Succeeded) { tbxNote.Text = result.RecognitionResult.Text; } }
  • 24. CONFIDENCE • • • Il livello di confidence, accessibile dalla property result.RecognitionResult.TextConfidence Può avere i valori High, Medium, Low e Rejected In caso di confidence != High, possiamo accedere alle alternative usando il metodo GetAlternates()
  • 26. SPEECH RECOGNITION GRAMMAR • • • • • • Set di parole specifiche interne all’applicazione Limitazione del range di ricerca delle parole Miglioramento accuratezza Latenza ridotta No UI di conferma Molto usato per comandi come Salva, Annulla etc.
  • 27. SPEECH RECOGNITION GRAMMAR 2 set predefiniti su Windows Phone Default: Short message dictation (SMD) WebSearch Esempio myReco.Grammars.AddGrammarFromPredefinedType ("mySearch",SpeechPredefinedGrammar.WebSearc);
  • 28. CUSTOM GRAMMAR COMANDI //Istanziamo il sintetizzatore SpeechSynthesizer synthesizer = new SpeechSynthesizer(); //Definiamo i comandi SpeechRecognizer recognizerCommand = new SpeechRecognizer(); var command = new[] { "salva", "annulla", "ripeti" }; recognizerCommand.Grammars.AddGrammarFromList("commands", command); //Richiediamo il comando da eseguire await synthesizer.SpeakTextAsync("puoi dire salva ripeti o annulla"); SpeechRecognitionResult commandresult = await recognizerCommand.RecognizeAsync(); string commandResultText = commandresult.Text.ToLower(); switch (commandResultText) { case "salva"
  • 29. IN-APP DIALOG • • Possiblità di interagire con l’applicazione usando la voce Merge di comandi e speech recognition
  • 31. CONCLUSIONI • • • • • Ricco set di API per riconoscimento vocale Possibilità di avviare l’applicazione con la voce Text to Speech Riconoscimento vocale In-App dialog per poter interagire dinamicamente con l’app
  • 32. RISORSE • • • Documentazione ufficiale: http://msdn.microsoft.com/enus/library/windowsphone/develop/jj206958(v=vs.105).aspx SSML: http://www.w3.org/TR/speech-synthesis/ Lista articoli in italiano: http://www.michelelocuratolo.com/speech-api-inwindows-phone-8-2/ © 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved. 12/17/2013 Nokia Internal Use Only
  • 33. Thank you! © 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved. 12/17/2013 Nokia Internal Use Only