Partilhar via


Gerir o Acesso e a Calibragem do Controlo Ocular

O controlo ocular no HoloLens 2 fornece capacidades avançadas para sobrecarregar as interações dos utilizadores. No entanto, existem dois pontos de verificação de utilizador que têm de ser concluídos com êxito para que o controlo ocular funcione na sua aplicação. Os dois pontos de verificação estão (a) a aprovar o acesso ao controlo ocular da sua aplicação e (b) a concluir a calibragem do controlo ocular no dispositivo. O sistema pede automaticamente para os concluir conforme necessário, mas é possível que o utilizador recuse algo acidentalmente e fique bloqueado. Este documento descreve as melhores práticas para navegar nos pontos de verificação de controlo ocular e ajudar o utilizador a tentar novamente quando necessário, garantindo uma experiência suave e de qualidade com a sua aplicação.

Pedido de acesso

Para utilizar o controlo ocular, a sua aplicação tem primeiro de pedir acesso. Isto é feito através de uma chamada para EyesPose::RequestAccessAsync, que está documentada no guia de desenvolvimento de olhar para os olhos. Esta função aciona uma verificação do sistema para ver se o acesso visual está disponível para a sua aplicação. No primeiro pedido de acesso após a instalação, será pedido ao utilizador uma caixa de diálogo de permissões. Se clicarem em "Sim", a função devolverá GazeInputAccessStatus::Allowed e poderá seguir em frente com a sua experiência. No entanto, se o utilizador selecionar "Não", a função devolverá GazeInputAccessStatus::D eniedByUser.

Imagem da caixa de diálogo permissões et HoloLens 2

A caixa de diálogo de pedido de acesso só é apresentada uma vez, na primeira iniciação da aplicação. Assim que o utilizador tiver feito a sua escolha, o sistema memoriza a sua preferência e aplica-a a todos os pedidos de acesso futuros automaticamente para esse utilizador com sessão iniciada. Se o utilizador quiser alterar a sua preferência mais tarde, pode fazê-lo através da secção "Permissões da aplicação" da página "Privacidade" na aplicação "Definições" do HoloLens. Uma vez que a preferência é autocolante, o utilizador pode, infelizmente, entrar num estado em que o controlo ocular está desativado e não sabe como corrigi-lo. Se o controlo ocular for uma parte importante da sua experiência de aplicação e detetar que o acesso ao controlo ocular foi negado, pode ajudar o utilizador ao iniciar diretamente a aplicação de definições na página correta. Isto é feito através de uma chamada para Launcher::LaunchUriAsync com a cadeia "ms-settings:privacy-eyetracker".

using namespace winrt::Windows::System::Launcher;
using namespace winrt::Windows::Foundation;

LaunchUriAsync(Uri(L"ms-settings:privacy-eyetracker"));

Deve evitar iniciar a aplicação de definições automaticamente ou pedir repetidamente ao utilizador. Em vez disso, localize uma localização relevante na sua IU onde possa comunicar o estado atual do acesso ET, explicar o valor do controlo ocular da sua aplicação e fornecer um botão para o utilizador o iniciar.

Atrasar o pedido de acesso

Um motivo comum para recusar acidentalmente o pedido de acesso é o utilizador ser spamado por vários pop-ups quando a aplicação é iniciada pela primeira vez. A melhor prática aqui é esperar e pedir acesso apenas no primeiro momento em que o controlo ocular será utilizado pela sua aplicação. Por exemplo, a primeira vez que um menu otimizado para ET é apresentado. Como resultado, o utilizador terá mais contexto e menos distrações ao fazer a sua escolha, reduzindo a possibilidade de precisar de alterá-la mais tarde.

Considerações sobre o OpenXR

Se estiver a utilizar o OpenXR, aplicam-se as mesmas regras, mas as APIs que acionam o pedido de acesso são um pouco diferentes. As aplicações OpenXR pedirão automaticamente permissões após a chamada para xrCreateSession ao utilizar uma instância que tenha a extensão de controlo ocular (XR_EXT_eye_gaze_interaction) ativada. Para saber mais sobre como utilizar o controlo ocular através do OpenXR, visite a documentação da extensão eye gaze na especificação OpenXR.

Calibragem do utilizador

Assim que a aplicação tiver acesso ao controlo ocular, o próximo ponto de verificação é a calibragem do utilizador. Semelhante ao pedido de acesso, existe uma API específica que pode acionar um pedido de IU de calibragem quando chamado. A API é SpatialPointerPose::Eyes. Tenha em atenção que esta é a mesma API utilizada para obter dados de pose de olhar para os olhos em cada frame, pelo que, com efeito, o acesso aos dados de controlo ocular aciona o pedido de calibragem. Por este motivo, as aplicações devem aguardar até que pretendam realmente utilizar os dados de pose de controlo ocular antes de chamar esta API e, possivelmente, acionar o pedido.

Imagem do pedido de calibragem et HoloLens 2

O HoloLens coloca as calibrações em cache e troca automaticamente quando deteta que um utilizador calibrado colocou o dispositivo. Por isso, este pedido só será apresentado para utilizadores que não tenham calibrado o olhar sobre o dispositivo. Se um utilizador não calibrado premir "Cancelar" na linha de comandos para recusar a calibragem, o respetivo olhar não estará disponível para quaisquer aplicações no dispositivo. O HoloLens lembra-se da seleção e não volta a pedir até que o dispositivo seja removido e colocado novamente. Embora seja importante para fins de privacidade, isto pode criar confusão para os utilizadores se cancelarem acidentalmente o pedido e não conseguirem utilizar o controlo ocular na sua aplicação.

Para verificar se o utilizador atual está calibrado, chame EyesPose::IsCalibrationValid. Se o utilizador atual não estiver calibrado, idealmente, deve reverter para interações que não dependem do olhar atento. No entanto, se o olhar atento for fundamental para a sua experiência e precisar de garantir que todos os seus utilizadores estão calibrados, pode invocar manualmente a aplicação de calibragem com o Launcher::LaunchUriForResultsAsync com a cadeia "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 é um elemento colateral da API LaunchUriAsync mais conhecida, que já foi sugerida como um método para iniciar a aplicação de calibragem. No entanto, o método LaunchUriAsync não garante o regresso à sua aplicação após a conclusão da calibragem. Na maioria dos casos, irá simplesmente voltar à shell. A API LaunchUriForResultsAsync garante um regresso à sua aplicação e, por conseguinte, é uma experiência muito melhor para o utilizador.

LaunchUriForResultsAsync requer um parâmetro de "opções" adicional com a propriedade "TargetApplicationPackageFamilyName" definida para corresponder à aplicação de Configuração do HoloLens. Se alguma vez precisar da cadeia de nome da família de pacotes para uma aplicação instalada no HoloLens, pode encontrá-la na secção "Aplicações: Aplicações instaladas" do Portal do Dispositivo Windows em "PackageRelativeId". Basta remover o "! Carateres da aplicação a partir do fim da cadeia.

Imagem de uma parte da página de aplicações instaladas no Windows Device Portsl

As aplicações nunca devem iniciar a calibragem de olhar para os olhos automaticamente e sem interação do utilizador. À semelhança do pedido de acesso, recomendamos que encontre uma localização relevante na sua IU onde possa mostrar o estado de calibragem, comunicar o valor do controlo ocular da sua aplicação e fornecer um botão para o utilizador iniciar a calibragem.

Considerações sobre o OpenXR

Se estiver a utilizar o OpenXR, aplicam-se os mesmos padrões, mas a API que aciona o pedido de calibragem é um pouco diferente. No OpenXR, o pedido será acionado para utilizadores não calibrados na primeira chamada para xrSyncActions com uma ação de olhar atento ativada. Para saber mais sobre como utilizar o controlo ocular através do OpenXR, visite a documentação da extensão eye gaze na especificação OpenXR.