Verwendung der Spracherkennung Speech für den Aufruf von UI-Elementen

Die Voice Enabled Shell (VES) ist eine Erweiterung der Windows Speech Platform und ermöglicht eine erstklassige Spracherkennung innerhalb von Apps. Auf diese Weise können Benutzer*innen mittels Spracherkennung Bildschirmsteuerelemente aufrufen und Text durch Diktieren einfügen. VES soll mit minimalem Aufwand App-Entwickler*innen für alle Windows-Shells und -Geräte eine gemeinsame, durchgängige See-It-Say-It-Erfahrung bereitstellen. Um dies zu erreichen, nutzt VES die Microsoft Speech Platform und das Framework für die Benutzeroberflächenautomatisierung (UI Automation, UIA).

Exemplarische Vorgehensweise für die Benutzeroberfläche

Im Folgenden wird eine Übersicht über die Erfahrung von Benutzer*innen bei der Verwendung von VES auf Xbox gegeben. Dies soll helfen, den Kontext festzulegen, bevor die Funktionsweise von VES detailliert beschrieben wird.

  • Ein(e) Benutzer*in aktiviert die Xbox-Konsole und möchte die Apps durchsuchen, um etwas Interessantes zu finden:

    Benutzer*in: „Hey Cortana, öffne meine Spiele und Apps“

  • Der/die Benutzer*in befindet sich anschließend im aktiven Erkennungsmodus (Active Listening Mode, ALM). Die Konsole wartet jetzt darauf, dass der/die Benutzer*in ein Steuerelement aufruft, das auf dem Bildschirm angezeigt wird, d. h. der/die Benutzer*in muss nicht jedes Mal „Hey Cortana“ sagen. Der/die Benutzer*in kann jetzt zur Anzeige von Apps wechseln und durch die App-Liste scrollen:

    Benutzer*in: „Anwendungen“

  • Um durch die Ansicht zu scrollen, kann der/die Benutzer*in einfach Folgendes sagen:

    Benutzer*in: „Scrolle nach unten“

  • Der/die Benutzer*in sieht die Box-Grafik für die App, für die er/sie sich interessiert, hat jedoch den Namen vergessen. Der/die Benutzer*in fordert die Anzeige von Sprachtippbeschriftungen an:

    Benutzer*in: „Zeig Beschriftungen an“

  • Da jetzt klar ist, was gesagt werden soll, kann die App gestartet werden:

    Benutzer*in: „Filme und Serien“

  • Um den aktiven Erkennungsmodus zu beenden, teilt der/die Benutzer*in Xbox mit, die Erkennung zu beenden:

    Benutzer*in: „Beende die Erkennung“

  • Später kann wie folgt eine neue aktive Erkennungssitzung gestartet werden:

    Benutzer*in: „Hey Cortana, triff eine Auswahl“ oder „Hey Cortana, wähl etwas aus“

Abhängigkeit der Benutzeroberflächenautomatisierung

VES ist ein Benutzeroberflächenautomatisierungs-Client, der von den Informationen abhängig ist, die von der App über ihre Benutzeroberflächenautomatisierungs-Anbieter verfügbar gemacht werden. Dies ist die gleiche Infrastruktur, die bereits von der Sprachausgabefunktion auf Windows-Plattformen verwendet wird. Die Benutzeroberflächenautomatisierung ermöglicht den programmgesteuerten Zugriff auf Benutzeroberflächenelemente, einschließlich Name und Typ des Steuerelements und der vom Steuerelement implementierten Steuerelementmuster. Wenn die Benutzeroberfläche in der App geändert wird, reagiert VES auf UIA-Updateereignisse und analysiert die aktualisierte Benutzeroberflächenautomatisierungs-Struktur erneut, um alle handlungsrelevanten Elemente zu entdecken. Diese Informationen werden zur Erstellung einer Grammatik für die Spracherkennung verwendet.

Alle UWP-Apps haben Zugriff auf das Benutzeroberflächenautomatisierungs-Framework und können Informationen zur Benutzeroberfläche verfügbar machen, unabhängig davon, auf welchem Grafikframework sie basieren (XAML, DirectX/Direct3D usw.). In einigen Fällen, z. B. XAML, wird der Großteil der Aufgaben durch das Framework durchgeführt, wodurch der Aufwand für die Unterstützung von Sprachausgabe und VES erheblich reduziert wird.

Weitere Informationen zu Benutzeroberflächenautomatisierung finden Sie unter Grundlagen der Benutzeroberflächenautomatisierung.

Steuerelementaufrufname

VES verwendet die folgende Heuristik, um zu bestimmen, welcher Ausdruck beim Spracherkennungsmodul als Name des Steuerelements registriert werden soll (d. h. was Benutzer*innen sagen müssen, um das Steuerelement aufzurufen). Dies ist auch der Ausdruck, der in der Sprachtippbeschriftung angezeigt wird.

Quelle des Namens nach Priorität:

  1. Wenn das Element eine LabeledBy angefügte Eigenschaft besitzt, verwendet VES den AutomationProperties.Name dieser Textbeschriftung.
  2. AutomationProperties.Name des Elements. In XAML wird der Textinhalt des Steuerelements als Standardwert für AutomationProperties.Name verwendet.
  3. Wenn es sich beim Steuerelement um ein ListItem- oder Button-Element handelt, sucht VES nach dem ersten untergeordneten Element mit einem gültigen AutomationProperties.Name.

Handlungsrelevante Steuerelemente

VES betrachtet ein Steuerelement als handlungsrelevant, wenn es eines der folgenden Automatisierungssteuerelementmuster implementiert:

  • InvokePattern (z. B. Schaltfläche) – Stellt Steuerelemente dar, die eine einzelne eindeutige Aktion initiieren oder ausführen und den Zustand nach der Aktivierung nicht beibehalten.

  • TogglePattern (z. B. Kontrollkästchen) – Stellt ein Steuerelement dar, das einen Zustandszyklus durchlaufen kann und einen Zustand beibehält, nachdem er festgelegt wurde.

  • SelectionItemPattern (z. B. Kombinationsfeld) – Stellt Steuerelemente dar, die als Container für eine Auflistung auswählbarer untergeordneter Elemente dienen.

  • ExpandCollapsePattern (z. B. Kombinationsfeld) – Stellt Steuerelemente dar, die visuell erweitert werden, um Inhalte anzuzeigen, und reduziert werden, um Inhalte auszublenden.

  • ScrollPattern (z. B. Liste) – Stellt Steuerelemente dar, die als scrollbare Container für eine Auflistung untergeordneter Elemente dienen.

Scrollbare Container

Bei scrollbaren Containern, die ScrollPattern unterstützen, wartet VES auf Sprachbefehle wie „nach links scrollen“, „nach rechts scrollen“ usw. und ruft „Scroll“ mit den entsprechenden Parametern auf, wenn Benutzer*innen einen dieser Befehle auslösen. Scrollbefehle werden basierend auf dem Wert der Eigenschaften HorizontalScrollPercent und VerticalScrollPercent eingefügt. Wenn beispielsweise der Wert von HorizontalScrollPercent größer als 0 ist, wird „nach links scrollen“ hinzugefügt; wenn der Wert kleiner als 100 ist, wird „nach rechts scrollen“ hinzugefügt usw.

Überlappung der Sprachausgabe

Die Sprachausgabeanwendung ist ebenfalls ein Benutzeroberflächenautomatisierungs-Client und verwendet die Eigenschaft AutomationProperties.Name als eine der Quellen für den Text, der für das aktuell ausgewählte Benutzeroberflächenelement vorgelesen wird. Um eine bessere Barrierefreiheit zu bieten, haben viele App-Entwickler*innen auf die Überladung der Eigenschaft Name mit einem langen, beschreibenden Text zurückgegriffen, um beim Vorlesen durch die Sprachausgabe mehr Informationen und Kontext bereitzustellen. Dies führt jedoch zu einem Konflikt zwischen den beiden Funktionen: VES benötigt kurze Ausdrücke, die mit dem sichtbaren Text des Steuerelements übereinstimmen oder genau übereinstimmen, während die Sprachausgabe von längeren, aussagekräftigeren Ausdrücken profitiert, um einen besseren Kontext bereitzustellen.

Um diesen Konflikt zu lösen, wurde die Sprachausgabe ab Windows 10 Creators Update so aktualisiert, dass auch die Eigenschaft AutomationProperties.HelpText betrachtet wird. Wenn diese Eigenschaft nicht leer ist, liest die Sprachausgabe ihren Inhalt zusätzlich zu AutomationProperties.Name vor. Wenn HelpText die Sprachausgabe leer ist, liest die Sprachausgabe nur den Inhalt von „Name“ vor. Dies ermöglicht die Verwendung längerer, beschreibender Zeichenfolgen, wenn notwendig. Gleichzeitig kann in der Eigenschaft Name ein kürzerer Ausdruck verwendet werden, der für die Spracherkennung geeignet ist.

Eine Abbildung mit dem Code für die Schaltfläche mit AutomationProperties.Name und AutomationProperties.HelpText, der zeigt, dass Voice Enabled Shell auf „Configure“ wartet.

Weitere Informationen finden Sie unter Automatisierungseigenschaften für die Barrierefreiheitsunterstützung in der Benutzeroberfläche.

Aktiver Erkennungsmodus (Active Listening Mode, ALM)

Starten des ALM

VES wartet auf Xbox nicht ständig auf Spracheingaben. Benutzer*innen müssen explizit zum aktiven Erkennungsmodus wechseln, indem sie Folgendes sagen:

  • „Hey Cortana, auswählen“ oder
  • „Hey Cortana, Auswahl treffen“

Es gibt mehrere weitere Cortana-Befehle, die den aktiven Erkennungsmodus für Benutzer*innen starten, z. B. „Hey Cortana, anmelden“ oder „Hey Cortana, zum Startmenü“.

Das Starten des ALM hat folgende Auswirkungen:

  • Die Cortana-Überlagerung wird oben rechts angezeigt. Sie zeigt Benutzer*innen an, dass sie sagen können, was sie sehen. Während die Benutzer*innen sprechen, werden Phrasenfragmente, die vom Spracherkennungsmodul erkannt werden, ebenfalls an dieser Stelle angezeigt.

  • VES analysiert die UIA-Struktur, entdeckt alle handlungsrelevanten Steuerelemente, registriert den Text in der Spracherkennungsgrammatik und startet eine kontinuierliche Erkennungssitzung.

    Screenshot mit hervorgehobener Option „Um Beschriftungen anzuzeigen, „Beschriftungen anzeigen“ sagen“.

Beenden des ALM

Das System bleibt im ALM, während Benutzer*innen mittels ihrer Stimme mit der Benutzeroberfläche interagieren. Es gibt zwei Möglichkeiten, den ALM zu beenden:

  • Benutzer*innen sagen explizit „Erkennung beenden“ oder:
  • Es tritt ein Timeout ein, wenn es innerhalb von 17 Sekunden nach dem Starten des ALM oder seit der letzten positiven Erkennung keine positive Erkennung gibt.

Aufruf von Steuerelementen

Benutzer*innen können im ALM mittels ihrer Stimme mit der Benutzeroberfläche interagieren. Wenn die Benutzeroberfläche ordnungsgemäß konfiguriert ist (mit Name-Eigenschaften, die dem sichtbaren Text entsprechen), sollte die Verwendung der Stimme zum Ausführen von Aktionen eine nahtlose, natürliche Erfahrung sein. Benutzer*innen sollten einfach sagen können, was sie auf dem Bildschirm sehen.

UI-Überlagerung auf Xbox

Der Name, den VES für ein Steuerelement ableitet, kann sich vom tatsächlich sichtbaren Text in der Benutzeroberfläche unterscheiden. Dies kann darauf zurückzuführen sein, dass die Name Eigenschaft des Steuerelements oder das angefügte LabeledBy-Element explizit auf eine andere Zeichenfolge festgelegt ist. Möglicherweise verfügt das Steuerelement auch nicht über einen GUI-Text, sondern nur über ein Symbol oder Bildelement.

In diesen Fällen benötigen Benutzer*innen eine Möglichkeit, zu sehen, was gesagt werden muss, um das betreffende Steuerelement aufzurufen. Daher können Sprachtipps im aktiven Erkennungsmodus angezeigt werden, indem Benutzer*innen „Beschriftungen anzeigen“ sagen. Dies bewirkt, dass über jedem handlungsrelevanten Steuerelement Sprachtippbeschriftungen angezeigt werden.

Die Zahl der Beschriftungen ist auf 100 begrenzt. Wenn die Benutzeroberfläche der App mehr als 100 handlungsrelevante Steuerelemente hat, werden einige Steuerelemente ohne Sprachtippbeschriftungen angezeigt. Welche Beschriftungen in diesem Fall angezeigt werden, ist nicht deterministisch, da dies von der Struktur und Zusammensetzung der aktuellen Benutzeroberfläche abhängig ist wie zuerst in der UIA-Struktur aufgezählt.

Wenn Sprachtippbeschriftungen angezeigt werden, gibt es keinen Befehl, mit dem sie ausgeblendet werden können. Sie werden angezeigt, bis eines der folgenden Ereignisse eintritt:

  • Die Benutzer*innen rufen ein Steuerelement auf.
  • Die Benutzer*innen navigieren von der aktuellen Benutzeroberfläche weg.
  • Die Benutzer*innen sagen „Erkennung beenden“.
  • Es tritt ein Timeout für den aktiven Erkennungsmodus ein.

Anzeigeort von Sprachtippbeschriftungen

Sprachtippbeschriftungen werden horizontal und vertikal im BoundingRectangle des Steuerelements zentriert. Wenn Steuerelemente klein und eng gruppiert sind, können die Beschriftungen von anderen Beschriftungen überlappt/verdeckt werden. VES versucht in diesem Fall, Beschriftungen auseinander zu schieben, um sie zu trennen und sicherzustellen, dass sie sichtbar sind. Dies funktioniert jedoch nicht in 100 % der Fälle. Wenn die Benutzeroberfläche sehr gefüllt ist, werden einige Beschriftungen wahrscheinlich von anderen Beschriftungen verdeckt werden. Überprüfen Sie die Benutzeroberfläche mit „Beschriftungen anzeigen“, um sicherzustellen, dass ausreichend Platz für Sprachtippbeschriftungen vorhanden ist.

Screenshot der Sprachtippbeschriftungen mit horizontaler und vertikaler Zentrierung innerhalb des umgebenden Rechtecks des Steuerelements.

Kombinationsfelder

Wenn ein Kombinationsfeld erweitert wird, erhält jedes einzelne Element im Kombinationsfeld eine eigene Sprachtippbeschriftung. Häufig befinden sich diese über vorhandenen Steuerelementen hinter einer Dropdownliste. Um die Anzeige einer unübersichtlichen und verwirrenden Menge von Beschriftungen zu vermeiden (d. h. wenn Kombinationsfeldelement-Beschriftungen mit den Beschriftungen von Steuerelementen hinter dem Kombinationsfeld vermischt werden), werden bei der Erweiterung eines Kombinationsfelds nur die Beschriftungen der untergeordneten Elemente angezeigt. Alle anderen Sprachtippbeschriftungen werden ausgeblendet. Benutzer*innen können entweder eines der Dropdownelemente auswählen oder das Kombinationsfeld „schließen“.

  • Beschriftungen in reduzierten Kombinationsfeldern:

    Screenshot des Fensters „Videoausgabe anzeigen und Ton abspielen“ mit Beschriftungen in einem reduzierten Kombinationsfeld.

  • Beschriftungen in erweiterten Kombinationsfeldern:

    Screenshot des Fensters „Videoausgabe anzeigen und Ton abspielen“ mit Beschriftungen in einem erweiterten Kombinationsfeld.

Scrollbare Steuerelemente

Bei scrollbaren Steuerelementen werden die Sprachtipps für die Scrollbefehle an den Rändern des Steuerelements zentriert angezeigt. Sprachtipps werden nur für die Scrollrichtungen angezeigt, die umsetzbar sind. Wenn z. B. kein vertikales Scrollen möglich ist, werden „nach oben scrollen“ und „nach unten scrollen“ nicht angezeigt. Wenn mehrere scrollbare Bereiche vorhanden sind, verwendet VES Ordinalzahlen, um zwischen ihnen zu unterscheiden (z. B. „nach rechts scrollen 1“, „nach rechts scrollen 2“ usw.).

Screenshot der Sprachtipps für „nach links scrollen“ und „nach rechts scrollen“ in einer Benutzeroberfläche, die horizontal scrollbar ist.

Mehrdeutigkeitsvermeidung

Wenn mehrere UI-Elemente denselben Namen haben oder das Spracherkennungsmodul mehrere mögliche Namen identifiziert hat, wechselt VES in den Mehrdeutigkeitsmodus. In diesem Modus werden Sprachtippbeschriftungen für die beteiligten Elemente angezeigt, damit Benutzer*innen die richtige Sprachtippbeschriftung auswählen können. Benutzer*innen können den Mehrdeutigkeitsmodus aufheben, indem sie „Abbrechen“ sagen.

Zum Beispiel:

  • Im aktiven Erkennungsmodus; vor Auflösung der Mehrdeutigkeit; Benutzer*innen sagen „Bin ich mehrdeutig“:

    Screenshot des aktiven Erkennungsmodus mit der Option „Jetzt können Sie sagen, was Sie sehen“ ohne Beschriftungen auf den Schaltflächen.

  • Beide Schaltflächen entsprechen; Mehrdeutigkeitsmodus gestartet:

    Screenshot des aktiven Erkennungsmodus mit der Option „Was meinten Sie“ und den Beschriftungen „Element 1“ und „Element 2“ auf den Schaltflächen.

  • Anzeigen der Klickaktion, wenn „2 auswählen“ ausgewählt wurde:

    Screenshot des aktiven Erkennungsmodus mit der Option „Jetzt können Sie sagen, was Sie sehen“ und der Beschriftung „Bin ich mehrdeutig“ auf der ersten Schaltfläche.

Beispielbenutzeroberfläche

Dies ist ein Beispiel für eine XAML-basierte Benutzeroberfläche mit verschiedenen Einstellungen für AutomationProperties.Name:

<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>

Im Beispiel oben sehen Sie, wie die Benutzeroberfläche mit und ohne Sprachtippbeschriftungen aussieht.

  • Im aktiven Erkennungsmodus ohne angezeigte Beschriftungen:

    Screenshot des aktiven Erkennungsmodus mit der Option „Um Beschriftungen anzuzeigen, „Beschriftungen anzeigen“ sagen“ ohne angezeigte Beschriftungen.

  • Im aktiven Erkennungsmodus, nachdem Benutzer*innen „Beschriftungen anzeigen“ gesagt haben:

    Screenshot des aktiven Erkennungsmodus mit der Option „Sagen Sie „Erkennung beenden“, wenn Sie fertig sind“ und Beschriftungen auf Steuerelementen.

Im Fall von button1 füllt XAML die Eigenschaft AutomationProperties.Name automatisch mithilfe von Text aus dem sichtbaren Textinhalt des Steuerelements auf. Daher gibt es eine Sprachtippbeschriftung, auch wenn AutomationProperties.Name nicht explizit festgelegt wurde.

Mit button2 wird AutomationProperties.Name explizit auf etwas anderes als den Text des Steuerelements festgelegt.

Bei comboBox wurde die Eigenschaft LabeledBy verwendet, um auf label1 Quelle von Name der Automatisierung zu verweisen. In label1 wurde AutomationProperties.Name auf einen natürlicheren als den auf dem Bildschirm angezeigten Ausdruck festgelegt („Tag der Woche“ statt „Tag der Woche auswählen“).

Schließlich greift VES mit button3 auf Name des ersten untergeordneten Elements zu, da für button3 selbst kein AutomationProperties.Name festgelegt ist.

Weitere Informationen