Microchip представила средство разработки hillstar для создания систем 3d распознавания жестов

Распознавание жестов движений на Android используя Tensorflow

Введение

В сегодняшние дни есть много разных способов взаимодействия со смартфонами: тач-скрин, аппаратные кнопки, сканер отпечатков пальцев, видео камера (например система распознавания лиц), D-PAD, кнопки на гарнитуре, и так далее.

Но что насчет использования жестов движений? Например быстрое перемещение телефона вправо или влево держа его в руке может очень точно отражать намерение перейти на следующую или предыдущую песню в плей-листе. Или же вы можете быстро перевернуть телефон верх ногами и потом назад для обновления контента приложения.

Внедрение такого взаимодействия выглядит многообещающим и буквально добавляет новое измерение в UX. Эта статья описывает как реализовать подобное используя машинное обучение и библиотеку Tensorflow для Android.

Описание

Давайте определимся с конечной целью. Хотелось бы чтоб смартфон распознавал быстрые движения влево и вправо. Также хотелось бы чтоб реализация была в Android библиотеке и ее можно было легко интегрировать в любое другое приложение. Жесты могут быть записаны на смартфоне используя несколько датчиков: акселерометр, гироскоп, магнитометр, и другие.

Позже набор записанных жестов может быть использован в алгоритмах машинного обучения для распознавания. Для записи данных будет разработано специальное приложение под Android. Препроцессинг и обучение будет производится на ПК в среде Jupyter Notebook используя язык Python и библиотеку TensorFlow.

Распознавание жестов будет реализовано в демонстрационном приложении с использованием результатов обучения. В конце, мы разработаем готовую к использования Android библиотеку для распознавания жестов, которая может быть легко интегрирована в другие приложения.

Наш план реализации:

  • Собрать данные на телефоне
  • Разработать и обучить нейронную сеть
  • Экспортировать нейронную сеть на смартфон
  • Разработать тестовое приложение для Android
  • Разработать Android библиотеку

Реализация

Подготовка данных

Для начала давайте определимся какие датчики и какой тип данных могут описать наши жесты. Похоже для точного описания этих жестов должны быть использованы и акселерометр и гироскоп.

Акселерометр очевидно измеряет ускорение и соответственно, перемещение:

Акселерометр имеет интересные нюанс — он измеряет не только ускорение непосредственно телефона, но также и ускорение свободного падения которое приблизительно равно 9.8 м/с2.

Это значит что величина вектора ускорения лежащего на на столе телефона будет равна 9.8. Такие значения не могут быть использованы напрямую и должны быть вычтены из значения вектора ускорения свободного падения.

Это непростая задача потому что она требует совместной обработки данных магнетометра и акселерометра. К счастью, Android имеет специальный датчик «Линейный Акселерометр» который производит необходимые расчеты и возвращает корректные значения.

Гироскоп, с другой стороны, измеряет вращение:Попробуем определить, какие значения будут коррелировать с нашими жестами. Очевидно, что в акселерометре (имеется ввиду линейный акселерометр) значения X и Y будут в достаточно большой степени описывать жесты.

Значение же Z акселерометра вряд ли будет зависеть от наших жестов. Что касается датчика гироскопа, кажется, что жесты слегка влияют на ось Z. Однако для упрощения реализации я предлагаю не включать его в расчет.

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

Таким образом, нам необходимо разработать Android-приложение, которое может записывать данные акселерометра.

Я разработал такое приложение. Вот скриншот записанного жеста «вправо»:

Как вы видите, оси X и Y очень сильно реагируют на жест. Ось Z также реагирует, но, как мы решили, она не будет включена в обработку. Вот жест «влево»:Обратите внимание, что значения X почти противоположны значениям из предыдущего жеста.

Еще одна вещь, которую нужно упомянуть, — это частота дискретизации данных. Она отражает то, как часто данные обновляются и напрямую влияет на объем данных за интервал времени. Еще одна вещь, которую следует учитывать — это продолжительность жестов.

Это значение, как и многие другие, следует выбирать эмпирически. Я установил, что продолжительность жестов длится не более 1 секунды, но, чтобы сделать значение более подходящим для расчетов, я округлил его до 1.28 секунды.

Выбранная частота обновления данных составляет 128 точек на 1.

28 секунды, что дает задержку в 10 миллисекунд (1.28 / 128). Это значения должно быть передано в метод registerListener.

Идея состоит в том, чтобы обучить нейронную сеть распознаванию таких сигналов в потоке данных с акселерометра. Итак, дальше нам нужно записать в файлы много семплов жестов. Конечно, один и тот же тип жестов (вправо или влево) должен быть помечен одним и тем-же же тегом.

Трудно сказать заранее, сколько образцов необходимо для обучения сети, но это может быть определено в результате обучения. Тапнув где либо на графике, вы выделите семпл — т.е. участок графика длиной 128 точек:Теперь кнопка «сохранить» будет активной. Нажатие по ней автоматически сохранит семпл в файле в рабочем каталоге в файл с именем вида «{label}_{timestamp}.

log» Рабочий каталог может быть выбран в меню приложения. Также обратите внимание, что после сохранения текущего семпла, следующий будет выбран автоматически. Следующий жест выбирается с использованием очень простого алгоритма: найти первую запись абсолютное значение X которой больше 3, затем перемотать назад 20 точек.

Такая автоматизация позволяет нам быстро сохранить много семплов. Я записал по 500 семплов на жест. Сохраненные данные должны быть скопированы на ПК для дальнейшей обработки. (Обработка и обучение прямо на телефоне выглядит интересно, но TensorFlow для Android в настоящее время не поддерживает обучение). На снимке, представленном ранее, диапазон данных составляет примерно ±6.

Однако, если вы сильнее махнете телефоном, он может достичь ±10. Данные лучше нормализовать так, чтоб диапазон был ±1, что намного лучше соответствует формату данных нейронной сети. Для этого я просто разделил все данные на константу — в моем случае 9.

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

Существует много способов фильтрации данных. Один из них — фильтр Скользящее среднее. Вот пример того, как он работает:

Обратите внимание, что максимальные значения X данных теперь составляют половину оригинала.

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

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

Проектирование нейронной сети

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

Наша задача очень похожа на задачу классификации изображений; вход можно рассматривать как изображение с высотой 1 пиксель (и это так и есть — первая операция преобразует входные двумерных данных [128 столбцов x 2 канала] в трехмерные данные [1 строка x 128 колонок x 2 канала]).

Таким образом, вход нейронной сети это массив [128, 2]. Выход нейронной сети представляет собой вектор с длиной, равной числу меток. В нашем случае это 2 числа с плавающим типом данных двойной точности.

Ниже приведена схема нейронной сети:И подробная схема, полученная в TensorBoard:Эта схема содержит некоторые вспомогательные узлы, необходимые только для обучения. Позже я покажу чистую, оптимизированную картину.

Обучение

Обучение будет проводиться на ПК в среде Jupyter Notebook с использованием Python и библиотеки TensorFlow. Notebook можно запустить в среде Conda, используя следующий файл конфигурации. Вот некоторые гипер-параметры обучения:Оптимизатор: Adam
Количество эпох обучения: 3
Скорость обучения (learning rate): 0.

0001
Набор данных разделен на обучающие и проверочные в соотношении 7 к 3. Качество обучения можно контролировать с помощью значений точности обучения и тестирования. Точность обучения должна приближаться, но не достигать 1.

Слишком низкое значение будет указывать на плохое и неточное распознавание, а слишком высокое значение приведет к переобучению модели и может привести к некоторым артефактам во время распознавания, например, распознавание с ненулевым значением для данных без жестов.

Хорошая точность тестирования является доказательством того, что обученная модель может распознавать данные которых раньше никогда не видела. Протокол обучения:('Epoch: ', 0, ' Training Loss: ', 0.054878365, ' Training Accuracy: ', 0.99829739)
('Epoch: ', 1, ' Training Loss: ', 0.

0045060506, ' Training Accuracy: ', 0.99971622)
('Epoch: ', 2, ' Training Loss: ', 0.00088313385, ' Training Accuracy: ', 0.99981081)
('Testing Accuracy:', 0.99954832)
Граф TensorFlow и связанные с ним данные можно сохранить в файлы, используя следующие методы:saver = tf.train.Saver()
with tf.

Session() as session: session.run(tf.global_variables_initializer()) # save the graph tf.train.write_graph(session.graph_def, '.', 'session.pb', False) for epoch in range(training_epochs): # train saver.save(session, './session.ckpt')

Полный код можно найти здесь.

Экспорт нейронной сети

Как сохранить данные TensorFlow было показано в предыдущем разделе. Граф сохраняется в файле session.pb, а данные обучения (веса и т.д.) сохраняются в нескольких файлах «session.ckpt». Эти файлы могут быть достаточно большими:session.ckpt.data-00000-of-00001 3385232
session.ckpt.index 895
session.ckpt.

meta 65920
session.pb 47732
Граф и данные обучения можно заморозить и преобразовать в один файл, подходящий для работы на мобильном устройстве. Чтобы заморозить его, скопируйте файл tensorflow/python/tools/freeze_graph.py в каталог скрипта и выполните следующую команду:python freeze_graph.py –input_graph=session.

pb –input_binary=True –input_checkpoint=session.ckpt –output_graph=frozen.pb –output_node_names=labels_output
где output_graph выходной файл, а output_node_names — имя выходного узла. Это значение указывается в коде Python. Полученный файл меньше предыдущих, но все еще достаточно большой:

frozen.

pb 1130835

Вот как выглядит эта модель в TensorBoard:Чтобы получить такое изображение, скопируйте файл tensorflow/python/tools/import_pb_to_tensorboard.py в каталог скрипта и запустите:python import_pb_to_tensorboard.py –model_dir=frozen.pb –log_dir=tmp где frozen.pb — файл модели.

Теперь запустите TensorBoard:tensorboard –logdir=tmp

Существует несколько способов оптимизации модели для мобильной среды. Чтобы запустить описанные далее команды, вам необходимо скомпилировать TensorFlow из исходников: 1. Удаление неиспользуемых узлов и общая оптимизация.

Выполните:bazel build tensorflow/tools/graph_transforms:transform_graph
bazel-bin/tensorflow/tools/graph_transforms/transform_graph –in_graph=mydata/frozen.pb –out_graph=mydata/frozen_optimized.

pb –inputs='x_input' –outputs='labels_output' –transforms='strip_unused_nodes(type=float, shape=”128,2″) remove_nodes(op=Identity, op=CheckNumerics) round_weights(num_steps=256) fold_constants(ignore_errors=true) fold_batch_norms fold_old_batch_norms'
Результат:2.

Квантование (конвертирование формата данных с плавающей запятой в 8-битный целочисленный формат). Выполните:bazel-bin/tensorflow/tools/graph_transforms/transform_graph –in_graph=mydata/frozen_optimized.pb –out_graph=mydata/frozen_optimized_quant.pb –inputs='x_input' –outputs='labels_output' –transforms='quantize_weights strip_unused_nodes' В результате выходной файл имеет размер 287129 байт по сравнению с исходным 3,5 МБ. Этот файл можно использовать в TensorFlw для Android.

Демонстрационное приложение для Android

Чтобы выполнить распознавание сигналов в приложении Android, необходимо подключить библиотеку TensorFlow для Android в проект. Добавьте библиотеку к зависимостям gradle:dependencies { implementation 'org.tensorflow:tensorflow-android:1.4.0'
}
Теперь вы можете получить доступ к API TensorFlow через класс TensorFlowInferenceInterface.

Сначала поместите файл «frozen_optimized_quant.pb» в каталог «assets» вашего приложения (т.е.

«app/src/main/assets») и загрузите его в коде (например, при запуске Activity, однако, как обычно, лучше производить любые операции ввода/вывода в фоновом потоке):inferenceInterface = new TensorFlowInferenceInterface(getAssets(), “file:///android_asset/frozen_optimized_quant.pb”);
Обратите внимание, как указан файл модели.

Наконец, можно выполнить распознавание:float[] data = new float[128 * 2];
String[] labels = new String[]{“Right”, “Left”};
float[] outputScores = new float[labels.length]; // populate data array with accelerometer data inferenceInterface.feed(“x_input”, data, new long[] {1, 128, 2});
inferenceInterface.

run(new String[]{“labels_output”});
inferenceInterface.fetch(“labels_output”, outputScores);
Данные поступают на вход нашего «черного ящика» в виде одномерного массива, содержащего последовательные данные X и Y акселерометра, то есть формат данных [x1, y1, x2, y2, x3, y3, …, x128, y128].

На выходе мы имеем два числа с плавающей запятой в диапазоне 0…1, значения которых — это соответствие входных данных жестам «влево» или «вправо». Обратите внимание, что сумма этих значений равна 1. Таким образом, например, если входной сигнал не совпадает ни с левым, ни с правым жестом, то выход будет близок к [0,5, 0,5].

Для упрощения лучше преобразовать эти значения в абсолютные значения 0…1, используя простую математику. Кроме того, не забываем выполнить фильтрацию и нормализацию данных перед запуском распознавания.

Вот скриншот окна тестирования демонстрационного приложения:где красные и зеленые линии представляют собой предварительно обработанный сигнал в режиме реального времени. Желтые и голубые линии относятся к «исправленным» «правым» и «левым» жестам соответственно.

«Время» — это время обработки одного семпла, и оно довольно низкое, что позволяет выполнять распознавание в реальном времени (два миллисекунды означают, что обработка может выполняться со скоростью 500 Гц, мы же настроили акселерометр на обновление со скоростью 100 Гц). Как вы можете видеть, есть некоторые нюансы. Во-первых, существуют некоторые ненулевые значения распознавания даже для «пустого» сигнала. Во-вторых, каждый жест имеет длительное «истинное» распознавание в центре со значением, близким к 1.0, и небольшим противоположным распознаванием по краям. Похоже, для выполнения точного фактического распознавания жестов требуется дополнительная обработка.

Библиотека под Android

Я реализовал распознавание с помощью TensorFlow вместе с дополнительной обработкой выходных данных в отдельной библиотеке под Android. Библиотека и демонстрационное приложение находятся здесь.

Чтобы использовать библиотеку в своем приложении, добавьте зависимость на библиотеку в файл gradle:repositories { maven { url “https://dl.bintray.com/rii/maven/” } }
dependencies { … implementation 'uk.co.lemberg:motiondetectionlib:1.0.

0'
}
создайте MotionDetector слушатель:private final MotionDetector.Listener gestureListener = new MotionDetector.Listener() { @Override public void onGestureRecognized(MotionDetector.GestureType gestureType) { Log.

d(TAG, “Gesture detected: ” + gestureType); }
};
и включите распознавание:MotionDetector motionDetector = new MotionDetector(context, gestureListener);
motionDetector.start();

Заключение

Мы прошли все этапы разработки и внедрения распознавания жестов движения в приложении Android, используя библиотеку TensorFlow: сбор и предварительную обработку данных, разработку и обучение нейронной сети, а также разработку тестового приложения и готовой к использованию библиотеки для Android.

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

Если у вас есть идея проекта, но не знаете, с чего начать, мы всегда здесь, чтобы Вам помочь.

Источник: https://habr.com/post/346766/

Новые возможности в человеко-машинном интерфейсе

В октябре 2012 года компания Intel представила SDK (от англ. software development kit) – комплект разработки для написания программных средств. Полное название комплекта Intel Perceptual Computing SDK.

SDK фокусируется на нескольких аспектах естественно-интуитивного взаимодействия человека с компьютером, а именно распознавание лиц, голосовых команд и жестов.

Помимо этого, SDK включает в себя учебные пособия, примеры кода, алгоритмы и примеры приложений, что позволяет разработчикам реализовывать функции естественно-интуитивного взаимодействия настолько просто, насколько это возможно.

Первым что приходит на ум, это использование функций естественно-интуитивного взаимодействия в видео играх ( рис. 1.8).

К примеру, разработчики могут взять функции, предоставляемые SDK и в сфере видео игр для взаимодействия игрока с трехмерным миром, использовать голос или жесты для манипуляций в игре.

Многопользовательские режимы игры получат совершенно другой облик, позволяя участникам игры по-новому взаимодействовать друг с другом.

Рис. 1.8. Фрагмент игры Kung Pow Kevin

Распознавание набора мелкозернистых объектов, таких как десять пальцев на руках ( рис. 1.9), на относительно небольшом расстоянии от компьютера дает возможность моделировать систему захвата какого-либо трехмерного виртуального объекта, перемещать его или указывать на данный объект.

Вспомним язык жестов. Распознавание движения рук или жестов может быть интерпретировано компьютером и использовано для взаимодействия. Кроме этого можно реализовать такие жесты как перелистывание в разных направлениях.

К примеру, переключать треки в плейлисте или перелистывать страницы книги.

Рис. 1.9. Распознавание рук

Функции распознавания лица и контрольных точек на лице позволят определить, где расположены глаза, нос или рот. Присутствует функция распознания моргания, улыбки, распознавания пола и возрастной группы. Сегодня уже существуют решения простой идентификации личности такие как, например, фейс-логин.

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

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

Рис. 1.10. Распознавание лица

Использование сенсора глубины добавит новые возможности веб конференциям и дистанционному общению. Сегментация, основанная на глубине изображения, позволит разделить передний и задний фон. К примеру, чтобы добавить красок виртуальному общению, задний фон может быть заменен каким-либо изображением, к примеру лунным ландшафтом или пляжем.

Рис. 1.11. Использование сенсора глубины

Возможно распознавание трехмерных объектов реального мира и комбинирование их с интерактивным контентом. Трехмерная камера способна распознать модель реального объекта и добавить виртуальные графические и звуковые спецэффекты. Таким образом, распознав группу объектов, положение отдельных объектов относительно других и их поведение, создается новая модель взаимодействия объектов.

Рис. 1.12. Распознавание трехмерных объектов

Реализация функций естественно-интуитивного взаимодействия в интерактивных приложениях позволит:

  • Отражать реальность, а не создавать копию реальности. Разработка приложений, использующих функции естественно-интуитивного взаимодействия должна вдохновляться реальным миром. Естественно-интуитивное взаимодействие основано на наших природных навыках, используемых в повседневной жизни. Каждый день мы используем наши руки для манипуляции объектами, голос, чтобы общаться. В виртуальной среде все эти естественные человеческие возможности позволят забыть про правила и сделать взаимодействие легче.
  • Буквально, а не абстрактно отображать объекты реального мира, то есть отображать более привычные элементы управления (переключатели и регуляторы) для манипуляций вместо абстрактных текстово-символьных альтернатив.
  • Создавать приложения интуитивно понятными, то есть пользователю не придется долго осваивать функции интерактивного приложения.
  • Создавать надежные приложения, не реагирующие на случайные или ложные действия.
  • Расширять функционал интерактивных приложений. Функционал Intel Perceptual Computing SDK стремительно расширяется, пополняясь новыми движениями, позами, языками. Уже существующие функции также улучшаются.

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

  1. Что включает в себя понятие человеко-машинный интерфейс?
  2. Перечислите основные средства человеко-машинного интерфейса.
  3. Где используются сенсорные дисплеи?
  4. Какие виды клавиатур Вы знаете?
  5. Перечислите сферы применения трекболов, джойстиков и манипуляторов типа “мышь”.
  6. В чем состоит принцип работы шлема виртуальной реальности?
  7. Имеются ли принципиально новые, прорывные разработки в области создания средств человеко-машинного интерфейса? Охарактеризуйте эти разработки.
  8. Существуют ли на сегодняшний день эффективные системы распознавания речи? В чем недостатки систем распознавания речи?

Источник: http://www.intuit.ru/studies/courses/10619/1103/lecture/18218?page=3

Новые пользовательские интерфейсы: жестикуляция

10.12.2013 Ли Гарбер

В начале 2013 года компания Leap Motion выпустила устройство, позволяющее управлять приложениями на компьютере, жестикулируя пальцами и руками.

Аналитики разошлись во мнениях по поводу полезности такого контроллера, однако сам факт поступления его в продажу, как и состоявшийся тремя годами раньше выход Microsoft Kinect, стал большим шагом вперед к повсеместному применению жестикуляционных интерфейсов.

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

Сторонники таких интерфейсов утверждают, что системы распознавания жестов, полагающиеся на технологии компьютерного зрения, обработки изображений и др.

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

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

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

Что нового?

Исследования в области жестикуляционных интерфейсов ведутся уже больше сорока лет.

Когда Microsoft в 2010 году выпустила популярную сегодня систему распознавания телодвижений Kinect для игровой консоли Xbox 360 и Windows-компьютеров, это стало важной вехой на пути выхода новых интерфейсов на массовый рынок. Только за первые два месяца после начала продаж корпорация продала 8 млн контроллеров Kinect.

Рост интереса к жестикуляционным интерфейсам обусловлен несколькими причинами. Люди носят с собой электронику практически повсюду, и им нужно, чтобы гаджеты стали проще в обращении. Средства распознавания жестов становятся более совершенными — например, появились недорогие экономичные быстродействующие процессоры, развиваются алгоритмы, 3D-камеры и средства обработки сигналов.

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

Как полагают аналитики Enderle Group, системы распознавания жестов появляются в основном благодаря тому, что поставщики видят возможность с их помощью сделать свои продукты привлекательнее в глазах покупателей.

Контроллер Leap Motion

Компания Leap Motion в 2013 году выпустила долгожданный для многих первый продукт — Leap Motion Controller, представляющий собой небольшое периферийное устройство, подключаемое к порту USB компьютера с Windows или Mac OS.

С помощью двух камер и трех инфракрасных светодиодов система следит за движениями рук, пальцев или других объектов в метровом радиусе сверху и по сторонам от себя.

В отличие от камеры Kinect, реагирующей на движения тела и конечностей, Leap Motion Controller распознает движения малозаметных предметов с точностью 0,01 мм.

В некоторых жестикуляционных системах применяются камеры большого разрешения, получающие массу информации из области своего обзора.

Анализ всех этих данных требует внушительного объема вычислений, а контроллер Leap Motion отличается низкой задержкой, поскольку в нем используется упрощенная камера, а его алгоритмы извлекают только те данные, которые требуются для текущей задачи.

Здесь программно реализованы механизмы распознавания мелких объектов и их движений, благодаря чему регистрируются даже незначительные жесты, что вместе с компактностью системы позволяет внедрить интерфейс во многих типах устройств.

Компания заключила договоры об оснащении своей технологией компьютеров от ASUS и HP, а также с производителями мобильных устройств. В Leap Motion создали онлайн-магазин Airspace Store, где представлено около сотни платных и бесплатных приложений, разработанных для жестового контроллера.

WiSee

В Вашингтонском университете разработали жестикуляционный интерфейс WiSee, с помощью которого можно управлять домашней техникой: телевизорами, компьютерами, термостатами, освещением и т. п.

Система отправляет в эфир поток сигналов микроволнового диапазона — движения руки или тела, совершаемые людьми в комнате, где находится передатчик, нарушают сигнал, вызывая частотные сдвиги.

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

Система работает исключительно с радиосигналами — ей не требуются камеры или вспомогательное оборудование. Так как радиоволны проникают сквозь стены, пользователям не обязательно находиться в одном помещении с передатчиком. Чтобы начать работу с WiSee, нужно сначала совершить пусковую серию жестов.

Подготовка WiSee к коммерческому применению пока не ведется. Исследователи, испытав свою технологию в обстановке квартиры и офиса, выяснили, что она распознает «свои» девять жестов с точностью 94%.

Touch Free

Данная программная технология, созданная компанией eyeSightс, с помощью алгоритмов машинного зрения и обработки изображений следит за жестами руки и преобразует их в команды управления каким-либо устройством.

Touch Free обрабатывает видеопоток с обычной 2D-камеры, инфракрасных датчиков или датчиков глубины, отыскивая предмет, на распознавание которого она была настроена (например, руку, палец или лицо), а затем следит за его движениями.

Touch Free можно внедрить практически в любое электронное устройство — это решение уже используется практически во всех видах устройств потребительской электроники: смартфонах, планшетах, ПК, телевизорах и даже в кондиционерах.

GestiC

GestiC — это недорогой экономный чип от компании Microchip Technology, который можно использовать в широком круге устройств, включая планшеты, ноутбуки, автомобили и потребительскую электронику.

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

С помощью GestiC можно управлять устройствами с расстояния до 15 см без использования камер или видеопроцессоров. С помощью алгоритмов распознавания шаблонов система «узнает» жесты, которым ее обучили, например смахивающие или кругообразные.

Производители устройств со встроенным GestiC могут запрограммировать соответствие жестов различным управляющим командам, а специальные алгоритмы помогают чипу отличать управляющие жесты от других телодвижений.

Другие жестикуляционные интерфейсы

В преддверии выхода игровой консоли Xbox One, Microsoft обновила жестикуляционный контроллер приставки Kinect  — в его новом варианте используется широкоугольная камера-дальномер с разрешением Full HD (1080 точек), регистрирующая расстояния до объектов по времени возвращения отраженного от них света. Она работает быстрее и точнее, чем в предыдущей модели контроллера, а благодаря инфракрасному датчику сохраняет работоспособность даже в темноте.

Жестовые интерфейсы есть и у других новых продуктов, например у «умных» наручных часов Kreyos Meteor, которые общаются по Bluetooth со смартфоном на базе iOS, Android или Windows 8.

Взмахом руки, на которой находятся часы, пользователь сможет ответить на звонок или вывести на экран пришедшую SMS.

Движения кисти рук часы распознают с помощью трехосевого гироскопа, акселерометра и других датчиков.

В Apple, в свою очередь, разработали для iOS 7 систему, оснащенную  камерой,  позволяющую управлять iPhone жестами руки и движениями головы.

Система Grasp компании Omek Interactive, состоящая из связующего ПО и набора программных инструментов, обрабатывает данные с дальномерных камер, позволяя разработчикам создавать жестикуляционные интерфейсы для приложений и устройств.

Преимущества и применения

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

Жестикуляционные интерфейсы позволяют привычными движениями, например имитируя перелистывание страницы, выполнить аналогичное действие на экране.

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

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

Сторонники жестикуляционных интерфейсов уверены в их полезности для многих применений.

Кроме возможности управлять потребительской электроникой в режиме hands-free, жестикуляционные контроллеры способны сделать игры более интерактивными и захватывающими.

Геймеры будут готовы осваивать даже достаточно сложные жестикуляционные интерфейсы, а простыми, «понимающими» один-два жеста, можно оснащать телевизоры и информационные терминалы.

Жестикуляционные интерфейсы могут упростить инвалидам взаимодействие с электроникой. Еще одно потенциальное применение — автомобили. С помощью телодвижений можно управлять развлекательной системой, очистителями стекол, фарами и другим оборудованием, не отрывая глаз от дороги. Ford Motor уже выпускает автомобили, у которых автоматически открывается багажник, если под ним провести ногой.

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

Сложности

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

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

Рынок систем жестикуляционного управления относительно нов, стандартов еще практически нет, и в различных системах используются совершенно разные интерфейсы, камеры и алгоритмы. Из-за этого пользователям сложнее переходить от одной системы к другой.

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

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

Что дальше?

Источник: https://www.osp.ru/os/2013/10/13039069

Qt — PVSM.RU

  • 02/20/14–21:54: Умный видеоплеер или просто распознавание жестов
  • Введение В этой статье речь пойдёт о распознавании жестов. Я считаю, что эта тема на сегодняшний день очень актуальна, потому что этот способ ввода информации более удобен для человека. В YouTube можно увидеть много роликов про распознавание, отслеживание предметов, в хабре тоже есть статьи по этой теме, так вот, я решил поэкспериментировать и сделать что-то […]

  • 02/25/14–06:31: Плагин поиска дублирующегося кода для QtCreator
  • Плагин поиска дублирующегося кода для QtCreatorПлагин поиска дублирующегося кода для QtCreator Дублирующийся код осложняет внесение изменений, понимание исходных текстов и их дальнейшее сопровождение. Для того, чтобы избежать дублирования, а также для оценки качества кода и его рефакторинга, в составе некоторых IDE есть встроенные средства для поиска повторяющихся фрагментов кода. Для других IDE написаны плагины. Однако […]

  • 03/02/14–21:47: iStodo: кроссплатформенный органайзер для студентов
  • Сегодня я хочу рассказать о программе, которой мне не хватало всю учебу в университете. iStodo: кроссплатформенный органайзер для студентовiStodo: кроссплатформенный органайзер для студентов Мы уже давно привыкли к тому, что каждый день приходится задумываться, какое задание сделать сегодня, а какое можно отложить до сессии. Планировать больше чем на неделю сложно, потому приходится регулярно тратить на это время. Силабусы, […]Система мониторинга работы электропечей по выращиванию кристаллов через jabberСистема мониторинга работы электропечей по выращиванию кристаллов через jabber На производстве по выращиванию кристаллов сапфира захотелось иметь систему мгновенных оповещений в случае поломок/аварий при выполнении программы ЧПУ. Стойка станка представляет из себя некую программу, которая пишет сообщения (и сообщения об ошибках в том числе) в базу данных. […]

  • 03/10/14–12:10: Множественный выбор в QComboBox
  • Множественный выбор в QComboBoxМножественный выбор в QComboBox Картинка для привлечения внимания (возможно имеющая отношение к посту) Иногда, довольно удобным бывает возможность множественного выбора в виджете QComboBox. В этом небольшом туториале будет показано, как это cделать. Основная идея состоит в том, что элементам модели, используемой в QComboBox, необходимо поднять флажок Qt::ItemIsUserCheckable, таким образом сделав их отмечаемыми. […]

  • 03/10/14–21:11: Кроссплатформенное приложение на Qt: Предисловие
  • Qt — по-настоящему замечательная библиотека, позволяющая перенести программу на другую операционную систему простой перекомпиляцией. И если разработчик не использовал чего-нибудь ОС-специфичного, она таки будет выглядеть и работать почти как родная. После разработки основного функционала, при которой различия минимальны, наступает стадия полировки и доводки — об этом и будет рассказывать настоящий цикл статей. Кроссплатформенное приложение на Qt: […]

  • 03/10/14–21:11: Кроссплатформенное приложение на Qt: Иконка
  • Кроссплатформенное приложение на Qt: ИконкаКроссплатформенное приложение на Qt: Иконка После сотен отладочных запусков стандартная иконка наверняка успела надоесть, потому и начнем с установки новой. По этому поводу написана отдельная статься в документации, однако все оказалось немного сложнее. Каждой платформе потребовался свой подход, одной строкой проблему не решить. Для начала следует подготовить исходники в разных разрешениях […]

  • 03/16/14–05:41: SpeedReader — Qt библиотека для скорочтения
  • SpeedReader — Qt библиотека для скорочтенияSpeedReader — Qt библиотека для скорочтения Предисловие Некоторое время назад на Хабре была новость о Spritz — программной реализации техники скорочтения, основанной на быстрой смене слов в виджете с определенным центрированием самого слова внутри виджета, а чуть позже и другая новость. Так как тема довольно актуальная я, недолго думая, решил […]

  • 03/16/14–06:33: QEverCloud: Evernote SDK для Qt
  • Раз уж вы читаете этот пост, то, наверное, знаете, что такое Evernote. Ну и конечно же вы знаете, что такое Qt 🙂 И, может быть, вы, как и я, захотели их объединить. Если вы пробовали осуществить такое объединение — написать программу на C++/Qt, которая бы обращалась к Evernote Cloud API — то вы уже знаете, […]

  • 03/26/14–02:31: Qqt — синтаксический сахар для Qt
  • Исходники. В сравнении с html, создавать новые окна на Qt сложнее — надо указать и тип окна-«тега», и создать новую переменную, заполнять отдельные поля. В попытке решить эту проблему возникла библиотека Qqt. Например, можно не соблюдать порядок и количество параметров при создании QAction: Action act(tr(“Text”), QIcon(“:/iconPath”), tr(“tooltip”), QKeySequence(“Ctrl+f”)); //или Action act(QIcon(), QKeySequence(), tr(“text”), tr(“tooltip”)); //Аналогично […]Эмуляция нажатия мультимедийных клавиш в Windows, Linux и Mac OS XЭмуляция нажатия мультимедийных клавиш в Windows, Linux и Mac OS X В перечислении Qt::Key для события QKeyEvent определены 15 типов клавиш управления мультимедиа (см. таблицу в конце статьи). Все они могут быть использованы в фильтре событий (installEventFilter) для обработки нажатия клавиш на мультимедийной клавиатуре (позволяющей […]

  • 04/05/14–00:33: Использование панели режимов QtCreator + 2 плагина
  • Использование панели режимов QtCreator + 2 плагинаИспользование панели режимов QtCreator + 2 плагина В продолжение заметок по разработке плагинов для QtCreator в данной статье описывается способ размещения виджетов непосредственно в панели переключения режимов. При разрешении экрана 1920×1080 в ней остается over 373×70 пикселей свободного пространства, которое можно с пользой задействовать в своем плагине. В качестве […]

  • 04/06/14–08:42: Qt теперь и на Windows Phone
  • Qt теперь и на Windows PhoneQt теперь и на Windows PhoneПоддержка разработки мобильных приложений — одно из главных направлений совершенствования Qt. Готовится к выпуску Qt 5.3 и QtCreator 3.1, которые благодаря поддержке WinRT позволят запускать Qt-приложения на новых платформах. Но не дожидаясь релиза уже сейчас можно скачать Qt 5.3 beta и собрать Ваши приложения для […]

  • 05/21/14–20:49: Версия Qt 5.3 доступна для загрузки
  • Итак, давайте посмотрим, что нового в этом релизе: Поддержка новых платформ Бета-версия Qt для Windows Runtime Qt для Windows Runtime перешла в стадию поддерживаемой бета-версии, что означает возможность запуска приложений не только на Windows Phone, но и на планшетах и настольных компьютерах. Это значит, что теперь вы можете использовать Qt на: Всех компьютерах и планшетах, […]

  • 06/26/14–21:45: Менеджер записей ELibrary
  • Менеджер записей ELibraryМенеджер записей ELibrary Наверное у каждого на винчестере скапливается огромное количество всевозможных книжек, записей, заметок и так далее. Конечно же все это в различных форматах fb2, pdf, doc, а может быть, что к одной логической записи относится несколько файлов или серия книг. Как все это хранить? Одним прекрасным утром передо мной возник именно […]

  • 01/15/15–04:01: Qt Android и системный диалог управления звуком
  • Речь, конечно же, пойдёт не о том, что можно в приложении поймать событие нажатой клавиши и просто задать уровень звука. Дело в том, что можно работать с приложением и на фоне слушать музыку, запущенную на плеере. Или просто один раз исправить файл системны — и оно всегда будет работать. Необходимо, чтобы при нажатии на клавиши […]

Источник: http://methodologies16.rssing.com/chan-9199259/all_p4.html

Чип для распознавания 3D-жестов через электромагнитное поле

Крупный американский производитель полупроводниковых устройств Microchip Technology объявил о выпуске первого в мире чипа MGC3130, способного определять положения объекта в пространстве по изменению в электромагнитном поле.

Звучит мудрёно, но на самом деле подобная технология сулит настоящий прорыв в создании интерфейсов.

Это означает, что можно создавать дешёвые устройства без камеры, которые способны точно отслеживать положение объектов в пространстве и распознавать 3D-жесты с разрешением 150 dpi.

Сегодня подобные контроллеры встречаются редко и обычно работают с камерой для распознавания образов. Это дорого и не слишком эффективно. Вот почему подобные устройства до сих пор не используются повсеместно в мобильных телефонах.

Среди всех производителей микросхем только компания Qualcomm единственная выпустила чип для мобильных устройств с поддержкой распознавания жестов в воздухе (путём обработки изображения с камеры).

В реальности, это действительно не очень эффективное решение, поэтому остальные и не занимаются подобными разработками.

Демонстрация микросхемы Snapdragon от Qualcomm

Чип от Microchip Technology способен изменить рынок. Он потребляет минимум энергии и пригоден для встраивания в мобильные телефоны, игровые джойстики и различную бытовую электронику.

Ключевым ограничением является радиус действия: чип работает на расстоянии не больше 15 см от движущегося объекта.

Несмотря на это, специалисты по интерфейсам уверены, что это действительно революционная технология.

Низкое энергопотребление позволяет оставлять микросхему постоянно в рабочем режиме. В этом случае её можно применять, например, для включения телефона или его разблокировки.

То есть в качестве пароля для включения телефона можно использовать кодовую комбинацию движений пальцев, установленную заранее.

Представьте, вы проснулись, протянули руку в сторону телефона, сделали известные только вам движения пальцами в воздухе — и телефон включился.

Подобные системы можно внедрять в автомобильную электронику, клавиатуры, выключатели света, пульты управления, медицинские приборы и т.д. Это может оказаться настолько удобным, что через десяток лет может вообще не остаться контроллеров, которые требуют физического контакта.

Чип для распознавания 3D-жестов через электромагнитное поле разработан немецким стартапом Ident Technology, который компания Microchip Technology купила год назад.

ссылка на оригинал статьи http://habrahabr.ru/post/160011/

Источник: http://savepearlharbor.com/?p=160011

Ссылка на основную публикацию
Adblock
detector
",css:{backgroundColor:"#000",opacity:.6}},container:{block:void 0,tpl:"
"},wrap:void 0,body:void 0,errors:{tpl:"
",autoclose_delay:2e3,ajax_unsuccessful_load:"Error"},openEffect:{type:"fade",speed:400},closeEffect:{type:"fade",speed:400},beforeOpen:n.noop,afterOpen:n.noop,beforeClose:n.noop,afterClose:n.noop,afterLoading:n.noop,afterLoadingOnShow:n.noop,errorLoading:n.noop},o=0,p=n([]),h={isEventOut:function(a,b){var c=!0;return n(a).each(function(){n(b.target).get(0)==n(this).get(0)&&(c=!1),0==n(b.target).closest("HTML",n(this).get(0)).length&&(c=!1)}),c}},q={getParentEl:function(a){var b=n(a);return b.data("arcticmodal")?b:(b=n(a).closest(".arcticmodal-container").data("arcticmodalParentEl"),!!b&&b)},transition:function(a,b,c,d){switch(d=null==d?n.noop:d,c.type){case"fade":"show"==b?a.fadeIn(c.speed,d):a.fadeOut(c.speed,d);break;case"none":"show"==b?a.show():a.hide(),d();}},prepare_body:function(a,b){n(".arcticmodal-close",a.body).unbind("click.arcticmodal").bind("click.arcticmodal",function(){return b.arcticmodal("close"),!1})},init_el:function(d,a){var b=d.data("arcticmodal");if(!b){if(b=a,o++,b.modalID=o,b.overlay.block=n(b.overlay.tpl),b.overlay.block.css(b.overlay.css),b.container.block=n(b.container.tpl),b.body=n(".arcticmodal-container_i2",b.container.block),a.clone?b.body.html(d.clone(!0)):(d.before("
"),b.body.html(d)),q.prepare_body(b,d),b.closeOnOverlayClick&&b.overlay.block.add(b.container.block).click(function(a){h.isEventOut(n(">*",b.body),a)&&d.arcticmodal("close")}),b.container.block.data("arcticmodalParentEl",d),d.data("arcticmodal",b),p=n.merge(p,d),n.proxy(e.show,d)(),"html"==b.type)return d;if(null!=b.ajax.beforeSend){var c=b.ajax.beforeSend;delete b.ajax.beforeSend}if(null!=b.ajax.success){var f=b.ajax.success;delete b.ajax.success}if(null!=b.ajax.error){var g=b.ajax.error;delete b.ajax.error}var j=n.extend(!0,{url:b.url,beforeSend:function(){null==c?b.body.html("
"):c(b,d)},success:function(c){d.trigger("afterLoading"),b.afterLoading(b,d,c),null==f?b.body.html(c):f(b,d,c),q.prepare_body(b,d),d.trigger("afterLoadingOnShow"),b.afterLoadingOnShow(b,d,c)},error:function(){d.trigger("errorLoading"),b.errorLoading(b,d),null==g?(b.body.html(b.errors.tpl),n(".arcticmodal-error",b.body).html(b.errors.ajax_unsuccessful_load),n(".arcticmodal-close",b.body).click(function(){return d.arcticmodal("close"),!1}),b.errors.autoclose_delay&&setTimeout(function(){d.arcticmodal("close")},b.errors.autoclose_delay)):g(b,d)}},b.ajax);b.ajax_request=n.ajax(j),d.data("arcticmodal",b)}},init:function(b){if(b=n.extend(!0,{},a,b),!n.isFunction(this))return this.each(function(){q.init_el(n(this),n.extend(!0,{},b))});if(null==b)return void n.error("jquery.arcticmodal: Uncorrect parameters");if(""==b.type)return void n.error("jquery.arcticmodal: Don't set parameter \"type\"");switch(b.type){case"html":if(""==b.content)return void n.error("jquery.arcticmodal: Don't set parameter \"content\"");var e=b.content;return b.content="",q.init_el(n(e),b);case"ajax":return""==b.url?void n.error("jquery.arcticmodal: Don't set parameter \"url\""):q.init_el(n("
"),b);}}},e={show:function(){var a=q.getParentEl(this);if(!1===a)return void n.error("jquery.arcticmodal: Uncorrect call");var b=a.data("arcticmodal");if(b.overlay.block.hide(),b.container.block.hide(),n("BODY").append(b.overlay.block),n("BODY").append(b.container.block),b.beforeOpen(b,a),a.trigger("beforeOpen"),"hidden"!=b.wrap.css("overflow")){b.wrap.data("arcticmodalOverflow",b.wrap.css("overflow"));var c=b.wrap.outerWidth(!0);b.wrap.css("overflow","hidden");var d=b.wrap.outerWidth(!0);d!=c&&b.wrap.css("marginRight",d-c+"px")}return p.not(a).each(function(){var a=n(this).data("arcticmodal");a.overlay.block.hide()}),q.transition(b.overlay.block,"show",1*")),b.overlay.block.remove(),b.container.block.remove(),a.data("arcticmodal",null),n(".arcticmodal-container").length||(b.wrap.data("arcticmodalOverflow")&&b.wrap.css("overflow",b.wrap.data("arcticmodalOverflow")),b.wrap.css("marginRight",0))}),"ajax"==b.type&&b.ajax_request.abort(),p=p.not(a))})},setDefault:function(b){n.extend(!0,a,b)}};n(function(){a.wrap=n(document.all&&!document.querySelector?"html":"body")}),n(document).bind("keyup.arcticmodal",function(d){var a=p.last();if(a.length){var b=a.data("arcticmodal");b.closeOnEsc&&27===d.keyCode&&a.arcticmodal("close")}}),n.arcticmodal=n.fn.arcticmodal=function(a){return e[a]?e[a].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof a&&a?void n.error("jquery.arcticmodal: Method "+a+" does not exist"):q.init.apply(this,arguments)}}(jQuery)}var debugMode="undefined"!=typeof debugFlatPM&&debugFlatPM,duplicateMode="undefined"!=typeof duplicateFlatPM&&duplicateFlatPM,countMode="undefined"!=typeof countFlatPM&&countFlatPM;document["wri"+"te"]=function(a){let b=document.createElement("div");jQuery(document.currentScript).after(b),flatPM_setHTML(b,a),jQuery(b).contents().unwrap()};function flatPM_sticky(c,d,e=0){function f(){if(null==a){let b=getComputedStyle(g,""),c="";for(let a=0;a=b.top-h?b.top-h{const d=c.split("=");return d[0]===a?decodeURIComponent(d[1]):b},""),c=""==b?void 0:b;return c}function flatPM_testCookie(){let a="test_56445";try{return localStorage.setItem(a,a),localStorage.removeItem(a),!0}catch(a){return!1}}function flatPM_grep(a,b,c){return jQuery.grep(a,(a,d)=>c?d==b:0==(d+1)%b)}function flatPM_random(a,b){return Math.floor(Math.random()*(b-a+1))+a}