Windows phone 8 - Speech API

513 views

Published on

Sessione "Windows Phone 8 - Speech API" tenuta durante l'evento Community Days 2013 Catania.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

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

No notes for slide
  • Inserite l’eventuale vostro logo in basso a destra
  • Slide da mostrare prima di iniziare la sessione – non rimuovere!
  • Ultima slide, obbligatoria
  • Windows phone 8 - Speech API

    1. 1. Grazie aSponsor
    2. 2. • WP7.x vs WP8• Comandi Vocali• Text to Speech• Riconoscimento Vocale• Conclusioniagenda
    3. 3. • 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 deldevice;• WP7.x permette all’utente di scrivere SMS dettandoli.….ma tutte queste funzionalità non sono accessibili allosviluppatore!!!WP7.x vs WP8
    4. 4. • Windows Phone 8 permette allo sviluppatore di utilizzare completamente ilsupporto legato all’utilizzo della voce;• Le nostre applicazioni possono essere avviate utilizzando comandi anchecomplessi (Voice Command);• Le nostre applicazioni possono «parlare» utilizzando le funzionalità di SpeechSynthesis (Text To Speech);• Le applicazioni sono in grado di comprendere ciò che l’utente pronuncia(Speech Recognition).WP7.x vs WP8
    5. 5. Le funzionalità di Speech Recognition possonoutilizzare una connessione internet:non date all’utente solo il riconoscimento vocaleper eseguire un’operazione.Le funzionalità di Speech Synthesis (Text to Speech) edei comandi vocali (Voice Command) nonnecessitano di una connessione ad internet.WP7.x vs WP8
    6. 6. • Possiamo utilizzare la voce per avviare le nostre applicazioni.• Per l’utilizzo dei Comandi Vocali non è necessaria unaconnessione ad internet.• Le classi che permettono la gestione dei comandi vocali sononel namespace Windows.Phone.Speech.VoiceCommands.• Sono necessarie le seguenti capability:– ID_CAP_MICROPHONE– ID_CAP_NETWORKING– ID_CAP_SPEECH_RECOGNITIONComandi Vocali
    7. 7. • E’ un file XML che contiene leinformazioni relative ai comandi vocalisupportati dalla nostra applicazione.• Deve essere «installato» almeno unavolta prima di poter essere disponibilenel sistema.• Ogni applicazione ha, al massimo, unsolo VCD.• Può contenere comandi localizzatiVoice Command Definition File
    8. 8. <VoiceCommands xmlns="http://schemas.microsoft.com/voicecommands/1.0"><CommandSet xml:lang="it-IT" Name="DemoIta"><CommandPrefix>Demo</CommandPrefix><Example>Apri nuovo documento.</Example><Command Name="OpenDocument"><Example> apri documento 1</Example><ListenFor> apri documento [numero] {number}</ListenFor><Feedback> Sto aprendo il documento numero {number}... </Feedback><Navigate /></Command>...<PhraseList Label="number"><Item> 1 </Item><Item> 2 </Item><Item> 3 </Item></PhraseList></CommandSet></VoiceCommands>Voice Command Definition FileNome identificativo del set di comandiVocabolo che avvia l’applicazioneTag che identifica il singolo comandoEsempio di comando visualizzato dal sistema nell’helpSintassi del comando: possono esserci vocaboli nonobbligatori e placeholder che possono essere sostituiti daliste di valoriFeedback visivo (e vocale) che il sistema restituisceall’utente quando il comando viene correttamenteinterpretatoPagina dell’applicazione che deve essere aperta dalsistemaElenco di valori (Phrase List) utilizzabili cone«variabili» nei comandi
    9. 9. La classe VoiceCommandService ci consente di installare un VCD:Installare un VCDTryDim vcdUri = New System.Uri("ms-appx:///VoiceCommandDefinition.xml",UriKind.Absolute)Await VoiceCommandService.InstallCommandSetsFromFileAsync(vcdUri)MessageBox.Show("VCD Installato correttamente!")Catch ex As ExceptionMessageBox.Show("Errore: " & ex.Message)End Try
    10. 10. Come funzionanoDemo, cercaPromessi Sposi
    11. 11. Nel momento in cui avviamo la nostra applicazione utilizzando uncomando vocale, i parametri riconosciuti dal sistema e definiti nel VCDvengono restituiti nella query string del NavigationContext.Comandi Vocali e QueryStringPrivate Sub MainPage_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.LoadedIf NavigationContext.QueryString.ContainsKey("voiceCommandName") ThenDim voiceCommand = NavigationContext.QueryString("voiceCommandName")Select Case voiceCommandCase ”OpenDocument” Apri il documentDim docNumber = NavigationContext.QueryString("number")Case ”SearchDocument” Ricerca documentDim docTitle = NavigationContext.QueryString("title")End SelectEnd IfEnd Sub
    12. 12. Comandi Vocali - Help dei comandiIl file dei comandi viene utilizzatoanche per l’help visuale da mostrareall’utente:
    13. 13. • 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 completamenteriscritta).Comandi Vocali - Phrase listDim voiceCommandSet = VoiceCommandService.InstalledCommandSets("DemoIta")If voiceCommandSet IsNot Nothing ThenAwait voiceCommandSet.UpdatePhraseListAsync("title",{"promessi sposi", "divina commedia", "guerra e pace"})End If
    14. 14. DEMOComandi Vocali
    15. 15. Per utilizzare il Text To Speech l’applicazione deve averela capability ID_CAP_SPEECH_RECOGNITION abilitatanel manifest.Le classi utili per il Text To Speech sono nel namespaceWindows.Phone.Speech.SynthesisText to Speech
    16. 16. La classe SpeechSynthesizer fornisce funzionalità di base per ilTTS:Il metodo SpeakTextAsync «legge» il contenuto di una stringa inmaniera asincrona (richiede il modificatore Async nel chiamante);Il TTS funziona anche se non c’è connettività.Text to Speech – facile facilePublic Async Sub Speak()Dim synth = New SpeechSynthesizer()Await synth.SpeakTextAsync("Ciao a tutti!")End Sub
    17. 17. La classe InstalledVoices mette a disposizione l’elenco delle vociinstallate nel dispositivo.La classe VoiceInformation contiene informazioni riguardo laspecifica voce come lingua, genere (maschile o femminile), nomevisualizzato e descrizione estesa.Text to Speech – le vociPublic Sub SetItalianVoice()Dim synth = New SpeechSynthesizer()Dim italianVoices = From v In InstalledVoices.AllWhere v.Language = "it-IT"Select vsynth.SetVoice(italianVoices.First)End Sub
    18. 18. Il Synthesizer è in grado di utilizzare anche file XML secondo lostandard Speech Synthesis Markup Language (SSML)Text to Speech - Speech Synthesis Markup LanguageDim synth = New SpeechSynthesizer()Dim ssmlUri = New Uri("ms-appx:///SSML.xml", UriKind.RelativeOrAbsolute)Await synth.SpeakSsmlFromUriAsync(ssmlUri)
    19. 19. SSML è standard W3C (http://www.w3.org/TR/speech-synthesis/)Text to Speech - Speech Synthesis Markup Language<!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/synthesisxmlns:xsi=http://www.w3.org/2001/XMLSchema-instancexsi:schemaLocation="http://www.w3.org/2001/10/synthesishttp://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>
    20. 20. DEMOText to Speech
    21. 21. • 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 potrebbe essere necessaria una connessione ad internet.• Le classi per il riconoscimento vocale sono nel namespaceWindows.Phone.Speech.Recognition• Per utilizzare le funzionalità di riconoscimento vocale sono necessarie le seguenti capability:– ID_CAP_MICROPHONE– ID_CAP_NETWORKING– ID_CAP_SPEECH_RECOGNITIONRiconoscimento Vocale
    22. 22. Una grammatica definisce le parole e le frasi che un motore diriconoscimento vocale è in grado di comprendere.In WP8 abbiamo tre tipologie di grammatiche :– Grammatiche predefinite: sono due, una pensata per le ricerche web e l’altraper le piccole frasi (tipicamente gli SMS);– Lista di vocaboli: è una grammatica custom, molto leggera, composta da unalista di vocaboli (o brevissime frasi). Adatta alla selezione di opzioni;– Grammatica XML: basata sullo standard SRGS (Speech Recognition GrammarSpecification) versione 1.0. Permette di avere anche grammatiche complesse.Riconoscimento Vocale - Grammatiche
    23. 23. La modalità più semplice per implementare delle funzionalità diriconoscimento vocale è l’utilizzo della classe SpeechRecognizerUI.La SpeechRecognizerUI apre l’interfaccia checomunica all’utente che il sistema è in ascolto.Se non vogliamo la UI possiamo utilizzare la classeSpeechRecognizerRiconoscimento Vocale – facile facileDim _RecoUI = New SpeechRecognizerUIDim recoResult = Await _RecoUI.RecognizeWithUIAsync()If recoResult.ResultStatus = SpeechRecognitionUIStatus.Succeeded ThenMe.txtRecognized.Text = recoResult.RecognitionResult.TextElseMessageBox.Show(recoResult.ResultStatus.ToString())End If
    24. 24. Se vogliamo limitare le parole che il motore di riconoscimento vocale è in gradodi riconoscere possiamo utilizzare una lista di vocaboli come grammatica.La collezione Grammars della classe SpeechRecognizer permette di aggiungerepermette di gestire la grammatica.Possiamo aggiungere quante liste vogliamo identificandole con una chiave(nell’esempio «phraseList», detta anche «Rule»).Usando le phrase list non si ha la necessità della connessione internet.Phrase List GrammarPrivate Async Function InitializeSpeechRecognizer() As task Istanzio loggetto da utilizzare per il riconoscimentorecognizer = New SpeechRecognizer Imposto il file di grammatica ed eseguo il preloadingrecognizer.Grammars.AddGrammarFromList("phraseList",{"topolino", "minni", "paperino", "pluto", "paperina", "pippo"})Await recognizer.PreloadGrammarsAsync()End Function
    25. 25. Il formato SRGS permette di ottenere grammatiche complesse e custom.Se utilizziamo l’SRGS non abbiamo bisognodella connessione ad internet.SRGS è standard W3Chttp://www.w3.org/TR/speech-grammar/Custom GrammarPrivate Async Function InitializeSpeechRecognizer() As task Istanzio loggetto da utilizzare per il riconoscimentorecognizerUI = New SpeechRecognizerUI Imposto alcune proprietà di interfacciarecognizerUI.Settings.ListenText = "Dimmi quali album o artisti vuoi trovare“recognizerUI.Settings.ExampleText = "Trova artisti nella categoria rock“ Creo lURI relativo al file di grammaticalDim grammarFileUri = New Uri("ms-appx:///SRGSGrammar.xml") Imposto il file di grammatica ed eseguo il preloadingrecognizerUI.Recognizer.Grammars.AddGrammarFromUri("myGrammar", grammarFileUri)Await recognizerUI.Recognizer.PreloadGrammarsAsync()End Function
    26. 26. DEMORiconoscimento Vocale
    27. 27. Utilizzare la voce permette di fornire una user experience migliorerispetto alla sola interazione touch ma…..– Usate comandi semplici e “naturali”;– Implementate sempre la controparte touch (non solo voce);– Scegliete un numero di comandi congrui (non ne prevedete troppi);– Mantenete le frasi corte per evitare “falsi positivi”;– Date un feedback all’utente e la possibilità di annullare un commando;– Localizzate l’utilizzo della voce in tutte le lingue previstedall’applicazione;– Permettete all’utente di selezionare la voce che più preferisce;– Gli scenari vocali debbono essere interamente vocali (no mix con touch).Conclusioni
    28. 28. Q&ATutto il nateriale di questa sessione suhttp://www.communitydays.it/#CDays13CT

    ×