Windows Phone 8 speech: parliamo con la nostra app
-
Upload
microsoft-mobile-developer -
Category
Technology
-
view
961 -
download
0
description
Transcript of Windows Phone 8 speech: parliamo con la nostra app
WINDOWS PHONE 8 SPEECH: PARLIAMO CON LA NOSTRA APP Michele Locuratolo
Nokia Developer Champion
Microsoft MVP
AGENDA
Nuove funzionalità riconoscimento vocale
Uso dei comandi vocali
Riconoscimento vocale e sintesi nelle app
_1
_2
_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. 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
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) Nome leggibile con cui aprire
l’app
Esempio da mostrare nella
UI Comando
Pagina di destinazione
Lingua
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
Nokia Internal Use Only
DEMO
IN APP DIALOG
• Sintesi vocale (Text to Speech)
• Riconoscimento vocale
• Buit-In UI per feedback
• «grammatiche» predefinite e custom
Nokia Internal Use Only
DEMO TTS
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
Nokia Internal Use Only
DEMO SSML
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()
Nokia Internal Use Only
DEMO SPEECH RECOGNITION
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
Nokia Internal Use Only
DEMO IN-APP DIALOG
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
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.
Nokia Internal Use Only
12/17/2013 © 2012 Nokia. All rights reserved. © 2012 Microsoft. All rights reserved.
Thank you!