Toegang en kalibratie voor oogtracering beheren
Oogtracering op HoloLens 2 biedt krachtige mogelijkheden voor supercharging van gebruikersinteracties. Er zijn echter twee controlepunten van gebruikers die moeten worden voltooid om oogtracering te laten werken in uw app. De twee controlepunten zijn (a) het goedkeuren van toegang tot oogtracering voor uw app en (b) het voltooien van de kalibratie van ogentracering op het apparaat. Het systeem vraagt automatisch om deze indien nodig uit te voeren, maar het is mogelijk dat de gebruiker per ongeluk iets weigert en vastloopt. Dit document bevat een overzicht van aanbevolen procedures voor het navigeren door de controlepunten voor ogentracering en het helpen van de gebruiker om het opnieuw te proberen wanneer dat nodig is, zodat uw toepassing soepel en kwalitatief goed verloopt.
Toegangsaanvraag
Als u oogtracering wilt gebruiken, moet uw app eerst toegang aanvragen. Dit wordt gedaan via een aanroep naar EyesPose::RequestAccessAsync, die wordt beschreven in de handleiding voor het ontwikkelen van ogenkijken. Met deze functie wordt een systeemcontrole geactiveerd om te zien of de toegang tot de ogenkijken beschikbaar is voor uw toepassing. Bij de eerste toegangsaanvraag na de installatie krijgt de gebruiker een machtigingsdialoogvenster. Als ze op Ja klikken, retourneert de functie GazeInputAccessStatus::Allowed en kunt u verdergaan met uw ervaring. Als de gebruiker echter Nee selecteert, retourneert de functie GazeInputAccessStatus::D eniedByUser.
Het dialoogvenster toegangsaanvraag wordt slechts eenmaal weergegeven, bij de eerste keer dat uw toepassing wordt gestart. Zodra de gebruiker een keuze heeft gemaakt, onthoudt het systeem zijn voorkeur en past het deze automatisch toe op alle toekomstige toegangsaanvragen voor die aangemelde gebruiker. Als de gebruiker zijn voorkeur later wil wijzigen, kan dit via de sectie 'App-machtigingen' van de pagina 'Privacy' in de HoloLens-app 'Instellingen'. Omdat de voorkeur plakkerig is, kan de gebruiker helaas in een toestand komen waarin oogtracering is uitgeschakeld en ze niet weten hoe ze dit moeten oplossen. Als oogtracering een belangrijk onderdeel van uw app-ervaring is en u detecteert dat de toegang tot oogtracering is geweigerd, kunt u de gebruiker helpen door de instellingen-app rechtstreeks op de juiste pagina te starten. Dit wordt gedaan via een aanroep naar Launcher::LaunchUriAsync met de tekenreeks 'ms-settings:privacy-eyetracker'.
using namespace winrt::Windows::System::Launcher;
using namespace winrt::Windows::Foundation;
LaunchUriAsync(Uri(L"ms-settings:privacy-eyetracker"));
U moet voorkomen dat de app Instellingen automatisch wordt gestart of dat de gebruiker herhaaldelijk wordt gevraagd. Zoek in plaats daarvan een relevante locatie in uw gebruikersinterface waar u de huidige status van ET-toegang kunt communiceren, de waarde van oogtracering voor uw toepassing kunt uitleggen en een knop kunt opgeven voor de gebruiker om deze zelf te starten.
De toegangsaanvraag vertragen
Een veelvoorkomende reden voor het per ongeluk weigeren van de toegangsaanvraag is dat de gebruiker wordt spamd door meerdere pop-ups wanneer de app voor het eerst wordt gestart. Een best practice hier is om te wachten en toegang alleen aan te vragen op het eerste moment dat oogtracering door uw app wordt gebruikt. Bijvoorbeeld de eerste keer dat een voor ET geoptimaliseerd menu wordt weergegeven. Als gevolg hiervan heeft de gebruiker meer context en minder afleiding tijdens het maken van een keuze, waardoor de kans kleiner is dat deze later moet worden gewijzigd.
Overwegingen voor OpenXR
Als u OpenXR gebruikt, zijn dezelfde regels van toepassing, maar de API's die de toegangsaanvraag activeren, zijn iets anders. OpenXR-toepassingen vragen automatisch machtigingen aan na de aanroep van xrCreateSession wanneer een exemplaar wordt gebruikt waarvoor de oogtraceringsextensie (XR_EXT_eye_gaze_interaction) is ingeschakeld. Voor meer informatie over het gebruik van oogtracering via OpenXR, gaat u naar de documentatie voor de eye-gaze-extensie in de OpenXR-specificatie.
Gebruikerskalibratie
Zodra uw app toegang heeft tot oogtracering, is het volgende controlepunt de gebruikerskalibratie. Net als bij de toegangsaanvraag is er een specifieke API die een prompt voor de kalibratie van de gebruikersinterface kan activeren wanneer deze wordt aangeroepen. De API is SpatialPointerPose::Eyes. Houd er rekening mee dat dit dezelfde API is die wordt gebruikt voor het ophalen van gegevens over de houding van de ogen op elk frame. In feite wordt de kalibratieprompt geactiveerd door toegang tot de oogtraceringsgegevens. Daarom moeten toepassingen wachten totdat ze daadwerkelijk van plan zijn om de oogtraceringsgegevens te gebruiken voordat ze deze API aanroepen en mogelijk de prompt activeren.
HoloLens slaat kalibraties in de cache op en wisselt automatisch wanneer wordt gedetecteerd dat een gekalibreerde gebruiker het apparaat heeft ingeschakeld. Deze prompt wordt dus alleen weergegeven voor gebruikers die hun oogblikken op het apparaat niet hebben gekalibreerd. Als een niet-gekalibreerde gebruiker op Annuleren drukt bij de prompt om de kalibratie te weigeren, is de blik op de ogen niet beschikbaar voor toepassingen op het apparaat. HoloLens onthoudt de selectie en vraagt niet opnieuw totdat het apparaat is verwijderd en weer wordt ingeschakeld. Hoewel dit belangrijk is voor privacydoeleinden, kan dit verwarring veroorzaken voor gebruikers als ze per ongeluk de prompt annuleren en vervolgens geen oogtracering kunnen gebruiken in uw toepassing.
Als u wilt controleren of de huidige gebruiker is gekalibreerd, roept u EyesPose::IsCalibrationValid aan. Als de huidige gebruiker niet is gekalibreerd, moet u in het ideale geval terugvallen op interacties die niet afhankelijk zijn van oogblikken. Als oogblikken echter essentieel is voor uw ervaring en u ervoor moet zorgen dat al uw gebruikers zijn gekalibreerd, kunt u de kalibratie-app handmatig aanroepen met launcher::LaunchUriForResultsAsync met de tekenreeks '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 is een op hetzelfde niveau als de bekendere LaunchUriAsync-API, die al is voorgesteld als methode voor het starten van de kalibratie-app. De methode LaunchUriAsync garandeert echter geen terugkeer naar uw toepassing nadat de kalibratie is voltooid. In de meeste gevallen keert deze gewoon terug naar de shell. De LaunchUriForResultsAsync-API garandeert een terugkeer naar uw toepassing en is daarom een veel betere ervaring voor de gebruiker.
LaunchUriForResultsAsync vereist een extra parameter 'options' met de eigenschap 'TargetApplicationPackageFamilyName' die overeenkomt met de HoloLens Setup-toepassing. Als u ooit de tekenreeks met de familienaam van het pakket nodig hebt voor een toepassing die op uw HoloLens is geïnstalleerd, kunt u deze vinden in de sectie 'Apps: geïnstalleerde apps' van de Windows-apparaatportal onder 'PackageRelativeId'. Verwijder gewoon de "! App-tekens van het einde van de tekenreeks.
Apps mogen nooit automatisch en zonder tussenkomst van de gebruiker de oogboogkalibratie starten. Net als bij de toegangsaanvraag raden we u aan een relevante locatie in uw gebruikersinterface te zoeken waar u de kalibratiestatus kunt weergeven, de waarde van oogtracering voor uw toepassing kunt communiceren en een knop kunt opgeven voor de gebruiker om zelf de kalibratie te starten.
Overwegingen voor OpenXR
Als u OpenXR gebruikt, zijn dezelfde patronen van toepassing, maar de API die de kalibratieprompt activeert, is iets anders. In OpenXR wordt de prompt geactiveerd voor niet-gecalibreerde gebruikers bij de eerste aanroep van xrSyncActions met een oogactie ingeschakeld. Voor meer informatie over het gebruik van oogtracering via OpenXR, gaat u naar de documentatie voor de eye-gaze-extensie in de OpenXR-specificatie.