Speech API: il telefono parla e ci ascolta

374 views

Published on

Sessione "Speech API: il telefono parla e ci ascolta" tenuta durante l'evento "WP r8me" (http://www.domusdotnet.org/eventi/wp-r8me.aspx) il 18/01/2013

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
374
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Speech API: il telefono parla e ci ascolta

  1. 1. Massimo Bonanni massimo.bonanni@domusdotnet.org http://codetailor.blogspot.com @massimobonanni Speech API - il telefono parla e ci ascolta ASPItalia.com DomusDotNet
  2. 2. Agenda • WP7.x vs WP8 • Text to Speech • Comandi Vocali • Riconoscimento Vocale
  3. 3. WP7.x vs WP8
  4. 4. WP7.x vs WP8 • 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!!!
  5. 5. WP7.x vs WP8 Windows Phone 8 permette allo sviluppatore di utilizzare completamente il supporto legato all’utilizzo della voce: • Le nostre applicazioni possono «parlare» utilizzando le funzionalità di Speech Synthesis (Text To Speech); • Le nostre applicazioni possono essere avviate utilizzando comandi anche complessi (Voice Command); • Le applicazioni sono in grado di comprendere ciò che l’utente pronuncia (Speech Recognition).
  6. 6. WP7.x vs WP8 Le funzionalità di Speech Recognition necessitano di una connessione ad internet per funzionare • ergo 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.
  7. 7. Text to Speech 7
  8. 8. Text to Speech 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
  9. 9. Text to Speech – facile facile • 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à. Public Async Sub Speak() Dim synth = New SpeechSynthesizer() Await synth.SpeakTextAsync("Ciao a tutti!") End Sub
  10. 10. Text to Speech – le voci 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. 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
  11. 11. Text to Speech - Speech Synthesis Markup Language Il Synthesizer è in grado di utilizzare anche file XML secondo lo standard SSML. Dim ssmlUri = New Uri("ms-appx:///SSML.xml", UriKind.RelativeOrAbsolute) Await _synth.SpeakSsmlFromUriAsync(ssmlUri)
  12. 12. Text to Speech - Speech Synthesis Markup Language SSML è uno standard W3C (http://www.w3.org/TR/speech- synthesis/) <!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>
  13. 13. DEMO Text to Speech ASPItalia.com DomusDotNet
  14. 14. Comandi Vocali
  15. 15. Comandi Vocali • 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
  16. 16. Comandi Vocali – Voice Command Definition File 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
  17. 17. Comandi Vocali – Voice Command Definition File Nome 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
  18. 18. Comandi Vocali - Installare un VCD La classe VoiceCommandService ci consente di 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
  19. 19. 08/10/201319 Demo, cerca Promessi Sposi Comandi Vocali – Come funzionano
  20. 20. Comandi Vocali e QueryString 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. 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
  21. 21. Comandi Vocali - Help dei comandi
  22. 22. Comandi Vocali - Phrase list • 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). Dim voiceCommandSet = VoiceCommandService.InstalledCommandSets("DemoIta") If voiceCommandSet IsNot Nothing Then Await voiceCommandSet.UpdatePhraseListAsync("title", {"promessi sposi", "divina commedia", "guerra e pace"}) End If
  23. 23. DEMO Comandi Vocali ASPItalia.com DomusDotNet
  24. 24. Riconoscimento Vocale
  25. 25. Riconoscimento Vocale • 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 è 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
  26. 26. Riconoscimento Vocale - Grammatiche • 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.
  27. 27. Riconoscimento Vocale – facile facile La modalità più semplice per implementare delle funzionalità di riconoscimento vocale è l’utilizzo della classe SpeechRecognizerUI. La SpeechRecognizerUI apre l’interfaccia che comunica all’utente che il sistema è in ascolto. Se non vogliamo la UI possiamo utilizzare la classe SpeechRecognizer Dim _RecoUI = New SpeechRecognizerUI Dim recoResult = Await _RecoUI.RecognizeWithUIAsync() If recoResult.ResultStatus = SpeechRecognitionUIStatus.Succeeded Then Me.txtRecognized.Text = recoResult.RecognitionResult.Text Else MessageBox.Show(recoResult.ResultStatus.ToString()) End If
  28. 28. Riconoscimento Vocale – Phrase List Grammar 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») 08/10/201328 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
  29. 29. Riconoscimento Vocale – Custom Grammar Il formato SRGS permette di ottenere grammatiche complesse e custom. SRGS è standard W3C http://www.w3.org/TR/speech-grammar/ 08/10/201329 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
  30. 30. DEMO Riconoscimento Vocale ASPItalia.com DomusDotNet
  31. 31. Riferimenti • Speech for Windows Phone 8 http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj206958(v=vs.105).aspx • Speech Samples for Windows Phone 8 http://aka.ms/v4m2dl • Speech Recognition Grammar Specification Version 1.0 http://www.w3.org/TR/speech-grammar/ • Speech Synthesis Markup Language (SSML) Version 1.0 http://www.w3.org/TR/speech-synthesis/ • Channel9 - Speech Input in Windows Phone 8 (Jump Start) http://channel9.msdn.com/Series/MVA-Jump-Start/Building-Apps-for-Windows-Phone-8-Jump-Start-13- Speech-Input-in-Windows-Phone-8

×