SlideShare uma empresa Scribd logo
1 de 31
Massimo Bonanni
massimo.bonanni@domusdotnet.org
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.
Text to Speech
7
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 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 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
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
08/10/201319
Demo, cerca
Promessi Sposi
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 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.Text
Else
MessageBox.Show(recoResult.ResultStatus.ToString())
End If
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
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
DEMO
Riconoscimento Vocale ASPItalia.com DomusDotNet
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

Mais conteúdo relacionado

Destaque

Convcomp2016: Telegram Bot API Overview
Convcomp2016: Telegram Bot API OverviewConvcomp2016: Telegram Bot API Overview
Convcomp2016: Telegram Bot API OverviewConvComp2016
 
Cicl2016 giorgio-robino
Cicl2016 giorgio-robinoCicl2016 giorgio-robino
Cicl2016 giorgio-robinoConvComp2016
 
Convcomp2016: Parla con me: interfacce conversazionali fra Natural Language P...
Convcomp2016: Parla con me: interfacce conversazionali fra Natural Language P...Convcomp2016: Parla con me: interfacce conversazionali fra Natural Language P...
Convcomp2016: Parla con me: interfacce conversazionali fra Natural Language P...ConvComp2016
 
Convcomp2016: Analisi di un dottore artificiale: come ragiona?
Convcomp2016: Analisi di un dottore artificiale: come ragiona?Convcomp2016: Analisi di un dottore artificiale: come ragiona?
Convcomp2016: Analisi di un dottore artificiale: come ragiona?ConvComp2016
 
Convcomp2016: Assi.st chatbots su Facebook e non solo
Convcomp2016: Assi.st chatbots su Facebook e non soloConvcomp2016: Assi.st chatbots su Facebook e non solo
Convcomp2016: Assi.st chatbots su Facebook e non soloConvComp2016
 
Naif - Ruby micro framework to build dumb chat machines
Naif - Ruby micro framework to build dumb chat machinesNaif - Ruby micro framework to build dumb chat machines
Naif - Ruby micro framework to build dumb chat machinesConvComp2016
 
ConvComp2016: Riconoscimento vocale e chatbot: finalmente possiamo parlare co...
ConvComp2016: Riconoscimento vocale e chatbot: finalmente possiamo parlare co...ConvComp2016: Riconoscimento vocale e chatbot: finalmente possiamo parlare co...
ConvComp2016: Riconoscimento vocale e chatbot: finalmente possiamo parlare co...ConvComp2016
 
ConvComp2016: Dieci anni di chatbot commerciali in Italia. L’amore per la parola
ConvComp2016: Dieci anni di chatbot commerciali in Italia. L’amore per la parolaConvComp2016: Dieci anni di chatbot commerciali in Italia. L’amore per la parola
ConvComp2016: Dieci anni di chatbot commerciali in Italia. L’amore per la parolaConvComp2016
 
Convcomp2016: Chat,Bot and Payment Processor: Conversational Commerce
Convcomp2016: Chat,Bot and Payment Processor: Conversational CommerceConvcomp2016: Chat,Bot and Payment Processor: Conversational Commerce
Convcomp2016: Chat,Bot and Payment Processor: Conversational CommerceConvComp2016
 
ConvComp2016: Awhy, customer care automation is now
ConvComp2016: Awhy, customer care automation is nowConvComp2016: Awhy, customer care automation is now
ConvComp2016: Awhy, customer care automation is nowConvComp2016
 
ConvComp2016: Human or Bot: that is the question
ConvComp2016: Human or Bot: that is the questionConvComp2016: Human or Bot: that is the question
ConvComp2016: Human or Bot: that is the questionConvComp2016
 
La drammaturgia dei chatbot
La drammaturgia dei chatbotLa drammaturgia dei chatbot
La drammaturgia dei chatbotConvComp2016
 
Convcomp2016: Verso la “chat intelligente”: la ricerca in Natural Language P...
 Convcomp2016: Verso la “chat intelligente”: la ricerca in Natural Language P... Convcomp2016: Verso la “chat intelligente”: la ricerca in Natural Language P...
Convcomp2016: Verso la “chat intelligente”: la ricerca in Natural Language P...ConvComp2016
 
Lean Startup Metrics & Analytics
Lean Startup Metrics & AnalyticsLean Startup Metrics & Analytics
Lean Startup Metrics & AnalyticsNicola Junior Vitto
 

Destaque (14)

Convcomp2016: Telegram Bot API Overview
Convcomp2016: Telegram Bot API OverviewConvcomp2016: Telegram Bot API Overview
Convcomp2016: Telegram Bot API Overview
 
Cicl2016 giorgio-robino
Cicl2016 giorgio-robinoCicl2016 giorgio-robino
Cicl2016 giorgio-robino
 
Convcomp2016: Parla con me: interfacce conversazionali fra Natural Language P...
Convcomp2016: Parla con me: interfacce conversazionali fra Natural Language P...Convcomp2016: Parla con me: interfacce conversazionali fra Natural Language P...
Convcomp2016: Parla con me: interfacce conversazionali fra Natural Language P...
 
Convcomp2016: Analisi di un dottore artificiale: come ragiona?
Convcomp2016: Analisi di un dottore artificiale: come ragiona?Convcomp2016: Analisi di un dottore artificiale: come ragiona?
Convcomp2016: Analisi di un dottore artificiale: come ragiona?
 
Convcomp2016: Assi.st chatbots su Facebook e non solo
Convcomp2016: Assi.st chatbots su Facebook e non soloConvcomp2016: Assi.st chatbots su Facebook e non solo
Convcomp2016: Assi.st chatbots su Facebook e non solo
 
Naif - Ruby micro framework to build dumb chat machines
Naif - Ruby micro framework to build dumb chat machinesNaif - Ruby micro framework to build dumb chat machines
Naif - Ruby micro framework to build dumb chat machines
 
ConvComp2016: Riconoscimento vocale e chatbot: finalmente possiamo parlare co...
ConvComp2016: Riconoscimento vocale e chatbot: finalmente possiamo parlare co...ConvComp2016: Riconoscimento vocale e chatbot: finalmente possiamo parlare co...
ConvComp2016: Riconoscimento vocale e chatbot: finalmente possiamo parlare co...
 
ConvComp2016: Dieci anni di chatbot commerciali in Italia. L’amore per la parola
ConvComp2016: Dieci anni di chatbot commerciali in Italia. L’amore per la parolaConvComp2016: Dieci anni di chatbot commerciali in Italia. L’amore per la parola
ConvComp2016: Dieci anni di chatbot commerciali in Italia. L’amore per la parola
 
Convcomp2016: Chat,Bot and Payment Processor: Conversational Commerce
Convcomp2016: Chat,Bot and Payment Processor: Conversational CommerceConvcomp2016: Chat,Bot and Payment Processor: Conversational Commerce
Convcomp2016: Chat,Bot and Payment Processor: Conversational Commerce
 
ConvComp2016: Awhy, customer care automation is now
ConvComp2016: Awhy, customer care automation is nowConvComp2016: Awhy, customer care automation is now
ConvComp2016: Awhy, customer care automation is now
 
ConvComp2016: Human or Bot: that is the question
ConvComp2016: Human or Bot: that is the questionConvComp2016: Human or Bot: that is the question
ConvComp2016: Human or Bot: that is the question
 
La drammaturgia dei chatbot
La drammaturgia dei chatbotLa drammaturgia dei chatbot
La drammaturgia dei chatbot
 
Convcomp2016: Verso la “chat intelligente”: la ricerca in Natural Language P...
 Convcomp2016: Verso la “chat intelligente”: la ricerca in Natural Language P... Convcomp2016: Verso la “chat intelligente”: la ricerca in Natural Language P...
Convcomp2016: Verso la “chat intelligente”: la ricerca in Natural Language P...
 
Lean Startup Metrics & Analytics
Lean Startup Metrics & AnalyticsLean Startup Metrics & Analytics
Lean Startup Metrics & Analytics
 

Semelhante a Speech API: il telefono parla e ci ascolta

Universal Store Apps - Mobile day by DotNetCampania
Universal Store Apps - Mobile day by DotNetCampaniaUniversal Store Apps - Mobile day by DotNetCampania
Universal Store Apps - Mobile day by DotNetCampaniaEmanuele Garofalo
 
WinRT 8.1: speech API e NUI in Windows 8.1
WinRT 8.1: speech API e NUI in Windows 8.1WinRT 8.1: speech API e NUI in Windows 8.1
WinRT 8.1: speech API e NUI in Windows 8.1Massimo Bonanni
 
Sviluppo apps multipiattaforma con visual studio e xamarin
Sviluppo apps multipiattaforma con visual studio e xamarinSviluppo apps multipiattaforma con visual studio e xamarin
Sviluppo apps multipiattaforma con visual studio e xamarinFabio Cozzolino
 
Cose un cat_tool
Cose un cat_toolCose un cat_tool
Cose un cat_toolKarenVacca
 
UNIVERSAL APP IN TUTTE LE SALSE: PHONE, TABLET, PC, XBOX E IOT
UNIVERSAL APP IN TUTTE LE SALSE: PHONE, TABLET, PC, XBOX E IOTUNIVERSAL APP IN TUTTE LE SALSE: PHONE, TABLET, PC, XBOX E IOT
UNIVERSAL APP IN TUTTE LE SALSE: PHONE, TABLET, PC, XBOX E IOTDotNetCampus
 
SFRUTTARE CORTANA E LE SPEECH API NELLE NOSTRE APP
SFRUTTARE CORTANA E LE SPEECH API NELLE NOSTRE APPSFRUTTARE CORTANA E LE SPEECH API NELLE NOSTRE APP
SFRUTTARE CORTANA E LE SPEECH API NELLE NOSTRE APPDotNetCampus
 
Sfruttare cortana e le speech api nelle nostre app
Sfruttare cortana e le speech api nelle nostre appSfruttare cortana e le speech api nelle nostre app
Sfruttare cortana e le speech api nelle nostre appDotNetCampus
 
Sfruttare Cortana e le speech API nelle nostre app
Sfruttare Cortana e le speech API nelle nostre appSfruttare Cortana e le speech API nelle nostre app
Sfruttare Cortana e le speech API nelle nostre appMassimo Bonanni
 
La localizzazione del software
La localizzazione del softwareLa localizzazione del software
La localizzazione del softwareLuigi Muzii
 
Come utilizzare il bot framework
Come utilizzare il bot frameworkCome utilizzare il bot framework
Come utilizzare il bot frameworkAlessio Iafrate
 
Alessio Iafrate - Utilizziamo il Bot Framework per realizzare il nostro primo...
Alessio Iafrate - Utilizziamo il Bot Framework per realizzare il nostro primo...Alessio Iafrate - Utilizziamo il Bot Framework per realizzare il nostro primo...
Alessio Iafrate - Utilizziamo il Bot Framework per realizzare il nostro primo...Codemotion
 
L'EVOLUZIONE E LE NOVITÀ DI WINDOWS PHONE 8.1
L'EVOLUZIONE E LE NOVITÀ DI WINDOWS PHONE 8.1L'EVOLUZIONE E LE NOVITÀ DI WINDOWS PHONE 8.1
L'EVOLUZIONE E LE NOVITÀ DI WINDOWS PHONE 8.1codeblock
 
Profilazione di applicazioni PHP con XHProf.
Profilazione di applicazioni PHP con XHProf.Profilazione di applicazioni PHP con XHProf.
Profilazione di applicazioni PHP con XHProf.Filippo Matteo Riggio
 
Da A a Bot con un pizzico di Cognitive
Da A a Bot con un pizzico di CognitiveDa A a Bot con un pizzico di Cognitive
Da A a Bot con un pizzico di CognitiveAlessio Iafrate
 
JAMP DAY 2010 - ROMA (1)
JAMP DAY 2010 - ROMA (1)JAMP DAY 2010 - ROMA (1)
JAMP DAY 2010 - ROMA (1)jampslide
 

Semelhante a Speech API: il telefono parla e ci ascolta (20)

Universal Store Apps - Mobile day by DotNetCampania
Universal Store Apps - Mobile day by DotNetCampaniaUniversal Store Apps - Mobile day by DotNetCampania
Universal Store Apps - Mobile day by DotNetCampania
 
WinRT 8.1: speech API e NUI in Windows 8.1
WinRT 8.1: speech API e NUI in Windows 8.1WinRT 8.1: speech API e NUI in Windows 8.1
WinRT 8.1: speech API e NUI in Windows 8.1
 
Sviluppo apps multipiattaforma con visual studio e xamarin
Sviluppo apps multipiattaforma con visual studio e xamarinSviluppo apps multipiattaforma con visual studio e xamarin
Sviluppo apps multipiattaforma con visual studio e xamarin
 
Cose un cat_tool
Cose un cat_toolCose un cat_tool
Cose un cat_tool
 
UNIVERSAL APP IN TUTTE LE SALSE: PHONE, TABLET, PC, XBOX E IOT
UNIVERSAL APP IN TUTTE LE SALSE: PHONE, TABLET, PC, XBOX E IOTUNIVERSAL APP IN TUTTE LE SALSE: PHONE, TABLET, PC, XBOX E IOT
UNIVERSAL APP IN TUTTE LE SALSE: PHONE, TABLET, PC, XBOX E IOT
 
SFRUTTARE CORTANA E LE SPEECH API NELLE NOSTRE APP
SFRUTTARE CORTANA E LE SPEECH API NELLE NOSTRE APPSFRUTTARE CORTANA E LE SPEECH API NELLE NOSTRE APP
SFRUTTARE CORTANA E LE SPEECH API NELLE NOSTRE APP
 
Sfruttare cortana e le speech api nelle nostre app
Sfruttare cortana e le speech api nelle nostre appSfruttare cortana e le speech api nelle nostre app
Sfruttare cortana e le speech api nelle nostre app
 
Corso Javascript
Corso JavascriptCorso Javascript
Corso Javascript
 
Sfruttare Cortana e le speech API nelle nostre app
Sfruttare Cortana e le speech API nelle nostre appSfruttare Cortana e le speech API nelle nostre app
Sfruttare Cortana e le speech API nelle nostre app
 
La localizzazione del software
La localizzazione del softwareLa localizzazione del software
La localizzazione del software
 
Come utilizzare il bot framework
Come utilizzare il bot frameworkCome utilizzare il bot framework
Come utilizzare il bot framework
 
Alessio Iafrate - Utilizziamo il Bot Framework per realizzare il nostro primo...
Alessio Iafrate - Utilizziamo il Bot Framework per realizzare il nostro primo...Alessio Iafrate - Utilizziamo il Bot Framework per realizzare il nostro primo...
Alessio Iafrate - Utilizziamo il Bot Framework per realizzare il nostro primo...
 
L'EVOLUZIONE E LE NOVITÀ DI WINDOWS PHONE 8.1
L'EVOLUZIONE E LE NOVITÀ DI WINDOWS PHONE 8.1L'EVOLUZIONE E LE NOVITÀ DI WINDOWS PHONE 8.1
L'EVOLUZIONE E LE NOVITÀ DI WINDOWS PHONE 8.1
 
Java introduzione
Java introduzioneJava introduzione
Java introduzione
 
Profilazione di applicazioni PHP con XHProf.
Profilazione di applicazioni PHP con XHProf.Profilazione di applicazioni PHP con XHProf.
Profilazione di applicazioni PHP con XHProf.
 
Da A a Bot con un pizzico di Cognitive
Da A a Bot con un pizzico di CognitiveDa A a Bot con un pizzico di Cognitive
Da A a Bot con un pizzico di Cognitive
 
Linguaggi di programmazione
Linguaggi di programmazioneLinguaggi di programmazione
Linguaggi di programmazione
 
HTML5, il lato client della forza...
HTML5, il lato client della forza... HTML5, il lato client della forza...
HTML5, il lato client della forza...
 
Open xml
Open xmlOpen xml
Open xml
 
JAMP DAY 2010 - ROMA (1)
JAMP DAY 2010 - ROMA (1)JAMP DAY 2010 - ROMA (1)
JAMP DAY 2010 - ROMA (1)
 

Mais de Massimo Bonanni

Empower every Azure Function to achieve more!!
Empower every Azure Function to achieve more!!Empower every Azure Function to achieve more!!
Empower every Azure Function to achieve more!!Massimo Bonanni
 
Durable Functions vs Logic App : la guerra dei workflow!!
Durable Functions vs Logic App : la guerra dei workflow!!Durable Functions vs Logic App : la guerra dei workflow!!
Durable Functions vs Logic App : la guerra dei workflow!!Massimo Bonanni
 
Stateful pattern con Azure Functions
Stateful pattern con Azure FunctionsStateful pattern con Azure Functions
Stateful pattern con Azure FunctionsMassimo Bonanni
 
Architetture Serverless con SQL Server e Azure Functions
Architetture Serverless con SQL Server e Azure FunctionsArchitetture Serverless con SQL Server e Azure Functions
Architetture Serverless con SQL Server e Azure FunctionsMassimo Bonanni
 
Tutto quello che avreste voluto sapere sull'API Management (e non avete mai o...
Tutto quello che avreste voluto sapere sull'API Management (e non avete mai o...Tutto quello che avreste voluto sapere sull'API Management (e non avete mai o...
Tutto quello che avreste voluto sapere sull'API Management (e non avete mai o...Massimo Bonanni
 
Stateful patterns in Azure Functions
Stateful patterns in Azure FunctionsStateful patterns in Azure Functions
Stateful patterns in Azure FunctionsMassimo Bonanni
 
The art of Azure Functions (unit) testing and monitoring
The art of Azure Functions (unit) testing and monitoringThe art of Azure Functions (unit) testing and monitoring
The art of Azure Functions (unit) testing and monitoringMassimo Bonanni
 
Empower every Azure Function to achieve more!!
Empower every Azure Function to achieve more!!Empower every Azure Function to achieve more!!
Empower every Azure Function to achieve more!!Massimo Bonanni
 
The art of Azure Functions (unit) testing and monitoring
The art of Azure Functions (unit) testing and monitoringThe art of Azure Functions (unit) testing and monitoring
The art of Azure Functions (unit) testing and monitoringMassimo Bonanni
 
Everything you always wanted to know about API Management (but were afraid to...
Everything you always wanted to know about API Management (but were afraid to...Everything you always wanted to know about API Management (but were afraid to...
Everything you always wanted to know about API Management (but were afraid to...Massimo Bonanni
 
Workflow as code with Azure Durable Functions
Workflow as code with Azure Durable FunctionsWorkflow as code with Azure Durable Functions
Workflow as code with Azure Durable FunctionsMassimo Bonanni
 
Xmas Serverless Transformation: when the elf doesn’t scale!
Xmas Serverless Transformation: when the elf doesn’t scale!Xmas Serverless Transformation: when the elf doesn’t scale!
Xmas Serverless Transformation: when the elf doesn’t scale!Massimo Bonanni
 
Welcome Azure Functions 2. 0
Welcome Azure Functions 2. 0Welcome Azure Functions 2. 0
Welcome Azure Functions 2. 0Massimo Bonanni
 
Discovering the Service Fabric's actor model
Discovering the Service Fabric's actor modelDiscovering the Service Fabric's actor model
Discovering the Service Fabric's actor modelMassimo Bonanni
 
Testing a Service Fabric solution and live happy!!
Testing a Service Fabric solution and live happy!!Testing a Service Fabric solution and live happy!!
Testing a Service Fabric solution and live happy!!Massimo Bonanni
 
Discovering the Service Fabric's actor model
Discovering the Service Fabric's actor modelDiscovering the Service Fabric's actor model
Discovering the Service Fabric's actor modelMassimo Bonanni
 
Soluzioni IoT con le tecnologie Microsoft
Soluzioni IoT con le tecnologie MicrosoftSoluzioni IoT con le tecnologie Microsoft
Soluzioni IoT con le tecnologie MicrosoftMassimo Bonanni
 
Project Gesture & Real Sense: il potere nelle mani!!
Project Gesture & Real Sense: il potere nelle mani!!Project Gesture & Real Sense: il potere nelle mani!!
Project Gesture & Real Sense: il potere nelle mani!!Massimo Bonanni
 

Mais de Massimo Bonanni (20)

Empower every Azure Function to achieve more!!
Empower every Azure Function to achieve more!!Empower every Azure Function to achieve more!!
Empower every Azure Function to achieve more!!
 
Durable Functions vs Logic App : la guerra dei workflow!!
Durable Functions vs Logic App : la guerra dei workflow!!Durable Functions vs Logic App : la guerra dei workflow!!
Durable Functions vs Logic App : la guerra dei workflow!!
 
Stateful pattern con Azure Functions
Stateful pattern con Azure FunctionsStateful pattern con Azure Functions
Stateful pattern con Azure Functions
 
Architetture Serverless con SQL Server e Azure Functions
Architetture Serverless con SQL Server e Azure FunctionsArchitetture Serverless con SQL Server e Azure Functions
Architetture Serverless con SQL Server e Azure Functions
 
IoT in salsa serverless
IoT in salsa serverlessIoT in salsa serverless
IoT in salsa serverless
 
Tutto quello che avreste voluto sapere sull'API Management (e non avete mai o...
Tutto quello che avreste voluto sapere sull'API Management (e non avete mai o...Tutto quello che avreste voluto sapere sull'API Management (e non avete mai o...
Tutto quello che avreste voluto sapere sull'API Management (e non avete mai o...
 
Stateful patterns in Azure Functions
Stateful patterns in Azure FunctionsStateful patterns in Azure Functions
Stateful patterns in Azure Functions
 
IoT in salsa Serverless
IoT in salsa ServerlessIoT in salsa Serverless
IoT in salsa Serverless
 
The art of Azure Functions (unit) testing and monitoring
The art of Azure Functions (unit) testing and monitoringThe art of Azure Functions (unit) testing and monitoring
The art of Azure Functions (unit) testing and monitoring
 
Empower every Azure Function to achieve more!!
Empower every Azure Function to achieve more!!Empower every Azure Function to achieve more!!
Empower every Azure Function to achieve more!!
 
The art of Azure Functions (unit) testing and monitoring
The art of Azure Functions (unit) testing and monitoringThe art of Azure Functions (unit) testing and monitoring
The art of Azure Functions (unit) testing and monitoring
 
Everything you always wanted to know about API Management (but were afraid to...
Everything you always wanted to know about API Management (but were afraid to...Everything you always wanted to know about API Management (but were afraid to...
Everything you always wanted to know about API Management (but were afraid to...
 
Workflow as code with Azure Durable Functions
Workflow as code with Azure Durable FunctionsWorkflow as code with Azure Durable Functions
Workflow as code with Azure Durable Functions
 
Xmas Serverless Transformation: when the elf doesn’t scale!
Xmas Serverless Transformation: when the elf doesn’t scale!Xmas Serverless Transformation: when the elf doesn’t scale!
Xmas Serverless Transformation: when the elf doesn’t scale!
 
Welcome Azure Functions 2. 0
Welcome Azure Functions 2. 0Welcome Azure Functions 2. 0
Welcome Azure Functions 2. 0
 
Discovering the Service Fabric's actor model
Discovering the Service Fabric's actor modelDiscovering the Service Fabric's actor model
Discovering the Service Fabric's actor model
 
Testing a Service Fabric solution and live happy!!
Testing a Service Fabric solution and live happy!!Testing a Service Fabric solution and live happy!!
Testing a Service Fabric solution and live happy!!
 
Discovering the Service Fabric's actor model
Discovering the Service Fabric's actor modelDiscovering the Service Fabric's actor model
Discovering the Service Fabric's actor model
 
Soluzioni IoT con le tecnologie Microsoft
Soluzioni IoT con le tecnologie MicrosoftSoluzioni IoT con le tecnologie Microsoft
Soluzioni IoT con le tecnologie Microsoft
 
Project Gesture & Real Sense: il potere nelle mani!!
Project Gesture & Real Sense: il potere nelle mani!!Project Gesture & Real Sense: il potere nelle mani!!
Project Gesture & Real Sense: il potere nelle mani!!
 

Speech API: il telefono parla e ci ascolta

  • 2. Agenda • WP7.x vs WP8 • Text to Speech • Comandi Vocali • Riconoscimento Vocale
  • 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. 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. 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.
  • 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. 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. 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. 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. 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. DEMO Text to Speech ASPItalia.com DomusDotNet
  • 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. 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. 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. 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
  • 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. Comandi Vocali - Help dei comandi
  • 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
  • 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. 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. 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. 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. 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
  • 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