다음을 통해 공유


시선 추적 액세스 및 보정 관리

HoloLens 2 대한 시선 추적은 사용자 상호 작용을 과충전하는 강력한 기능을 제공합니다. 그러나 앱에서 시선 추적이 작동하려면 성공적으로 완료해야 하는 두 가지 사용자 검사점이 있습니다. 두 가지 검사점은 (a) 앱에 대한 시선 추적 액세스를 승인하고 (b) 디바이스에서 시선 추적 보정을 완료하는 것입니다. 시스템은 필요에 따라 자동으로 이 작업을 완료하라는 메시지를 표시하지만 사용자가 실수로 무언가를 거절하고 중단될 수 있습니다. 이 문서에서는 시선 추적 검사점 탐색 및 필요할 때 사용자가 다시 시도하도록 돕는 모범 사례를 간략하게 설명하여 애플리케이션에서 원활하고 품질이 좋은 환경을 보장합니다.

액세스 요청

시선 추적을 활용하려면 앱이 먼저 액세스를 요청해야 합니다. 이는 시선 응시 개발 가이드에 설명된 EyesPose::RequestAccessAsync 호출을 통해 수행됩니다. 이 함수는 시스템 검사 트리거하여 애플리케이션에서 시선 응시 액세스를 사용할 수 있는지 여부를 확인합니다. 설치 후 첫 번째 액세스 요청에서 사용자에게 권한 대화 상자가 표시됩니다. "예"를 클릭하면 함수가 GazeInputAccessStatus::Allowed를 반환하고 사용자 환경으로 이동할 수 있습니다. 그러나 사용자가 "아니요"를 선택하면 함수 는 GazeInputAccessStatus::D eniedByUser를 반환합니다.

HoloLens 2 ET 권한 대화 상자 이미지

액세스 요청 대화 상자는 애플리케이션의 첫 번째 시작에 한 번만 표시됩니다. 사용자가 선택한 후에는 시스템에서 기본 설정을 기억하고 해당 로그인한 사용자에 대해 모든 향후 액세스 요청에 자동으로 적용합니다. 사용자가 나중에 기본 설정을 변경하려는 경우 HoloLens '설정' 앱의 '개인 정보' 페이지의 '앱 권한' 섹션을 통해 이 작업을 수행할 수 있습니다. 기본 설정은 끈적거리기 때문에 사용자는 불행히도 시선 추적이 꺼져 있고 이를 해결하는 방법을 모를 수 있습니다. 시선 추적이 앱 환경의 중요한 부분이며 시선 추적 액세스가 거부되었음을 감지하는 경우 설정 앱을 올바른 페이지로 직접 시작하여 사용자를 도울 수 있습니다. 이 작업은 "ms-settings:privacy-eyetracker" 문자열을 사용하여 Launcher::LaunchUriAsync 를 호출하여 수행됩니다.

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

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

설정 앱을 자동으로 시작하거나 사용자에게 반복적으로 메시지를 표시하지 않아야 합니다. 대신 UI에서 ET 액세스의 현재 상태를 전달하고, 애플리케이션에 대한 시선 추적 값을 설명하고, 사용자가 직접 시작할 수 있는 단추를 제공할 수 있는 관련 위치를 찾습니다.

액세스 요청 지연

실수로 액세스 요청을 거부하는 일반적인 이유는 앱이 처음 시작될 때 사용자가 여러 팝업으로 스팸 처리되기 때문입니다. 여기서 모범 사례는 앱에서 시선 추적을 사용하는 첫 번째 순간에만 액세스를 대기하고 요청하는 것입니다. 예를 들어 ET 최적화 메뉴가 처음 나타납니다. 결과적으로 사용자는 선택한 동안 더 많은 컨텍스트와 덜 산만해지므로 나중에 변경해야 할 가능성이 줄어듭니다.

OpenXR에 대한 고려 사항

OpenXR을 사용하는 경우 동일한 규칙이 적용되지만 액세스 요청을 트리거하는 API는 약간 다릅니다. OpenXR 애플리케이션은 눈 추적 확장(XR_EXT_eye_gaze_interaction)이 사용하도록 설정된 instance 사용할 때 xrCreateSession을 호출한 후 자동으로 권한을 요청합니다. OpenXR을 통해 시선 추적을 사용하는 방법에 대한 자세한 내용은 OpenXR 사양의 시선 응시 확장 설명서를 참조하세요.

사용자 보정

앱에서 시선 추적에 액세스할 수 있으면 다음 검사점은 사용자 보정입니다. 액세스 요청과 마찬가지로 호출 시 보정 UI 프롬프트를 트리거할 수 있는 특정 API가 있습니다. API는 SpatialPointerPose::Eyes입니다. 이는 각 프레임에서 시선 응시 포즈 데이터를 검색하는 데 사용되는 것과 동일한 API이므로 실제로 시선 추적 데이터에 액세스하면 보정 프롬프트가 트리거됩니다. 이 때문에 애플리케이션은 이 API를 호출하고 프롬프트를 트리거하기 전에 실제로 시선 추적 포즈 데이터를 사용할 때까지 기다려야 합니다.

HoloLens 2 ET 보정 프롬프트 이미지

HoloLens는 보정을 캐시하고 보정된 사용자가 디바이스를 켜 놓은 것을 감지하면 자동으로 교환됩니다. 따라서 이 프롬프트는 디바이스에서 시선 응시를 보정하지 않은 사용자에 대해서만 표시됩니다. 보정을 거부하라는 프롬프트에서 보정되지 않은 사용자가 "취소"를 누르면 디바이스의 모든 애플리케이션에서 시선 응시를 사용할 수 없습니다. HoloLens는 선택한 항목을 기억하며 디바이스를 제거하고 다시 켜기 전까지는 다시 메시지를 표시하지 않습니다. 개인 정보 보호를 위해 중요하지만 실수로 프롬프트를 취소한 다음 애플리케이션에서 시선 추적을 사용할 수 없는 경우 사용자에게 혼동을 줄 수 있습니다.

현재 사용자가 보정되었는지 여부를 검사 하려면 EyesPose::IsCalibrationValid를 호출합니다. 현재 사용자가 보정되지 않은 경우 시선 응시에 종속되지 않는 상호 작용으로 대체해야 합니다. 그러나 시선 응시가 환경에 중요하고 모든 사용자가 보정되었는지 확인해야 하는 경우 Launcher::LaunchUriForResultsAsync 를 사용하여 "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는 보정 앱을 시작하는 방법으로 이미 제안된 더 잘 알려진 LaunchUriAsync API의 형제입니다. 그러나 LaunchUriAsync 메서드는 보정이 완료된 후 애플리케이션으로의 반환을 보장 하지 않습니다 . 대부분의 경우 단순히 셸로 돌아갑니다. LaunchUriForResultsAsync API 애플리케이션에 대한 반환을 보장하므로 사용자에게 훨씬 더 나은 환경입니다.

LaunchUriForResultsAsync에는 HoloLens 설치 애플리케이션과 일치하도록 설정된 'TargetApplicationPackageFamilyName' 속성이 있는 추가 'options' 매개 변수가 필요합니다. HoloLens에 설치된 애플리케이션에 대한 패키지 패밀리 이름 문자열이 필요한 경우 Windows Device Portal의 "앱: 설치된 앱" 섹션에서 "PackageRelativeId"에서 찾을 수 있습니다. "! 문자열 끝에 있는 App" 문자입니다.

Windows 디바이스 포트에 설치된 앱 페이지의 일부 이미지

앱은 사용자 상호 작용 없이 시선 응시 보정을 자동으로 시작해서는 안 됩니다. 액세스 요청과 마찬가지로 보정 상태 표시하고, 애플리케이션에 대한 시선 추적 값을 전달하고, 사용자가 직접 보정을 시작할 수 있는 단추를 제공할 수 있는 관련 위치를 UI에서 찾는 것이 좋습니다.

OpenXR에 대한 고려 사항

OpenXR을 사용하는 경우 동일한 패턴이 적용되지만 보정 프롬프트를 트리거하는 API는 약간 다릅니다. OpenXR에서 눈 응시 동작을 사용하도록 설정된 xrSyncActions에 대한 첫 번째 호출에서 비정형 사용자에 대해 프롬프트가 트리거됩니다. OpenXR을 통해 시선 추적을 사용하는 방법에 대한 자세한 내용은 OpenXR 사양의 시선 응시 확장 설명서를 참조하세요.