共用方式為


GazeInteractionLibrary(已存檔)

警告

本文件已被歸檔,且該元件目前版本的 Windows 社群工具包中無法取得。

雖然目前沒有立即將此元件移植到 8.x,但社群歡迎表達興趣或參與其納入。

如需詳細資訊,請參閱:

以下是原始文件。


Microsoft 宣布在Windows 10 秋季創作者更新中,將提供原生支援的眼動追蹤功能。 在 2018 年 4 月的 Windows 10 更新中,Microsoft 透過釋出 Windows Gaze Input API ,加入開發者支援,以建立能與視線輸入及眼動追蹤互動的 UWP 應用程式。

此凝視互動函式庫建置於 Windows 凝視輸入 API 之上,並提供一組開發者輔助類別,讓 UWP 應用程式更容易回應使用者在螢幕上的視線。 此函式庫旨在抽象化處理透過 Windows API 提供的眼動追蹤裝置原始視線輸入流的某些複雜性。

先決條件

要使用 Windows 10 的凝視輸入 API 或此凝視互動函式庫,您需要具備以下條件:

要使用 gaze input API,必須在應用程式清單中註冊 gazeInput 功能。 在您的專案中的 Package.appxmanifest 檔案內的 Capabilities 節點新增以下 DeviceCapability(當您在 Visual Studio 的 App Manifest Designer 開啟 Package.appxmanifest 時,可以在 Capabilities 標籤勾選 Gaze Input):

<Capabilities>
   <DeviceCapability Name="gazeInput" />
</Capabilities>

支援的功能

凝視互動函式庫目前支援以下功能:

  • 基於停留啟動的 XAML 按鈕和切換按鈕控制
  • 啟用整個 XAML 頁面或部分(例如單一控制項)的凝視互動
  • 自訂特定控制項的停留時間
  • 控制重複的停留呼叫

凝視概念

以下是幾個與眼神凝視相關的概念,有助於更好地理解本文的其餘內容:

  • 薩卡德。 眼睛快速從一個注視點移動到另一個注視點的過程稱為掃視。 我們的眼睛會在注視和掃視之間交替。
  • 執著。 凝視是指在螢幕單一位置集中多個視點,持續相對較短的時間(約200毫秒)。 這發生在掃視後,當眼睛停留在物體上時,視覺會變得清晰。
  • 停留。 停留是指使用者有意識地注視,其持續時間超過固定注視的時間。 當使用者僅用眼睛作為輸入方式時,這種機制通常用來辨識使用者的意圖。 停留時間可依應用與控制而異。
  • 進入/退出。 這些是此 API 專屬的狀態與屬性,用以協助管理凝視相關互動,並參考自第一個記錄的凝視取樣到最後一次記錄的凝視取樣以來,特定控制(按鈕、切換按鈕等)所經過的時間。

凝視互動函式庫透過讀取眼動追蹤器上的數據,來實現頁面上的停留式凝視互動,當使用者的視線在特定控制項上停留特定時間時,觸發該控制項。 應用程式可根據使用情境設定此時間。

指標狀態屬性

Windows 的凝視輸入 API 會提供一串帶有時間戳記的凝視點座標,顯示使用者在螢幕上的位置。 此函式庫將這些樣本彙整於每個控制項,並將串流轉換為凝視事件。 與這些事件相對應的狀態如下:

房產 類型 Description
請輸入 列舉 使用者的目光進入了控制系統
固定 列舉 使用者的眼睛會聚焦在控制器上。
居住 列舉 使用者有意識地停留在控制狀態,且已超過停留時間。 這被解讀為使用者意圖啟動或呼叫控制,例如點擊按鈕
Exit 列舉 使用者的視線已不再受控

GazeInput 屬性

若 XAML 頁面啟用以凝視互動,則可透過以下屬性設定凝視游標的可見性、大小,以及上述狀態相關的時序:

房產 類型 Description
IsDevice可用 布爾 (bool) 回傳是否連接相容的眼動追蹤器。 當這個屬性改變時,會觸發一個 IsDeviceAvailableChanged 事件。
互動 列舉 取得或設定該特定 XAML 元素的凝視互動狀態。 有三種選擇:
  • 啟用。 凝視互動在此元素及其所有子元素中皆已啟用
  • 禁用 此元素及其子元素的凝視控制被禁用
  • 繼承 凝視互動狀態是從最近的祖先繼承而來
游標可見 布爾 (bool) 凝視游標顯示使用者在螢幕上看的方向。 此布林屬性在設定為 時 true 顯示視線游標,設定為 false時則隱藏。 預設值為 false
游標半徑 整數 (int) 取得或設定凝視游標半徑的大小。 預設值為 X
閾值持續時間 TimeSpan 此持續時間控制指示狀態何時移動到 Enter 狀態或 Exit 狀態。 當使用者的目光首次進入一個控制元件PointerState之後,當此持續時間已過時,則設為Enter。 當使用者視線離開控制器後,經過這段時間,PointerState 將被設定為 Exit。 兩種情況下,事件 StateChanged 都會被觸發。 預設值是 50ms。
凝視持續時間 TimeSpan 取得或設定控制從該 Enter 狀態轉換到該 Fixation 狀態的持續時間。 當前會觸發StateChanged事件,並將PointerState設定為Fixation。 此事件應用來控制應用程式所需的最早視覺反饋,以向使用者提供有關凝視位置的資訊。 預設值是 350ms。
停留持續時間 TimeSpan 取得或設定控制從該 Fixation 狀態轉換到該 Dwell 狀態的持續時間。 此時,StateChanged 事件被觸發,並將 PointerState 設定為 DwellEnterFixation狀態通常達成得很快,使用者很難控制。 相較之下,Dwell 是一項更有意識的活動。 此時控制項會被呼叫,例如按鈕點擊。 應用程式可以修改這個屬性,以控制啟用視線的 UI 元素在使用者開始查看後何時被觸發。 預設值是 400 毫秒。
MaxDwell重複計數 整數 (int) 控制鍵最多可重複觸發,使用者視線不需移開再回到控制鍵。 預設值為零,這會使控制項無法重複呼叫。 開發者可以設定較高的值來啟用重複呼叫。
停留重複持續時間 TimeSpan 若使用者持續停留在控制上,則可取得或設定重複觸發停留動作的持續時間。 第一次重複將在RepeatDelayDuration所指定的額外延遲之後發生。 後續重複會在DwellRepeatDuration每個週期後發生。 只有當 MaxDwellRepeatCount 設為大於零時,控制項才會被反覆呼叫
重複延遲持續時間 TimeSpan 取得或設定第一次重複發生的額外持續時間。 這可防止無意中重複召喚。 請參閱上方詳細說明。
IsSwitchEnabled(開關是否啟用) 布爾 (bool) 可以獲取或設定開關是否啟用。 啟用 Switch 支援時,目前固定的元素不會轉換成停留狀態。 此外,當 GazePointer.Click() 方法被呼叫時,會呼叫目前固定的元素。

GazeElement 事件

請在此補充說明。

活動 Description
狀態已變更 此事件是針對與 PointerState 相關的各個狀態(排除 DwellRepeat 狀態)而觸發的。 應用程式可以為此事件新增處理程序,以針對上述各種凝視指標狀態自訂與凝視相關的處理。
DwellProgressFeedback 當此事件觸發時,表示停留事件的進展情況。 應用程式可以處理此事件,透過將 DwellProgressEventArgs.Handled 設定為 true 來自訂視覺回饋和/或關閉預設的停留動畫。
召喚 當程式庫即將因應停留事件而呼叫控制時,此事件會觸發。 應用程式可以在調用前執行自訂處理,或透過設定DwellInvokedRoutedEventArgs.Handledtrue來抑制調用。

StateChangedEventArgs 屬性

這個參數會傳遞給 StateChanged 事件,當事件變更 PointerState 時會觸發。

房產 類型 Description
指標狀態 凝視指標狀態 GazePointerState與此活動相關的
經過時間 TimeSpan 使用者為達到上述指標狀態,所花在觀察控制項的時間

DwellProgressEventArgs 屬性

此參數會傳遞給處理該 DwellProgressFeedback 事件的事件。

房產 類型 Description
State 列舉 此枚舉列舉了控制狀態,該狀態在三個值 IdleProgressingComplete 之間停留
Progress 雙倍 介於0到1之間的值表示完成停留的進度分數
已處理 布爾 (bool) 若應用程式將此值設為 true 預設值,函式庫提供的動畫會被抑制

DwellInvokedRoutedEventArgs 屬性

此參數會傳遞給 GazeElement::Invoked 事件,並允許應用程式在使用者停留在控制項時避免預設調用。

房產 類型 Description
已處理 布爾 (bool) 此參數被傳遞給 GazeElement.Invoked 事件。 若設定為true,函式庫將在停留事件中抑制調用控制。

範例

為整個 XAML 頁面啟用視線互動

在頁面元素中加入以下線條,以實現整頁的視線互動。

    xmlns:gaze="using:Microsoft.Toolkit.Uwp.Input.GazeInteraction"
    gaze:GazeInput.Interaction="Enabled"

例如:

    <Page
    x:Class="UwpApp.MainPage"
    xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="https://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="https://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:gaze="using:Microsoft.Toolkit.Uwp.Input.GazeInteraction"
    gaze:GazeInput.Interaction="Enabled"
    mc:Ignorable="d">

在頁面的一部分中啟用視線互動

凝視互動也只能在頁面的一部分啟用,方法是將相同的屬性加入頁面上的任何 XAML 元素。

若要僅啟用頁面的子集,例如頁面上僅有一個格子:

    <Grid gaze:GazeInput.Interaction="Enabled">
        <Button Content="Click Me" />
    <Grid />

在上述範例中,當使用者在網格中注視按鈕並且停留時間達到預設的時長時,按鈕會被點擊。

更改控制項的停留時間

以下程式碼將按鈕的停留時間設定為 500ms。 這表示按鈕會在控制進入固定狀態後 500 毫秒被點擊。 (詳情請參見 PointerState

    <Button Content="Click Me" gaze:GazeInput.DwellDuration="00:00:00.500">

動畫

此函式庫提供控制項上方縮小矩形的預設動畫,表示停留事件的進度。 動畫風格可透過兩種方式自訂:

  • 如果你想保留動畫風格,但改變使用的顏色:
    • 設定 GazeInput.DwellFeedbackEnterBrush 屬性,以便在偵測到凝視時立即在控制元件上顯示矩形。
    • 更改 GazeInput.DwellFeedbackProgressBrush 屬性以改變進度矩形的顏色
    • 更改 GazeInput.DwellFeedbackCompletedBrush 屬性以改變完成畫筆的顏色
  • 如果你想完全停用或覆寫預設動畫,請新增一個事件處理程序,DwellProgressFeedbackGazeElement並設定HandledTrue 如下
<Button Content="Click Me">
    <gaze:GazeInput.GazeElement>
        <gaze:GazeElement DwellProgressFeedback="OnInvokeProgress" />
    </gaze:GazeInput.GazeElement>
</Button>
private void OnInvokeProgress(object sender, DwellProgressEventArgs e)
{
    e.Handled = true;
}

範例專案

凝視互動頁面。 你可以在 Windows 社群工具包範例應用程式中看到這個功能的運作

需求

裝置系列 Universal,10.0.17134.1 或更高
Namespace Microsoft.Toolkit.Uwp.Input.GazeInteraction
NuGet 套件 NuGet 套件

API