Speech API: il telefono parla e ci ascolta
-
Upload
massimo-bonanni -
Category
Documents
-
view
391 -
download
0
description
Transcript of Speech API: il telefono parla e ci ascolta
Massimo Bonanni
http://codetailor.blogspot.com
@massimobonanni
Speech API - il telefono parla e ci ascolta
ASPItalia.com DomusDotNet
Agenda
• WP7.x vs WP8• Text to Speech• Comandi Vocali• Riconoscimento Vocale
WP7.x vs WP8
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!!!
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).
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
Text to Speech
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
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
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
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)
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>
DEMO
Text to Speech
Click to place personal photo
Click to place personal photo
Click to place personal photoDEMO
ASPItalia.com DomusDotNet
Comandi Vocali
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
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
Comandi Vocali – Voice Command Definition FileNome
identificativo del set di comandi
Vocabolo che avvia
l’applicazioneTag che identifica il singolo
comandoEsempio di comando visualizzato dal sistema
nell’helpSintassi 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
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
10/04/202319
Demo, cerca Promessi
Sposi
/MainPage.xa
ml?voiceComm
andName=Sear
chDocument&r
eco=Demo%20c
erca%20prome
ssi
%20sposi&tit
le=pro....
Comandi Vocali – Come funzionano
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
Comandi Vocali - Help dei comandi
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
DEMO
Comandi Vocali
Click to place personal photo
Click to place personal photo
Click to place personal photoDEMO
ASPItalia.com DomusDotNet
Riconoscimento Vocale
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
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.
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.TextElse MessageBox.Show(recoResult.ResultStatus.ToString()) End If
10/04/202328
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»)
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
10/04/202329
Riconoscimento Vocale – Custom Grammar
Il formato SRGS permette di ottenere
grammatiche complesse e custom.
SRGS è standard W3C
http://www.w3.org/TR/speech-
grammar/
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
DEMO
Riconoscimento Vocale
Click to place personal photo
Click to place personal photo
Click to place personal photoDEMO
ASPItalia.com DomusDotNet
Riferimenti
• Speech for Windows Phone 8http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj206958(v=vs.105).aspx
• Speech Samples for Windows Phone 8http://aka.ms/v4m2dl
• Speech Recognition Grammar Specification Version 1.0http://www.w3.org/TR/speech-grammar/
• Speech Synthesis Markup Language (SSML) Version 1.0http://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