windows phone 8 speech: parliamo con la nostra app
DESCRIPTION
Microsoft Windows Phone ha un sistema di riconoscimento vocale molto sofisticato. Ci permette di impartire comandi al sistema operativo, leggere e dettare SMS, effettuare chiamate etc. In Windows Phone 8 è stata introdotta, per noi sviluppatori, la possibilità di utilizzare i comandi vocali anche nelle nostre applicazioni. In questa sessione vedremo come implementare il riconoscimento vocale nelle nostre app. / Microsoft Windows Phone has a very sophisticated speech-recognition system. Users can give commands to the operating system, read and dictate text messages, make phone calls, etc. With Windows Phone 8, developers have the ability to use voice commands in applications. In this webinar, you’ll find out how to implement voice recognition in your apps.TRANSCRIPT
![Page 1: Windows Phone 8 speech: parliamo con la nostra app](https://reader033.vdocuments.us/reader033/viewer/2022052822/554e0491b4c90518298b4c01/html5/thumbnails/1.jpg)
WINDOWS PHONE 8 SPEECH: PARLIAMO CON LA NOSTRA APP Michele Locuratolo
Nokia Developer Champion
Microsoft MVP
![Page 2: Windows Phone 8 speech: parliamo con la nostra app](https://reader033.vdocuments.us/reader033/viewer/2022052822/554e0491b4c90518298b4c01/html5/thumbnails/2.jpg)
AGENDA
Nuove funzionalità riconoscimento vocale
Uso dei comandi vocali
Riconoscimento vocale e sintesi nelle app
_1
_2
_3
![Page 3: Windows Phone 8 speech: parliamo con la nostra app](https://reader033.vdocuments.us/reader033/viewer/2022052822/554e0491b4c90518298b4c01/html5/thumbnails/3.jpg)
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
![Page 4: Windows Phone 8 speech: parliamo con la nostra app](https://reader033.vdocuments.us/reader033/viewer/2022052822/554e0491b4c90518298b4c01/html5/thumbnails/4.jpg)
SCHEMA INTERAZIONE
![Page 5: Windows Phone 8 speech: parliamo con la nostra app](https://reader033.vdocuments.us/reader033/viewer/2022052822/554e0491b4c90518298b4c01/html5/thumbnails/5.jpg)
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
![Page 6: Windows Phone 8 speech: parliamo con la nostra app](https://reader033.vdocuments.us/reader033/viewer/2022052822/554e0491b4c90518298b4c01/html5/thumbnails/6.jpg)
VOICE COMMAND: STEP BY STEP
1. Specificare i comandi nel VoiceCommandDefinition
2. Registrare il file VCD (al primo avvio)
3. Gestire i comandi all’avvio dell’applicazione
4. Aggiornare, se necessario, i parametri dinamicamente
![Page 7: Windows Phone 8 speech: parliamo con la nostra app](https://reader033.vdocuments.us/reader033/viewer/2022052822/554e0491b4c90518298b4c01/html5/thumbnails/7.jpg)
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
![Page 8: Windows Phone 8 speech: parliamo con la nostra app](https://reader033.vdocuments.us/reader033/viewer/2022052822/554e0491b4c90518298b4c01/html5/thumbnails/8.jpg)
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
![Page 9: Windows Phone 8 speech: parliamo con la nostra app](https://reader033.vdocuments.us/reader033/viewer/2022052822/554e0491b4c90518298b4c01/html5/thumbnails/9.jpg)
ANATOMIA VCD (STEP 1) Nome leggibile con cui aprire
l’app
Esempio da mostrare nella
UI Comando
Pagina di destinazione
Lingua
Parametri
![Page 10: Windows Phone 8 speech: parliamo con la nostra app](https://reader033.vdocuments.us/reader033/viewer/2022052822/554e0491b4c90518298b4c01/html5/thumbnails/10.jpg)
VOICE COMMAND UI
![Page 11: Windows Phone 8 speech: parliamo con la nostra app](https://reader033.vdocuments.us/reader033/viewer/2022052822/554e0491b4c90518298b4c01/html5/thumbnails/11.jpg)
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 } }
![Page 12: Windows Phone 8 speech: parliamo con la nostra app](https://reader033.vdocuments.us/reader033/viewer/2022052822/554e0491b4c90518298b4c01/html5/thumbnails/12.jpg)
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;
}
}
}
![Page 13: Windows Phone 8 speech: parliamo con la nostra app](https://reader033.vdocuments.us/reader033/viewer/2022052822/554e0491b4c90518298b4c01/html5/thumbnails/13.jpg)
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)
![Page 14: Windows Phone 8 speech: parliamo con la nostra app](https://reader033.vdocuments.us/reader033/viewer/2022052822/554e0491b4c90518298b4c01/html5/thumbnails/14.jpg)
CAPABILITIES
Required capabilities
ID_CAP_MICROPHONE
ID_CAP_SPEECH_RECOGNITION
![Page 15: Windows Phone 8 speech: parliamo con la nostra app](https://reader033.vdocuments.us/reader033/viewer/2022052822/554e0491b4c90518298b4c01/html5/thumbnails/15.jpg)
Nokia Internal Use Only
DEMO
![Page 16: Windows Phone 8 speech: parliamo con la nostra app](https://reader033.vdocuments.us/reader033/viewer/2022052822/554e0491b4c90518298b4c01/html5/thumbnails/16.jpg)
IN APP DIALOG
• Sintesi vocale (Text to Speech)
• Riconoscimento vocale
• Buit-In UI per feedback
• «grammatiche» predefinite e custom
![Page 17: Windows Phone 8 speech: parliamo con la nostra app](https://reader033.vdocuments.us/reader033/viewer/2022052822/554e0491b4c90518298b4c01/html5/thumbnails/17.jpg)
Nokia Internal Use Only
DEMO TTS
![Page 18: Windows Phone 8 speech: parliamo con la nostra app](https://reader033.vdocuments.us/reader033/viewer/2022052822/554e0491b4c90518298b4c01/html5/thumbnails/18.jpg)
TTS
private async void playNote_click(object sender, EventArgs e) { SpeechSynthesizer synth = new SpeechSynthesizer();
await synth.SpeakTextAsync(_selectedNote.Text); }
![Page 19: Windows Phone 8 speech: parliamo con la nostra app](https://reader033.vdocuments.us/reader033/viewer/2022052822/554e0491b4c90518298b4c01/html5/thumbnails/19.jpg)
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
![Page 20: Windows Phone 8 speech: parliamo con la nostra app](https://reader033.vdocuments.us/reader033/viewer/2022052822/554e0491b4c90518298b4c01/html5/thumbnails/20.jpg)
Nokia Internal Use Only
DEMO SSML
![Page 21: Windows Phone 8 speech: parliamo con la nostra app](https://reader033.vdocuments.us/reader033/viewer/2022052822/554e0491b4c90518298b4c01/html5/thumbnails/21.jpg)
RICONOSCIMENTO VOCALE
• Riconoscimento vocale integrato
• Possibilità di utilizzo di custom grammar
• Built-in UI personalizzabile (esempio etc)
• Result object con • Alternates
• Confidence
• Semantics
• Etc…
![Page 22: Windows Phone 8 speech: parliamo con la nostra app](https://reader033.vdocuments.us/reader033/viewer/2022052822/554e0491b4c90518298b4c01/html5/thumbnails/22.jpg)
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
![Page 23: Windows Phone 8 speech: parliamo con la nostra app](https://reader033.vdocuments.us/reader033/viewer/2022052822/554e0491b4c90518298b4c01/html5/thumbnails/23.jpg)
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; } }
![Page 24: Windows Phone 8 speech: parliamo con la nostra app](https://reader033.vdocuments.us/reader033/viewer/2022052822/554e0491b4c90518298b4c01/html5/thumbnails/24.jpg)
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()
![Page 25: Windows Phone 8 speech: parliamo con la nostra app](https://reader033.vdocuments.us/reader033/viewer/2022052822/554e0491b4c90518298b4c01/html5/thumbnails/25.jpg)
Nokia Internal Use Only
DEMO SPEECH RECOGNITION
![Page 26: Windows Phone 8 speech: parliamo con la nostra app](https://reader033.vdocuments.us/reader033/viewer/2022052822/554e0491b4c90518298b4c01/html5/thumbnails/26.jpg)
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.
![Page 27: Windows Phone 8 speech: parliamo con la nostra app](https://reader033.vdocuments.us/reader033/viewer/2022052822/554e0491b4c90518298b4c01/html5/thumbnails/27.jpg)
SPEECH RECOGNITION GRAMMAR
2 set predefiniti su Windows Phone
Default: Short message dictation (SMD)
WebSearch
Esempio
myReco.Grammars.AddGrammarFromPredefinedType
("mySearch",SpeechPredefinedGrammar.WebSearc);
![Page 28: Windows Phone 8 speech: parliamo con la nostra app](https://reader033.vdocuments.us/reader033/viewer/2022052822/554e0491b4c90518298b4c01/html5/thumbnails/28.jpg)
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"
![Page 29: Windows Phone 8 speech: parliamo con la nostra app](https://reader033.vdocuments.us/reader033/viewer/2022052822/554e0491b4c90518298b4c01/html5/thumbnails/29.jpg)
IN-APP DIALOG
• Possiblità di interagire con l’applicazione usando la voce
• Merge di comandi e speech recognition
![Page 30: Windows Phone 8 speech: parliamo con la nostra app](https://reader033.vdocuments.us/reader033/viewer/2022052822/554e0491b4c90518298b4c01/html5/thumbnails/30.jpg)
Nokia Internal Use Only
DEMO IN-APP DIALOG
![Page 31: Windows Phone 8 speech: parliamo con la nostra app](https://reader033.vdocuments.us/reader033/viewer/2022052822/554e0491b4c90518298b4c01/html5/thumbnails/31.jpg)
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
![Page 32: Windows Phone 8 speech: parliamo con la nostra app](https://reader033.vdocuments.us/reader033/viewer/2022052822/554e0491b4c90518298b4c01/html5/thumbnails/32.jpg)
Nokia Internal Use Only
• Documentazione ufficiale: http://msdn.microsoft.com/en-us/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-in-windows-phone-8-2/
RISORSE
12/17/2013 © 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
![Page 33: Windows Phone 8 speech: parliamo con la nostra app](https://reader033.vdocuments.us/reader033/viewer/2022052822/554e0491b4c90518298b4c01/html5/thumbnails/33.jpg)
Nokia Internal Use Only
12/17/2013 © 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
Thank you!