Генерация событий для сайтов, контролируемых жестами
Я очень рад, что получил возможность работать на веб-сайте, основанном на жестах. У меня есть несколько идей для этого: ссылка
Я посетил много веб-сайтов и погуглил, Wikipedia и gitHub также не сильно помогли. Не так много информации, поскольку эти технологии находятся на зарождающейся стадии. Я думаю, что мне придется использовать некоторые JS для этого проекта
- жест.js (наш пользовательский код JavaScript)
- reve.js (Рамка для слайд-шоу)
Мои вопросы: как жесты генерируют события, как мой JavaScript взаимодействует с моей веб-камерой? Должен ли я использовать некоторые API или алгоритмы?
Я не прошу код. Я просто спрашиваю механизм, или некоторые ссылки, предоставляющие важную информацию, подойдут. Я серьезно считаю, что если точность этой технологии может быть улучшена, эта технология может творить чудеса в ближайшем будущем.
2 ответа
Чтобы включить жестовые взаимодействия в веб-приложении, вы можете использовать navigator.getUserMedia() для получения видео с локальной веб-камеры, периодически помещать данные видеокадра в элемент canvas и затем анализировать изменения между кадрами.
Доступно несколько библиотек жестов и демонстраций JavaScript (в том числе красивый контроллер слайдов). Для отслеживания лица / головы вы можете использовать такие библиотеки, как headtrackr.js: пример по адресу http://simpl.info/head trackr.
Сейчас я немного играю с этим, поэтому из того, что я понял, самая базовая техника:
- Вы запрашиваете использование веб-камеры пользователя, чтобы снять видео.
- Когда будет дано разрешение, создайте холст, в который можно поместить видео.
- Вы используете фильтр (черный и белый) на видео.
- Вы помещаете некоторые контрольные точки в рамку холста (небольшую область, в которой зарегистрированы все цвета пикселей в нем)
- вы начинаете прикреплять функцию для каждого кадра (в целях пояснения я покажу только жесты влево и вправо)
На каждом кадре:
- Если кадр первый (F0), продолжайте
- Если нет: мы вычитаем пиксели текущего кадра (Fn) из предыдущего
- если не было движения между Fn и F(n-1), все пиксели будут черными
- если есть, вы увидите разницу Delta = Fn - F(n-1) в виде белых пикселей
- Затем вы можете проверить контрольные точки, для которых подсвечиваются области, и сохранить их ( **)x = DeltaN
Повторяйте те же операции, пока у вас не будет двух или более переменных Deltas, и вы вычтете контрольные точки DeltaN из контрольных точек Delta(n-1), и у вас будет вектор
- ( **)x = DeltaN
- (**) х = дельта (N-1)
- (+2) x = Дельта N - Дельта (N-1)
Теперь вы можете проверить, является ли вектор положительным или отрицательным, или проверить, превосходят ли значения какое-либо значение по вашему выбору.
if positive on x and value > 5
и вызвать событие, а затем прослушать его:
$(document).trigger('MyPlugin/MoveLeft', values)
$(document).on('MyPlugin/MoveLeft', doSomething)
Вы можете значительно повысить точность, кэшируя векторы или добавляя их и вызывая событие, только когда значения вектора становятся разумным значением.
Вы также можете ожидать фигуру на своих первых вычитаниях и пытаться отобразить "руку" или "коробку" и прослушать изменения координат фигуры, но помните, что жесты в 3D и анализ 2D, поэтому та же самая фигура может изменить во время движения.
Вот более точное объяснение. Надеюсь, мое объяснение помогло.