Kalibracja oczu — MRTK2

Zrzut ekranu przedstawiający powiadomienie o kalibracji oczu

Omówienie

Jeśli śledzenie oczu jest podstawową częścią środowiska aplikacji, warto upewnić się, że kalibracja oczu użytkownika jest prawidłowa. Głównym powodem jego nieprawidłowej przyczyny jest to, że użytkownik zdecydował się pominąć kalibrację śledzenia oczu podczas umieszczania na urządzeniu.

Na tej stronie omówiono następujące kwestie:

  • Opisuje sposób wykrywania, że użytkownik jest kalibrowany wzrok
  • Przykładowy sposób wyzwalania powiadomienia użytkownika w celu poinstruowania użytkownika o konieczności przejścia przez kalibrację oczu
    • Automatyczne odrzucanie powiadomienia, jeśli kalibracja oczu stanie się prawidłowa
    • Ręczne odrzucanie powiadomienia, jeśli użytkownik zdecyduje się kontynuować bez kalibracji

Jak wykryć stan kalibracji oczu

Konfiguracja śledzenia oczu w zestawie narzędzi MRTK jest konfigurowana za pośrednictwem interfejsu IMixedRealityEyeGazeProvider .

Użycie elementu CoreServices.InputSystem.EyeGazeProvider zapewnia domyślną implementację dostawcy spojrzenia zarejestrowaną w zestawie narzędzi w czasie wykonywania. IMixedRealityEyeGazeProvider.IsEyeGazeValid zwraca wartość bool? null, jeśli żadne informacje z monitora oczu nie są jeszcze dostępne. Po odebraniu danych zwróci wartość true lub false, aby wskazać, że kalibracja śledzenia oczu użytkownika jest prawidłowa lub nieprawidłowa.

Powiadomienie o kalibracji próbki oczu — krok po kroku

  1. Otwórz przykładowy pakiet śledzenia oczu zestawu narzędzi MRTK (Assets/MRTK/Examples/Demos/EyeTracking)

  2. Załaduj scenę EyeTrackingDemo-00-RootScene.unity

  3. Zapoznaj się z usługą EyeCalibrationChecker:

    • W tej scenie mamy już przykład do wykrywania, czy bieżący użytkownik jest kalibrowany pod obiektem gry EyeCalibrationChecker. To po prostu rodziców kilka siatki tekstowe i ma kilka dodatkowych wyzwalaczy do mieszania powiadomienia w i na wyjęcie. Obejmuje to powolne zwiększanie rozmiaru i nieprzezroczystości aktywacji. Po odrzuceniu powiadomienia będzie powoli zmniejszać jego rozmiar i wynikać.

    • Dołączony do obiektu gry EyeCalibrationChecker jest skryptem EyeCalibrationChecker, który uwidacznia dwa zdarzenia aparatu Unity:

      • OnEyeCalibrationDetected()
      • OnNoEyeCalibrationDetected()
    • Te zdarzenia będą wyzwalane tylko wtedy, gdy stan kalibracji ulegnie zmianie. W związku z tym, jeśli użytkownik zdecyduje się odrzucić powiadomienie, powiadomienie nie będzie wyświetlane ponownie do momentu

      • Aplikacja zostanie uruchomiona ponownie
      • Wykryto prawidłowego użytkownika, a następnie nowy nienalibrated użytkownik umieścił urządzenie na urządzeniu
    • Aby przetestować, czy animacje i zdarzenia są wyzwalane poprawnie, skrypt EyeCalibrationChecker posiada flagę bool editorTestUserIsCalibrated . Na przykład podczas uruchamiania w edytorze Aparatu Unity można przetestować:

      1. Czy powiadomienie jest automatycznie wyświetlane po zmianie stanu kalibracji z wartości true na false
      2. To, czy automatycznie odrzuca powiadomienie po zmianie stanu z false na true.
    private bool? prevCalibrationStatus = null;
    ...

   void Update()
   {
      // Get the latest calibration state from the EyeGazeProvider
      bool? calibrationStatus = CoreServices.InputSystem?.EyeGazeProvider?.IsEyeCalibrationValid;

      ...

      if (calibrationStatus != null)
      {
         if (prevCalibrationStatus != calibrationStatus)
         {
            if (calibrationStatus == false)
            {
               OnNoEyeCalibrationDetected.Invoke();
            }
         else
         {
            OnEyeCalibrationDetected.Invoke();
         }

         prevCalibrationStatus = calibrationStatus;
      }
   }

Zobacz też