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