
Скоро будет год, как мы выпустили продукт с 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), вычисляется по формуле:
гдеи
– ширина и высота ячейки калибровочной матрицы соответственно
Алгоритм калибровки (прост до безумия)
Калибровка производится последовательно, по каждой ячейке калибровочной матрицы:
- если расстояние, между текущей калибровочной точкой и точкой, получаемой с устройства меньше, максимально допустимого отклонения, то такая точка (получаемая с устройства) попадает в коллекцию для дальнейшей обработки, иначе – калибровка по текущей ячейке сбрасывается до исходного состояния (и все по новой);
- после того, как время на калибровку по одной калибровочной точке исчерпано, получаем усредненное значение смещения по собранным ранее данным.


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


Использование (еще проще)
- определяем, в какой регион попадает точка, получаемая с устройства;
- смещаем точку, получаемую с устройства, на усредненное значение смещения в данном регионе.
Таким образом, удалось программным способом повысить точность устройства Tobii Eye Tracker 4C (сделав надстройку над стандартной калибровкой).
К сожалению, из-за договора о неразглашении, я не могу указать ни название ПО, ни выложить исходники или скрины. Благо хоть алгоритмом разрешили поделиться. Надеюсь, что кому-нибудь пост все же будет полезным.
В статье приведено максимально простое описание основного процесса калибровки. Помимо этого, происходит куча еще чего:
- усреднение значения точки с предыдущим (для плавности);
- проверка выхода за границы экрана;
- отслеживание потери взгляда;
- отслеживание изменения положения глаз в пространстве;
- отслеживание статуса Eye Tracker’а;
- отслеживание изменения разрешения экрана;
- отслеживание отмены калибровки;
- рандомный выбор типа калибровочных меток;
- и многое другое.
А вот и то самое событие, которое способствовало «завершению» статьи: по какому-то немыслимому стечению обстоятельств, моему другу (из предыдущего поста) довелось вживую пообщаться с разработчиком из Tobii AB. В ходе разговора, разработчик упомянул о неидеальности стандартной калибровки и что наши усилия были не напрасны.

