Share via


Usare il parlato per invocare gli elementi dell'interfaccia utente

Voice Enabled Shell (VES) è un'estensione della Windows Speech Platform che consente un'esperienza vocale di prim'ordine all'interno delle app, permettendo agli utenti di utilizzare la voce per invocare i controlli sullo schermo e per inserire testo tramite dettatura. VES si sforza di fornire un'esperienza comune end-to-end di "vedo-non vedo" su tutte le shell e i dispositivi Windows, con il minimo sforzo da parte degli sviluppatori di app. Per raggiungere questo obiettivo, sfrutta la Microsoft Speech Platform e il framework UI Automation (UIA).

Esperienza utente

Quella che segue è una panoramica di ciò che un utente può sperimentare quando utilizza VES su Xbox e dovrebbe aiutare a definire il contesto prima di immergersi nei dettagli del funzionamento di VES.

  • L'utente accende la console Xbox e vuole sfogliare le sue app per trovare qualcosa di interessante:

    Utente: "Ehi Cortana, apri i miei giochi e le mie applicazioni"

  • L'utente viene lasciato in modalità di ascolto attivo (ALM), il che significa che la console è in attesa che l'utente invochi un controllo visibile sullo schermo, senza dover dire ogni volta "Ehi Cortana". L'utente può ora passare alla visualizzazione delle app e scorrere l'elenco delle app:

    Utente: "applicazioni"

  • Per scorrere la vista, l'utente può semplicemente dire:

    Utente: "Scorri verso il basso"

  • L'utente vede la grafica dell'applicazione a cui è interessato ma ha dimenticato il nome. L'utente chiede di visualizzare le etichette dei suggerimenti vocali:

    Utente: "mostra etichette"

  • Ora che è chiaro cosa dire, l'app può essere lanciata:

    Utente: "film e TV"

  • Per uscire dalla modalità di ascolto attivo, l'utente dice a Xbox di smettere di ascoltare:

    Utente: "Smetti di ascoltare"

  • In seguito, si può iniziare una nuova sessione di ascolto attivo con:

    Utente: "Ehi Cortana, fai una selezione" o "Ehi Cortana, seleziona"

Dipendenza dall'automazione dell'interfaccia utente

VES è un client di UI Automation e si basa sulle informazioni esposte dall'applicazione attraverso i suoi fornitori di UI Automation. Si tratta della stessa infrastruttura già utilizzata dalla funzione Narrator sulle piattaforme Windows. L'automazione dell'interfaccia utente consente l'accesso programmatico agli elementi dell'interfaccia utente, compreso il nome del controllo, il suo tipo e i modelli di controllo che implementa. Quando l'interfaccia utente cambia nell'applicazione, VES reagisce agli eventi di aggiornamento UIA e analizza nuovamente l'albero dell'automazione dell'interfaccia utente aggiornata per trovare tutti gli elementi che possono essere utilizzati, utilizzando queste informazioni per costruire una grammatica di riconoscimento vocale.

Tutte le app UWP hanno accesso al framework UI Automation e possono esporre informazioni sull'interfaccia utente indipendentemente dal framework grafico su cui sono costruite (XAML, DirectX/Direct3D, ecc.). In alcuni casi, come XAML, la maggior parte del lavoro pesante viene svolto dal framework, riducendo notevolmente il lavoro necessario per supportare Narrator e VES.

Per maggiori informazioni sull'automazione dell'interfaccia utente, consulta Fondamenti di automazione dell'interfaccia utente.

Nome dell'invocazione di controllo

VES impiega la seguente euristica per determinare quale frase registrare con il riconoscitore vocale come nome del controllo (cioè quello che l'utente deve pronunciare per invocare il controllo). Questa è anche la frase che apparirà nell'etichetta del suggerimento vocale.

Fonte del nome in ordine di priorità:

  1. Se l'elemento ha una proprietà LabeledBy , VES utilizzerà il sito AutomationProperties.Name di questa etichetta di testo.
  2. AutomationProperties.Name dell'elemento. In XAML, il contenuto del testo del controllo verrà utilizzato come valore predefinito per AutomationProperties.Name.
  3. Se il controllo è un ListItem o un Pulsante, VES cercherà il primo elemento figlio con un AutomationProperties.Namevalido.

Controlli attuabili

VES considera un controllo attivabile se implementa uno dei seguenti modelli di controllo dell'automazione:

  • InvokePattern (es. Button) - Rappresenta i controlli che iniziano o eseguono una singola azione non ambigua e non mantengono lo stato quando vengono attivati.

  • TogglePattern (es. Check Box) - Rappresenta un controllo che può passare attraverso una serie di stati e mantenere uno stato una volta impostato.

  • SelectionItemPattern (es. Combo Box) - Rappresenta un controllo che funge da contenitore per una collezione di elementi figli selezionabili.

  • ExpandCollapsePattern (es. Combo Box) - Rappresenta i controlli che si espandono visivamente per visualizzare il contenuto e si chiudono per nasconderlo.

  • ScrollPattern (es. List) - Rappresenta i controlli che agiscono come contenitori scorrevoli per una collezione di elementi figli.

Contenitori scorrevoli

Per i contenitori scorrevoli che supportano lo ScrollPattern, VES ascolterà i comandi vocali come "scorri a sinistra", "scorri a destra", e così via e invocherà Scroll con i parametri appropriati quando l'utente attiva uno di questi comandi. I comandi di scorrimento vengono iniettati in base al valore delle proprietà HorizontalScrollPercent e VerticalScrollPercent . Ad esempio, se HorizontalScrollPercent è maggiore di 0, verrà aggiunto "scroll left", se è minore di 100, verrà aggiunto "scroll right" ecc.

Sovrapposizione di narratori

L'applicazione Narrator è anche un client di UI Automation e utilizza la proprietà AutomationProperties.Name come una delle fonti del testo che legge per l'elemento dell'interfaccia utente attualmente selezionato. Per offrire una migliore esperienza di accessibilità, molti sviluppatori di app sono ricorsi a sovraccaricare la proprietà Name con un lungo testo descrittivo con l'obiettivo di fornire maggiori informazioni e contesto quando viene letto dal narratore. Tuttavia, ciò causa un conflitto tra le due caratteristiche: VES ha bisogno di frasi brevi che corrispondano o si avvicinino al testo visibile del controllo, mentre Narrator beneficia di frasi più lunghe e descrittive per fornire un contesto migliore.

Per risolvere questo problema, a partire dall'aggiornamento Windows 10 Creators Update, Narrator è stato aggiornato in modo da considerare anche la proprietà AutomationProperties.HelpText . Se questa proprietà non è vuota, il Narratore parlerà il suo contenuto in aggiunta a AutomationProperties.Name. Se HelpText è vuoto, il Narratore leggerà solo il contenuto di Nome. In questo modo sarà possibile utilizzare stringhe descrittive più lunghe dove necessario, mantenendo però una frase più breve e adatta al riconoscimento vocale nella proprietà Name .

Diagramma che mostra il codice sottostante il pulsante che include AutomationProperties.Name e AutomationProperties.HelpText che mostra che la Voice Enabled Shell è in attesa della configurazione del nome.

Per maggiori informazioni consulta Automation Properties for Accessibility Support in UI.

Modalità di ascolto attivo (ALM)

Entrare in ALM

Su Xbox, il VES non è costantemente in ascolto di input vocali. L'utente deve entrare esplicitamente in modalità di ascolto attivo dicendo:

  • "Ehi Cortana, seleziona" oppure
  • "Ehi Cortana, fai una selezione"

Ci sono molti altri comandi di Cortana che al termine lasciano l'utente in ascolto attivo, ad esempio "Hey Cortana, accedi" o "Hey Cortana, vai a casa".

L'inserimento di ALM avrà il seguente effetto:

  • Nell'angolo in alto a destra apparirà la scritta Cortana, che indicherà all'utente la possibilità di dire ciò che vede. Mentre l'utente parla, in questa posizione verranno mostrati anche i frammenti di frase riconosciuti dal riconoscitore vocale.

  • VES analizza l'albero UIA, trova tutti i controlli azionabili, registra il loro testo nella grammatica di riconoscimento vocale e avvia una sessione di ascolto continuo.

    Screenshot con l'opzione Per vedere un'etichetta pronuncia Mostra etichette evidenziata.

Uscire da ALM

Il sistema rimarrà in ALM mentre l'utente interagisce con l'interfaccia utente utilizzando la voce. Ci sono due modi per uscire da ALM:

  • L'utente dice esplicitamente "smetti di ascoltare" oppure
  • Se non c'è un riconoscimento positivo entro 17 secondi dall'ingresso in ALM o dall'ultimo riconoscimento positivo, si verifica un timeout

Invocazione dei controlli

In ALM l'utente può interagire con l'interfaccia utente utilizzando la voce. Se l'interfaccia utente è configurata correttamente (con le proprietà del nome che corrispondono al testo visibile), l'utilizzo della voce per eseguire le azioni dovrebbe essere un'esperienza naturale e senza interruzioni. L'utente dovrebbe essere in grado di dire semplicemente ciò che vede sullo schermo.

Interfaccia utente in sovrimpressione su Xbox

Il nome che VES ricava per un controllo può essere diverso dal testo effettivamente visibile nell'interfaccia utente. Questo può essere dovuto alla proprietà Name del controllo o all'elemento LabeledBy collegato che è stato esplicitamente impostato su una stringa diversa. Oppure, il controllo non ha un testo GUI ma solo un'icona o un'immagine.

In questi casi, gli utenti hanno bisogno di un modo per vedere cosa deve essere detto per invocare tale controllo. Pertanto, una volta in ascolto attivo, i suggerimenti vocali possono essere visualizzati dicendo "mostra etichette". Questo fa sì che le etichette dei suggerimenti vocali appaiano in cima a tutti i controlli che possono essere eseguiti.

Il limite è di 100 etichette, quindi se l'interfaccia utente dell'app ha un numero di controlli azionabili superiore a 100, ce ne saranno alcuni che non avranno le etichette dei suggerimenti vocali. La scelta delle etichette in questo caso non è deterministica, in quanto dipende dalla struttura e dalla composizione dell'interfaccia utente corrente, enumerata per prima nell'albero UIA.

Una volta che le etichette dei suggerimenti vocali vengono visualizzate, non c'è alcun comando per nasconderle; rimarranno visibili fino a quando non si verificherà uno dei seguenti eventi:

  • l'utente invoca un controllo
  • l'utente si allontana dalla scena corrente
  • l'utente dice "smetti di ascoltare"
  • la modalità di ascolto attivo si esaurisce

Posizione delle etichette dei suggerimenti vocali

Le etichette dei suggerimenti vocali sono centrate orizzontalmente e verticalmente all'interno del BoundingRectangle del controllo. Quando i controlli sono piccoli e strettamente raggruppati, le etichette possono sovrapporsi o essere oscurate da altre e VES cercherà di allontanarle per separarle e renderle visibili. Tuttavia, non è garantito che funzioni il 100% delle volte. Se l'interfaccia utente è molto affollata, è probabile che alcune etichette vengano oscurate da altre. Controllare l'interfaccia utente con "mostra etichette" per verificare che ci sia uno spazio adeguato per la visibilità dei suggerimenti vocali.

Screenshot delle etichette dei suggerimenti vocali centrate orizzontalmente e verticalmente all'interno del rettangolo di delimitazione del controllo.

Caselle combinate

Quando una casella combinata viene espansa, ogni singolo elemento della casella combinata riceve la propria etichetta vocale e spesso si trova sopra i controlli esistenti dietro l'elenco a discesa. Per evitare di presentare una confusione di etichette (in cui le etichette delle voci della casella combinata si mescolano con le etichette dei controlli dietro la casella combinata), quando una casella combinata viene espansa vengono mostrate solo le etichette delle sue voci figlie; tutte le altre etichette dei suggerimenti vocali vengono nascoste. L'utente può quindi selezionare una delle voci a discesa o "chiudere" la casella combinata.

  • Etichette sulle caselle combinate chiuse:

    Screenshot della finestra di output Video di visualizzazione e audio con etichette sulle caselle combinate compresse.

  • Etichette sulla casella combinata espansa:

    Screenshot della finestra di output Video di visualizzazione e audio con etichette sulla casella combinata espansa.

Controlli scrollabili

Per i controlli scorrevoli, i suggerimenti vocali per i comandi di scorrimento saranno centrati su ciascuno dei bordi del controllo. I suggerimenti vocali verranno mostrati solo per le direzioni di scorrimento che sono attivabili, quindi ad esempio se lo scorrimento verticale non è disponibile, "scorri verso l'alto" e "scorri verso il basso" non verranno visualizzati. Quando sono presenti più regioni scrollabili, la VES utilizzerà degli ordinali per distinguerle (es. "Scorri a destra 1", "Scorri a destra 2", ecc.).

Screenshot dei suggerimenti vocali Scorri a sinistra e Scorri a destra in un'interfaccia utente a scorrimento orizzontale.

Risoluzione dell'ambiguità

Quando più elementi dell'interfaccia utente hanno lo stesso nome o il riconoscitore vocale ha trovato più candidati, VES entra in modalità di disambiguazione. In questa modalità verranno mostrate le etichette dei suggerimenti vocali per gli elementi coinvolti, in modo che l'utente possa selezionare quello giusto. L'utente può uscire dalla modalità di disambiguazione dicendo "annulla".

Ad esempio:

  • In modalità ascolto attivo, prima della disambiguazione, l'utente dice: "Sono ambiguo":

    Screenshot della modalità di ascolto attiva con l'opzione Ora puoi dire ciò che vedi visualizzata e nessuna etichetta sui pulsanti.

  • Entrambi i pulsanti sono stati abbinati; la disambiguazione è iniziata:

    Screenshot della modalità di ascolto attiva con l'opzione Quale volevi visualizzata e le etichette Voce 1 e Voce 2 sui pulsanti.

  • Mostra l'azione del clic quando è stato scelto "Seleziona 2":

    Screenshot della modalità di ascolto attiva con l'opzione Ora puoi dire ciò che vedi visualizzata e l'etichetta Sono ambiguo sul primo pulsante.

Interfaccia utente di esempio

Ecco un esempio di interfaccia utente basata su XAML, che imposta AutomationProperties.Name in diversi modi:

<Page
    x:Class="VESSampleCSharp.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:VESSampleCSharp"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">
    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <Button x:Name="button1" Content="Hello World" HorizontalAlignment="Left" Margin="44,56,0,0" VerticalAlignment="Top"/>
        <Button x:Name="button2" AutomationProperties.Name="Launch Game" Content="Launch" HorizontalAlignment="Left" Margin="44,106,0,0" VerticalAlignment="Top" Width="99"/>
        <TextBlock AutomationProperties.Name="Day of Week" x:Name="label1" HorizontalAlignment="Left" Height="22" Margin="168,62,0,0" TextWrapping="Wrap" Text="Select Day of Week:" VerticalAlignment="Top" Width="137"/>
        <ComboBox AutomationProperties.LabeledBy="{Binding ElementName=label1}" x:Name="comboBox" HorizontalAlignment="Left" Margin="310,57,0,0" VerticalAlignment="Top" Width="120">
            <ComboBoxItem Content="Monday" IsSelected="True"/>
            <ComboBoxItem Content="Tuesday"/>
            <ComboBoxItem Content="Wednesday"/>
            <ComboBoxItem Content="Thursday"/>
            <ComboBoxItem Content="Friday"/>
            <ComboBoxItem Content="Saturday"/>
            <ComboBoxItem Content="Sunday"/>
        </ComboBox>
        <Button x:Name="button3" HorizontalAlignment="Left" Margin="44,156,0,0" VerticalAlignment="Top" Width="213">
            <Grid>
                <TextBlock AutomationProperties.Name="Accept">Accept Offer</TextBlock>
                <TextBlock Margin="0,25,0,0" Foreground="#FF5A5A5A">Exclusive offer just for you</TextBlock>
            </Grid>
        </Button>
    </Grid>
</Page>

Utilizzando l'esempio precedente, ecco come apparirà l'interfaccia utente con e senza etichette vocali.

  • In modalità di ascolto attivo, senza etichette visualizzate:

    Screenshot della modalità di ascolto attiva con l'opzione Per vedere le etichette, pronuncia Mostra etichette visualizzata e nessuna etichetta mostrata.

  • In modalità ascolto attivo, dopo che l'utente dice "mostra etichette":

    Screenshot della modalità di ascolto attivo con l'opzione Se hai finito, pronuncia Stop visualizzata ed etichette mostrate nei controlli dell'interfaccia utente.

Nel caso di button1, XAML popola automaticamente la proprietà AutomationProperties.Name utilizzando il testo dei contenuti visibili del controllo. Questo è il motivo per cui c'è un'etichetta di suggerimento vocale anche se non c'è un set esplicito di AutomationProperties.Name .

Con button2, impostiamo esplicitamente AutomationProperties.Name su qualcosa di diverso dal testo del controllo.

Con comboBox, abbiamo usato la proprietà LabeledBy per fare riferimento a label1 come fonte dell'automazione Name, e in label1 abbiamo impostato AutomationProperties.Name su una frase più naturale rispetto a quella che viene resa sullo schermo ("Giorno della settimana" piuttosto che "Seleziona il giorno della settimana").

Infine, con button3, VES prende Name dal primo elemento figlio poiché button3 non ha un set AutomationProperties.Name .

Vedi anche