![](https://habrastorage.org/webt/vu/ph/2k/vuph2k-secvjgodpwhujnfl0tpq.jpeg)
Скоро будет год, как мы выпустили продукт с Custom’ной калибровкой Eye-tracker’а на борту. К сожалению, по разным причинам, все никак не получалось добить эту статью. Однако, недавно произошел забавный случай, который побудил закончить начатое. Но, обо всем по порядку. Надеюсь, кому-нибудь все-таки пригодится наш опыт, несмотря на то, что пост получился сыроватым.
Если кратко, Eye-tracker – это устройство, позволяющие отслеживать направление взгляда, а также положение глаз и головы.
У Eye-tracker’ов довольно много сфер применения, одной из таких – является индустрия компьютерных игр (немного подробнее).
Зачастую, детекция взгляда отвечает за второстепенные (вспомогательные), но немаловажные действия в играх:
- перемещение камеры;
- прицеливание;
- выделение объектов для взаимодействия;
- выбор оружия;
- автоматический вызов паузы при потере взгляда;
- прочие.
![](https://habrastorage.org/webt/sg/p-/dc/sgp-dctnwmlt3w-iddzszgijitq.png)
В большинстве случаев, стандартной калибровки (речь пойдет об устройстве Tobii Eye Tracker 4C) хватает для комфортного использования Eye Track’ера.
![](https://habrastorage.org/webt/iq/if/bk/iqifbkpuui38hrpl3h9veurk4pa.gif)
![](https://habrastorage.org/webt/5j/gw/l0/5jgwl0edy-oimimdf9vnpf5hv14.png)
Но, к сожалению, для наших целей, точности устройства, достигающейся стандартной калибровкой недостаточно, поскольку, в нашем проекте взгляд — это основная механика управления.
![](https://habrastorage.org/webt/dx/ar/jz/dxarjzabd4uz9vy3mru3vfc3km8.png)
![](https://habrastorage.org/webt/u-/cb/lm/u-cblmjtpqyqq-1-jxprlwyjwsu.png)
![](https://habrastorage.org/webt/ey/3e/gw/ey3egwsmopf7ymrc5kpvnuqpjdo.png)
Из всего вышесказанного, сформировалась задача: улучшить стандартную калибровку;
условия: устройство Tobii Eye Tracker 4C, язык разработки – C# (WPF).
Вроде бы решение на поверхности: хочешь большей точности – добавь больше калибровочных точек, но не так все просто.
Tobii AB имеет довольно много инструментов для работы со своими девайсами. Радости не было предела, когда был обнаружен Tobii Pro SDK, в котором есть все плюшки для работы с калибровкой, но как выяснилось позже, данный SDK не пригоден для работы конкретно с моделью eye tracker’а, которая имеется у нас (хотя странно, что детекция взгляда устройством при использовании данного SDK все же присутствовала). Пришлось взять инструменты попроще – Tobii.EyeX.Client.
Эмпирическим путем было выявлено оптимальное количество точек калибровки и их расположение: матрица 4x3 с расположенными 12ю калибровочными точками (каждая в центре ячейки).
Также эмпирическим путем были найдены следующие параметры:
- время на калибровку по одной калибровочной точке – 3 сек;
- индекс рассматриваемой точки – 5 (если индекс получаемой с устройства точки кратен данному, то учитываем ее при расчетах калибровки);
- максимально допустимое отклонение от калибровочной точки (px), вычисляется по формуле: где и – ширина и высота ячейки калибровочной матрицы соответственно
Алгоритм калибровки (прост до безумия)
Калибровка производится последовательно, по каждой ячейке калибровочной матрицы:
- если расстояние, между текущей калибровочной точкой и точкой, получаемой с устройства меньше, максимально допустимого отклонения, то такая точка (получаемая с устройства) попадает в коллекцию для дальнейшей обработки, иначе – калибровка по текущей ячейке сбрасывается до исходного состояния (и все по новой);
- после того, как время на калибровку по одной калибровочной точке исчерпано, получаем усредненное значение смещения по собранным ранее данным.
![](https://habrastorage.org/webt/z_/lp/td/z_lptdz-ygjosn4wqneara1m7cs.png)
![](https://habrastorage.org/webt/4z/fj/j1/4zfjj1dpywqdnrzejj2aketqeqc.png)
По завершению калибровки имеем коллекцию из 12ти усредненных значений смещений по регионам (ячейкам матрицы).
![](https://habrastorage.org/webt/mi/u3/93/miu393yf7i9pohzflsofbfhata0.gif)
![](https://habrastorage.org/webt/b1/df/bh/b1dfbhfb12wf-gqvrnz3_z9ewpg.png)
Использование (еще проще)
- определяем, в какой регион попадает точка, получаемая с устройства;
- смещаем точку, получаемую с устройства, на усредненное значение смещения в данном регионе.
Таким образом, удалось программным способом повысить точность устройства Tobii Eye Tracker 4C (сделав надстройку над стандартной калибровкой).
К сожалению, из-за договора о неразглашении, я не могу указать ни название ПО, ни выложить исходники или скрины. Благо хоть алгоритмом разрешили поделиться. Надеюсь, что кому-нибудь пост все же будет полезным.
В статье приведено максимально простое описание основного процесса калибровки. Помимо этого, происходит куча еще чего:
- усреднение значения точки с предыдущим (для плавности);
- проверка выхода за границы экрана;
- отслеживание потери взгляда;
- отслеживание изменения положения глаз в пространстве;
- отслеживание статуса Eye Tracker’а;
- отслеживание изменения разрешения экрана;
- отслеживание отмены калибровки;
- рандомный выбор типа калибровочных меток;
- и многое другое.
А вот и то самое событие, которое способствовало «завершению» статьи: по какому-то немыслимому стечению обстоятельств, моему другу (из предыдущего поста) довелось вживую пообщаться с разработчиком из Tobii AB. В ходе разговора, разработчик упомянул о неидеальности стандартной калибровки и что наши усилия были не напрасны.
![](https://habrastorage.org/webt/16/0k/_t/160k_tr2znk1sjcdww46hiuw_ci.jpeg)
datacompboy
Custom'ная calibrate'овка Eye tracker'а в home'ашних condition'ах.