Zarządzanie dostępem do śledzenia oczu i kalibracją
Śledzenie oczu na HoloLens 2 zapewnia zaawansowane możliwości ładowania interakcji użytkowników. Istnieją jednak dwa punkty kontrolne użytkownika, które muszą zostać wykonane pomyślnie, aby śledzenie oczu działało w aplikacji. Dwa punkty kontrolne to (a) zatwierdzanie dostępu do śledzenia oczu dla aplikacji, a (b) ukończenie kalibracji śledzenia oczu na urządzeniu. System automatycznie monituje o ukończenie tych czynności zgodnie z potrzebami, ale użytkownik może przypadkowo odrzucić coś i zablokować. W tym dokumencie opisano najlepsze rozwiązania dotyczące poruszania się po punktach kontrolnych śledzenia oczu i pomagania użytkownikowi ponawiać próbę w razie potrzeby, zapewniając bezproblemowe i wysokiej jakości środowisko pracy z aplikacją.
Żądanie dostępu
Aby móc korzystać ze śledzenia oczu, aplikacja musi najpierw zażądać dostępu. Odbywa się to za pośrednictwem wywołania funkcji EyesPose::RequestAccessAsync, która jest udokumentowana w przewodniku rozwoju wzroku. Ta funkcja wyzwala kontrolę systemu, aby sprawdzić, czy dostęp do wzroku jest dostępny dla aplikacji. Po zainstalowaniu pierwszego żądania dostępu użytkownik zostanie wyświetlony z monitem o uprawnienia. Jeśli klikną pozycję "Tak", funkcja zwróci funkcję GazeInputAccessStatus::Allowed i możesz przejść dalej ze swoim środowiskiem. Jeśli jednak użytkownik wybierze pozycję "Nie", funkcja zwróci funkcję GazeInputAccessStatus::D eniedByUser.
Okno dialogowe żądania dostępu jest wyświetlane tylko raz w pierwszym uruchomieniu aplikacji. Po wybraniu przez użytkownika system zapamiętuje swoje preferencje i stosuje je do wszystkich przyszłych żądań dostępu automatycznie dla tego zalogowanego użytkownika. Jeśli użytkownik chce później zmienić swoje preferencje, może to zrobić za pośrednictwem sekcji "Uprawnienia aplikacji" na stronie "Prywatność" w aplikacji HoloLens "Ustawienia". Ponieważ preferencja jest lepka, użytkownik może niestety dostać się do stanu, w którym śledzenie oczu jest wyłączone i nie wiedzą, jak to naprawić. Jeśli śledzenie oczu jest ważną częścią środowiska aplikacji i wykryjesz, że dostęp do śledzenia oczu został odrzucony, możesz pomóc użytkownikowi, bezpośrednio uruchamiając aplikację ustawień na właściwej stronie. Odbywa się to za pośrednictwem wywołania polecenia Launcher::LaunchUriAsync z ciągiem "ms-settings:privacy-eyetracker".
using namespace winrt::Windows::System::Launcher;
using namespace winrt::Windows::Foundation;
LaunchUriAsync(Uri(L"ms-settings:privacy-eyetracker"));
Należy unikać automatycznego uruchamiania aplikacji ustawień lub wielokrotnie monitować użytkownika. Zamiast tego znajdź odpowiednią lokalizację w interfejsie użytkownika, w której można przekazać bieżący stan dostępu et, wyjaśnić wartość śledzenia oczu dla aplikacji i podać przycisk, aby użytkownik mógł go uruchomić.
Opóźnienie żądania dostępu
Częstą przyczyną przypadkowego spadku żądania dostępu jest to, że użytkownik jest spamowany przez wiele wyskakujących okienek, gdy aplikacja zostanie uruchomiona po raz pierwszy. Najlepszym rozwiązaniem jest oczekiwanie i zażądanie dostępu tylko w pierwszej chwili, gdy śledzenie oczu będzie używane przez aplikację. Na przykład po raz pierwszy zostanie wyświetlone menu zoptymalizowane pod kątem et. W rezultacie użytkownik będzie miał więcej kontekstu i mniej rozpraszania uwagi podczas dokonywania wyboru, zmniejszając prawdopodobieństwo, że będzie musiał go zmienić później.
Zagadnienia dotyczące biblioteki OpenXR
Jeśli używasz biblioteki OpenXR, te same reguły mają zastosowanie, ale interfejsy API, które wyzwalają żądanie dostępu, są nieco inne. Aplikacje OpenXR będą automatycznie żądać uprawnień po wywołaniu polecenia xrCreateSession podczas korzystania z wystąpienia z włączonym rozszerzeniem śledzenia oczu (XR_EXT_eye_gaze_interaction). Aby dowiedzieć się więcej na temat korzystania ze śledzenia oczu za pośrednictwem biblioteki OpenXR, odwiedź dokumentację rozszerzenia wzroku w specyfikacji OpenXR.
Kalibracja użytkownika
Gdy aplikacja ma dostęp do śledzenia oczu, następnym punktem kontrolnym jest kalibracja użytkownika. Podobnie jak w przypadku żądania dostępu, istnieje określony interfejs API, który może wyzwolić monit interfejsu użytkownika kalibracji po wywołaniu. Interfejs API to SpatialPointerPose::Eyes. Należy pamiętać, że jest to ten sam interfejs API używany do pobierania danych służących do pobierania danych wzroku w każdej ramce, więc w efekcie uzyskiwanie dostępu do danych śledzenia oczu wyzwala monit o kalibrację. W związku z tym aplikacje powinny czekać, aż rzeczywiście będą używać danych śledzenia oczu przed wywołaniem tego interfejsu API i ewentualnie wyzwoleniem monitu.
HoloLens buforuje kalibracje i automatycznie zamienia się, gdy wykryje, że skalibrowany użytkownik umieścił urządzenie. Dlatego ten monit będzie wyświetlany tylko dla użytkowników, którzy nie skalibrowali wzroku na urządzeniu. Jeśli nieskalibrated użytkownik naciska przycisk "Anuluj" z monitem o odrzucenie kalibracji, wzrok nie będzie dostępny dla żadnych aplikacji na urządzeniu. Urządzenie HoloLens zapamiętuje ich wybór i nie będzie monitowany ponownie, dopóki urządzenie nie zostanie usunięte i przywrócone. Chociaż jest to ważne dla celów prywatności, może to spowodować zamieszanie dla użytkowników, jeśli przypadkowo anulują monit, nie będą mogli korzystać ze śledzenia oczu w aplikacji.
Aby sprawdzić, czy bieżący użytkownik jest skalibrowany, wywołaj funkcję EyesPose::IsCalibrationValid. Jeśli bieżący użytkownik nie jest skalibrowany, najlepiej wrócić do interakcji, które nie są zależne od wzroku. Jeśli jednak spojrzenie oczu ma kluczowe znaczenie dla twojego środowiska i musisz upewnić się, że wszyscy użytkownicy są kalibrowani, możesz ręcznie wywołać aplikację kalibracji przy użyciu polecenia Launcher::LaunchUriForResultsAsync z ciągiem "ms-hololenssetup://EyeTracking".
using namespace winrt::Windows::System::Launcher;
using namespace winrt::Windows::Foundation;
winrt::Windows::System::LauncherOptions options;
auto package = winrt::Windows::ApplicationModel::Package::Current();
options.TargetApplicationPackageFamilyName(L"Microsoft.HoloLensSetup_8wekyb3d8bbwe");
winrt::Windows::System::Launcher::LaunchUriForResultsAsync(winrt::Windows::Foundation::Uri(L"ms-hololenssetup://EyeTracking"), options);
LaunchUriForResultsAsync jest elementem równorzędnym bardziej znanego interfejsu API LaunchUriAsync, który został już sugerowany jako metoda uruchamiania aplikacji kalibracji. Jednak metoda LaunchUriAsync nie gwarantuje powrotu do aplikacji po zakończeniu kalibracji. W większości przypadków po prostu powróci do powłoki. Interfejs API LaunchUriForResultsAsync gwarantuje powrót do aplikacji i dlatego jest znacznie lepszym środowiskiem dla użytkownika.
Parametr LaunchUriForResultsAsync wymaga dodatkowego parametru "options" z właściwością "TargetApplicationPackageFamilyName" ustawioną zgodnie z aplikacją Instalatora urządzenia HoloLens. Jeśli kiedykolwiek potrzebujesz ciągu nazwy rodziny pakietów dla aplikacji zainstalowanej na urządzeniu HoloLens, możesz ją znaleźć w sekcji "Aplikacje: zainstalowane aplikacje" w portalu urządzeń z systemem Windows w obszarze "PackageRelativeId". Wystarczy usunąć element "! Znaki aplikacji z końca ciągu.
Aplikacje nigdy nie powinny uruchamiać kalibracji wzroku automatycznie i bez interakcji użytkownika. Podobnie jak w przypadku żądania dostępu, zalecamy znalezienie odpowiedniej lokalizacji w interfejsie użytkownika, w której można wyświetlić stan kalibracji, przekazać wartość śledzenia oczu dla aplikacji i udostępnić użytkownikowi przycisk do samodzielnego uruchomienia kalibracji.
Zagadnienia dotyczące biblioteki OpenXR
Jeśli używasz biblioteki OpenXR, te same wzorce mają zastosowanie, ale interfejs API, który wyzwala monit o kalibrację, jest nieco inny. W usłudze OpenXR monit zostanie wyzwolony dla nienalibowanych użytkowników przy pierwszym wywołaniu xrSyncActions z włączoną akcją wzroku. Aby dowiedzieć się więcej na temat korzystania ze śledzenia oczu za pośrednictwem biblioteki OpenXR, odwiedź dokumentację rozszerzenia wzroku w specyfikacji OpenXR.