Pull to refresh

Custom’ная калибровка Eye-tracker’а

Level of difficultyMedium
Reading time3 min
Views2.5K


Скоро будет год, как мы выпустили продукт с Custom’ной калибровкой Eye-tracker’а на борту. К сожалению, по разным причинам, все никак не получалось добить эту статью. Однако, недавно произошел забавный случай, который побудил закончить начатое. Но, обо всем по порядку. Надеюсь, кому-нибудь все-таки пригодится наш опыт, несмотря на то, что пост получился сыроватым.

Если кратко, Eye-tracker – это устройство, позволяющие отслеживать направление взгляда, а также положение глаз и головы.

У Eye-tracker’ов довольно много сфер применения, одной из таких – является индустрия компьютерных игр (немного подробнее).

Зачастую, детекция взгляда отвечает за второстепенные (вспомогательные), но немаловажные действия в играх:

  • перемещение камеры;
  • прицеливание;
  • выделение объектов для взаимодействия;
  • выбор оружия;
  • автоматический вызов паузы при потере взгляда;
  • прочие.


В большинстве случаев, стандартной калибровки (речь пойдет об устройстве Tobii Eye Tracker 4C) хватает для комфортного использования Eye Track’ера.


Но, к сожалению, для наших целей, точности устройства, достигающейся стандартной калибровкой недостаточно, поскольку, в нашем проекте взгляд — это основная механика управления.



Из всего вышесказанного, сформировалась задача: улучшить стандартную калибровку;
условия: устройство Tobii Eye Tracker 4C, язык разработки – C# (WPF).

Вроде бы решение на поверхности: хочешь большей точности – добавь больше калибровочных точек, но не так все просто.

Tobii AB имеет довольно много инструментов для работы со своими девайсами. Радости не было предела, когда был обнаружен Tobii Pro SDK, в котором есть все плюшки для работы с калибровкой, но как выяснилось позже, данный SDK не пригоден для работы конкретно с моделью eye tracker’а, которая имеется у нас (хотя странно, что детекция взгляда устройством при использовании данного SDK все же присутствовала). Пришлось взять инструменты попроще – Tobii.EyeX.Client.

Эмпирическим путем было выявлено оптимальное количество точек калибровки и их расположение: матрица 4x3 с расположенными 12ю калибровочными точками (каждая в центре ячейки).

Также эмпирическим путем были найдены следующие параметры:

  • время на калибровку по одной калибровочной точке – 3 сек;
  • индекс рассматриваемой точки – 5 (если индекс получаемой с устройства точки кратен данному, то учитываем ее при расчетах калибровки);
  • максимально допустимое отклонение от калибровочной точки (px), вычисляется по формуле:

    $Math.Min(regionWidth, regionHeight) * 0.45$

    где $regionWidth$ и $regionHeight$ – ширина и высота ячейки калибровочной матрицы соответственно


Алгоритм калибровки (прост до безумия)


Калибровка производится последовательно, по каждой ячейке калибровочной матрицы:

  1. если расстояние, между текущей калибровочной точкой и точкой, получаемой с устройства меньше, максимально допустимого отклонения, то такая точка (получаемая с устройства) попадает в коллекцию для дальнейшей обработки, иначе – калибровка по текущей ячейке сбрасывается до исходного состояния (и все по новой);
  2. после того, как время на калибровку по одной калибровочной точке исчерпано, получаем усредненное значение смещения по собранным ранее данным.



По завершению калибровки имеем коллекцию из 12ти усредненных значений смещений по регионам (ячейкам матрицы).



Использование (еще проще)


  1. определяем, в какой регион попадает точка, получаемая с устройства;
  2. смещаем точку, получаемую с устройства, на усредненное значение смещения в данном регионе.

Таким образом, удалось программным способом повысить точность устройства Tobii Eye Tracker 4C (сделав надстройку над стандартной калибровкой).

К сожалению, из-за договора о неразглашении, я не могу указать ни название ПО, ни выложить исходники или скрины. Благо хоть алгоритмом разрешили поделиться. Надеюсь, что кому-нибудь пост все же будет полезным.

В статье приведено максимально простое описание основного процесса калибровки. Помимо этого, происходит куча еще чего:

  • усреднение значения точки с предыдущим (для плавности);
  • проверка выхода за границы экрана;
  • отслеживание потери взгляда;
  • отслеживание изменения положения глаз в пространстве;
  • отслеживание статуса Eye Tracker’а;
  • отслеживание изменения разрешения экрана;
  • отслеживание отмены калибровки;
  • рандомный выбор типа калибровочных меток;
  • и многое другое.

А вот и то самое событие, которое способствовало «завершению» статьи: по какому-то немыслимому стечению обстоятельств, моему другу (из предыдущего поста) довелось вживую пообщаться с разработчиком из Tobii AB. В ходе разговора, разработчик упомянул о неидеальности стандартной калибровки и что наши усилия были не напрасны.

Tags:
Hubs:
+6
Comments1

Articles