37
Template designed by Massimo Bonanni [email protected] http://codetailor.blogspot.com @massimobonanni Sfruttare Cortana e le Speech API nelle nostre app

Sfruttare Cortana e le speech API nelle nostre app

Embed Size (px)

Citation preview

Page 1: Sfruttare Cortana e le speech API nelle nostre app

Template designed by

Massimo [email protected]://codetailor.blogspot.com@massimobonanni

Sfruttare Cortana e le Speech API nelle nostre app

Page 2: Sfruttare Cortana e le speech API nelle nostre app

MASSIMO BONANNISoftware architect e trainer @ eXagile (Roma)

Microsoft MVP dal 2011

Intel Software Innovator dal 2014

Fondatore di DomusDotNet (www.domusdotnet.org) e dotNet{podcast} (www.dotnetpodcast.com)

Chi sono

Page 3: Sfruttare Cortana e le speech API nelle nostre app

Introduzione

Foreground App Activation

Speech recognition

Background App Activation

Conclusioni

Agenda

Page 4: Sfruttare Cortana e le speech API nelle nostre app

Differenziare la propria app con i comandi vocali

Permettere un’interazione utente più naturale

Aumentare il coinvolgimento dell’utente

Aumentare la produttività

Perchè Cortana

Page 5: Sfruttare Cortana e le speech API nelle nostre app

Le Windows Universal App possono registrare dei comandi vocali che Cortana è in grado di interpretare.

Cortana esegue l’applicazione nel momento in cui riconosce un commando vocale valido.

Disponibile sia per le applicazioni XAML, Javascript e Hosted web App.

Foreground App Voice Command

Page 6: Sfruttare Cortana e le speech API nelle nostre app

Foreground Voice Command - Architettura

2

Windows SpeechPlatform

Call

Text

Remind

Email

ShowListByName

3 6

4

5

XApplication

Voice Command Definition

7

1

Microsoft SpeechRecognition Service

Shopping List, show list for Market

Page 7: Sfruttare Cortana e le speech API nelle nostre app

Creare un Voice Command Definition (VCD) file

Foreground Voice Command

Registrare il VCD all’avvio dell’applicazione

Gestire l’attivazione dell’applicazione nel caso di Voice Command

Page 8: Sfruttare Cortana e le speech API nelle nostre app

Determinare quale operazione eseguire e cosa l’utente deve dire:

• Avvia una chat con {nomeContatto}

• Invia un messaggio a {nomeContatto}

Definire la risposta che Cortana fornisce all’utente nel momento in cui sta avviando l’applicazione:

• Avvio della chat con {nomeContatto}

Fornire un esempio di cosa l’utente può pronunciare da visualizzare nel “What can I do?”:

• Avvia una chat con Mario Rossi

Scopo del Voice Command Definition

Page 9: Sfruttare Cortana e le speech API nelle nostre app

L’utente deve pronunciare il nome dell’app come parte del comando:

• Viber, avvia una chat con Mario Rossi

• Facebook, cosa succede a Giuseppe Verdi?

• Lista Spesa, visualizza la lista del Supermercato

Per default viene utilizzato il nome dell’app (display name).

E’ opportuno fornire dei termini alternativi quando il nome dell’app è troppop lungo o di difficile pronuncia.

Voice Command & App Name

Page 10: Sfruttare Cortana e le speech API nelle nostre app

Specificare esplicitamente il nome dell'applicazione nel posto in cui «suona» più naturale:

• Avvia una chat con Mario Rossi con Viber

• Cosa accade a Giuseppe Verdi su Facebook?

• Visualizza la mia Lista Spesa del supermercato

Aumentare l'accuratezza del riconoscimento fornendo una frase più ricca:

NO: Dammi Mario Rossi su Viber

SI: Avvia una chat con Mario Rossi su Viber

Evitare di utilizzare un commando riservato, come Chiama, Apri, Cerca, etc.. Se necessario, utilizzare il nome dell’app come prefisso:

Viber, chiama Mario Rossi

Linee guida per Voice Commands

Page 11: Sfruttare Cortana e le speech API nelle nostre app

Registrazione del Voice Command

• Registrare il file di Voice Command allo startup dell'applicazione

• Utilizzare VoiceCommandDefinitionManager per registrare il file

• Aggiornare il VCD con i dati dell'applicazione (ad esempio le PhraseList)

var commandFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///ShoppingListCommands.xml"));await VoiceCommandDefinitionManager.InstallCommandDefinitionsFromStorageFileAsync(commandFile);

VoiceCommandDefinition commandSetEnUs;

if (VoiceCommandDefinitionManager.InstalledCommandDefinitions.TryGetValue("ShoppingListCommandSet_en-us", out commandSetEnUs)) await commandSetEnUs.SetPhraseListAsync("listName", listNames);

Page 12: Sfruttare Cortana e le speech API nelle nostre app

Gestione dell’attivazione per Voice Command

• Eseguire l'override di App.OnActivated.

• Controllare che l'attivazione avvenga per ActivationKind.VoiceCommand.

• Utilizzare VoiceCommandActivatedEventArgs.Result per capire quale comando è stato effettivamente richiesto dall'utente.

• Navigare verso la pagina corrispondente.

Page 13: Sfruttare Cortana e le speech API nelle nostre app

Hi, Cortana

show me the code!

Foreground

Commands

Page 14: Sfruttare Cortana e le speech API nelle nostre app

Controllare se l’interazione viene eseguita tramite voce o in maniera convenzionale (mouse, touch, tastiera, …).

Se l’utente inizia l’interazione con la voce, continuare l’interazione in tale maniera.

Le API per lo speech synthesis sono contenute nel namespace Windows.Media.SpeechSynthesis.

Le API per lo speech recognition sono contenute nel namespace Windows.Media.SpeechRecognition.

Speech Recognition

Page 15: Sfruttare Cortana e le speech API nelle nostre app

Utilizzare SpeechRecognizer.RecognizeWithUIAsync per eseguire lo speech recognition mostrando all’utente l’interfaccia di sistema

Utilizzare SpeechRecognizer.RecognizeAsync per eseguire lo speech recognition in maniera silente (senza interfaccia grafica)

Grammatiche predefinite: Dictation, Web Search, Form Filling

Grammatiche Custom: elenco di stringhe o file SRGS

Speech Recognition

Page 16: Sfruttare Cortana e le speech API nelle nostre app

SpeechRecognizer.ContinuousRecognitionSession permette un ascolto continuo da parte dell’app.

Può essere utilizzato con la grammatica Dictation negli scenari in cui l’utente ha la necessità di parlare per lungo tempo.

Può essere utilizzato con una grammatica custom per gli scenari in cui debbono essere interpretati comandi con continuità.

Speech Recognition

Page 17: Sfruttare Cortana e le speech API nelle nostre app

Hi, Cortana

show me the code!

Speech Recognition

Page 18: Sfruttare Cortana e le speech API nelle nostre app

Le Universal App hanno la capacità di registrare voice commands che possono essere eseguiti in un AppService.

L’AppService è un background task che prende in carico i comandi vocali riconosciuti da Cortana.

Deve essere utilizzato il pannello di Cortana e lo speech synthesis per comunicare con l’utente.

Disponibile per applicazioni XAML e Javascript.

Background Voice Command

Page 19: Sfruttare Cortana e le speech API nelle nostre app

Background Voice Commands Architecture

2

Windows SpeechPlatform

36

4

5

Isolated Storage

Voice CommandApp Service

(Background Task)

Render XAML

7

Web Service

Microsoft SpeechRecognition Service

Shopping List, show my lists

VCD

Your App

8

Go to Vocal Shopping List

Here are your lists

A

ButcherJuly 15th

MarketMay 29th

9

1

Page 20: Sfruttare Cortana e le speech API nelle nostre app

Background Voice Command

Creare un Voice Command Definition (VCD)

Registrare il file VCD all’avvio dell’app

Gestire i comandi vocali all’interno dell’AppService interagendo con il pannello di Cortana

Page 21: Sfruttare Cortana e le speech API nelle nostre app

<Extensions>

<uap:Extension Category="windows.appService"

EntryPoint="ShoppingList.App.ShoppingListAppService">

<uap:AppService Name="ShoppingListAppService"/>

</uap:Extension>

</Extensions>  

Creare l’AppService

La classe che implementa l'AppService deve implementare IBackgroundTask (in una Windows Runtime Library)

Registrare l'AppService nel manifest

public async void Run(IBackgroundTaskInstance taskInstance)

Page 22: Sfruttare Cortana e le speech API nelle nostre app

Rappresenta la connessione tra l’AppService e Cortana.

Usata per recuperare i voice command compresi da Cortana e comunicare i messaggi da visualizzare nel pannello e “annunciati” da Cortana.

Si tratta di una classe Universal.

VoiceCommandServiceConnection

Page 23: Sfruttare Cortana e le speech API nelle nostre app

Sono state introdotte funzionalità che consentono all’utente di eseguire e completare task tramite Cortana:• API per gestire il workflow con l’utente;

• Template per la UI del pannello di Cortana;

• Modello di interazione con l’utente utilizzando voce/tastiera/mouse/touch

Interazione con la UI di Cortana

Content Area

App GUI Text

App Icon

Link all’applicazione (con parametri)

Text-To-Speech (TTS)

Content Tile

Here are your lists

May 14th 2015Market

May 28th 2015Butcher

Go to Vocal Shopping List

June 24th 2015Drugstore

Which one do you wanna

show?

A

Page 24: Sfruttare Cortana e le speech API nelle nostre app

VoiceCommandResponse

Here are your lists

May 14th 2015Market

May 28th 2015Butcher

Go to Vocal Shopping List

June 24th 2015Drugstore

Which one do you wanna

show?

A

Page 25: Sfruttare Cortana e le speech API nelle nostre app

Here are your lists

May 14th 2015Market

May 28th 2015Butcher

Go to Vocal Shopping List

June 24th 2015Drugstore

Which one do you wanna

show?

A

VoiceCommandResponse

Page 26: Sfruttare Cortana e le speech API nelle nostre app

VoiceCommandContentTile

Which one do you want to display?

Title NameText Line OneText Line TwoText Line Three

A

Page 27: Sfruttare Cortana e le speech API nelle nostre app

VoiceCommandContentTileType

Listening…

Listening…

TitleOnly

Title Name One

Title Name Two

Title Name Three

Title Name Four

TitleWithText

Title Name OneLong text lorem ipsum dolor sit amet, Consec tetuer amias Sed do eiusmod

Title Name TwoLong text lorem ipsum dolor sit amet, Consec tetuer amias Sed do eiusmod

TitleWith68x92IconAndText

Title Name One

Long text two lines lorem ipsum consec tetuer amias

Title Name Two

Long text two lines lorem ipsum consec tetuer amias

TitleWith280x140IconAndText

Title Name OneOne line text

Long text two lines lorem ipsum consec tetuer amias odoran

TitleWith68x68IconAndText

Title Name One

Long text lorem ipsum

Title Name Two

Long text lorem ipsum

Title Name Three

Long text lorem ipsum

Page 28: Sfruttare Cortana e le speech API nelle nostre app

Hi, Cortana

show me the code!

Background

Commands

Page 29: Sfruttare Cortana e le speech API nelle nostre app

Which one do you want to remove?

Listening…

Risoluzione delle ambiguità

Market(The first one)(On May 14th)

A

Remove this list?

Listening…

Yes No

Conferma

Yes

A

Cancelling this List…

Cancel

Go to Vocal Shopping List

Stato di avanzamento

A

Cancelled this list.

Go to Voice Shopping List

Completamento

A

Which list do you wanna delete? Market or Butcher.

Do you wanna remove ‘Market’?

Removing list… I’ve cancelled it. [success-earcon]

Remove list

May 14th 2015Market

May 28th 2015Butcher

May 14th 2015Market

May 14th 2015Market

May 14th 2015Market

Task workflow

Page 30: Sfruttare Cortana e le speech API nelle nostre app

Market

The first one

The one on May 14th

Possiamo richiamare il metodo RequestDisambiguationAsync() di VoiceCommandServiceConnection per richiedere all’utente di “risolvere” l’ambiguità

L’utente può selezionare un’opzione utilizzando la voce o mouse e tastiera.

Cortana cerca di riconoscere automaticamente le parole (o le espressioni) che identificano automaticamente una tile.

Il metodo RequestDisambiguationAsync() termina solo quando l’utente ha eseguito la selezione.

Which one do you want to remove?

Listening…

A

Which list do you wanna delete?

Market or Butcher.

May 14th 2015Market

May 28th 2015Butcher

Ambiguità

Page 31: Sfruttare Cortana e le speech API nelle nostre app

Yes

No

La conferma è sempre opportuna in quelle operazioni distruttive.

Utilizzare il metodo RequestConfirmationAsync() per richiedere conferma all’utente tramite Cortana.

Anche in questo caso il metodo ritorna solo quando l’utente ha effettivamente selezionato la risposta

Remove this list?

Listening…

Yes No

A

Do you wanna remove ‘Market’?

May 14th 2015Market

Conferma

Page 32: Sfruttare Cortana e le speech API nelle nostre app

L’utilizzo del Text To Speech è opzionale.

Possono essere inviati più stati di avanzamento.

Inviare sempre dei messaggi di avanzamento per le operazioni di lunga durata.Se non vengono inviati messaggi di avanzamento per più di 5 secondi, Cortana interrompe l’operazione.

Lo stato di avanzamento si invia con il metodo ReportProgressAsync().

Cancelling this List…

Cancel

Go to Vocal Shopping List

A

Removing list…

May 14th 2015Market

Stato di Avanzamento

Page 33: Sfruttare Cortana e le speech API nelle nostre app

Listening…

Working on that…

Cancel

I’ll get Vocal Shopping LIst on that.

Vocal Shopping ListLooking for list for Market

Cancel

Search “Cancel my list for Market”

Looking for your list for Market…

A

AGo to Vocal Shopping List

Viene visualizzato automaticamente se la risposta dell’AppService supera i 500ms

La stringa di feedback viene recuperata dal VCD.

May 14th 2015Market

Viene mostrato automaticamente dopo il ritorno dei metodi RequestConfirmation o RequestDisambiguation se l’app non risponde rapidamente (500ms)

Il contenuto è recuperato dalla response del precedente Confirmation/Disambiguation

Cortana Progress Screens

Page 34: Sfruttare Cortana e le speech API nelle nostre app

• Per operazioni che richiedono interazioni complesse

• Per operazioni che richiedono l’attenzione dell’utente per un lungo periodo

Foreground vs Background

• Per operazioni semplici che non richiedono input addizionali oltre la risoluzione dell’ambiguità o la conferma

• Per operazioni rapide

• Per avviare attività remote

• Si può utilizzare il metodo RequestAppLaunchAsync per lanciare l’app e completare l’operazione

Foreground Background

Page 35: Sfruttare Cortana e le speech API nelle nostre app

Launch a foreground app with voice commands in Cortana (XAML)http://bit.ly/CortanaForeground

Launch a background app with voice commands in Cortana (XAML)http://bit.ly/CortanaBackground

Cortana design guidelineshttp://bit.ly/CortanaDesignGuide

Speech design guidelineshttp://bit.ly/SpeechDesignGuide

//build 2015 : Cortana and Speech Platform In Depthhttp://channel9.msdn.com/Events/Build/2015/3-716

//build 2015: Cortana Extensibility in Universal Windows Appshttp://channel9.msdn.com/Events/Build/2015/2-691

Reference

Page 36: Sfruttare Cortana e le speech API nelle nostre app
Page 37: Sfruttare Cortana e le speech API nelle nostre app

Grazie a tutti per la partecipazione

Riceverete il link per il download a slide e demo via email nei prossimi giorni

Per contattarmi

[email protected]

Grazie