...

пятница, 24 июля 2015 г.

[Перевод] Повышение удобства работы с Android-приложениями: распознавание жестов и не только

Пользователь перевернул телефон, когда поступил входящий вызов? Уберём звук. Устройство подняли так, будто хотят сделать фото? Включим, если за нас это ещё не сделали по старинке, камеру. Как? Сенсоры нам в помощь.

image

Обзор


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

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

С выходом Intel Context Sensing SDK для Android* v1.6.7 у создателей приложений появилась возможность работать с несколькими новыми типами контекстно-зависимых данных. То есть – данных, основанных на сведениях об окружении и о действиях пользователя. Среди них – положение устройства в пространстве (position), подъём его к уху, как при начале разговора (ear touch), быстрое перемещение с возвратом в исходную позицию (flick). Не стоит путать жест перемещения в пространстве с одноимённым flick’ом, имеющим отношение к работе с сенсорным дисплеем. Так же новая библиотека поддерживает распознавание рисования устройством различных символов (glyph) в воздухе.

Из этого материала вы узнаете,  как извлечь из показаний сенсоров ценные сведения о том, что происходит с устройством. Кроме того, мы рассмотрим примеры использования Context Sensing SDK в деле детектирования перемещений,  встряхиваний устройства и распознавания символов.

Однако, Context Sensing SDK, даже если ограничиться вопросами пространственного положения устройства, может намного больше. Например – определить, какой именно физической деятельностью занят пользователь. Он идёт пешком, отдыхает, едет на велосипеде? А может, бегает, путешествует на машине или на поезде? Обладая такими сведениями о происходящем, можно вывести взаимодействие пользователя и его мобильного устройства, на котором установлено ваше приложение, на совершенно новый уровень.

Предварительные сведения


Обычный вопрос, который возникает при работе с датчиками, состоит в их соединении с процессором приложений (application processor, AP) на аппаратном уровне. Ниже вы можете видеть три способа подключения. А именно, это прямое подключение, использование выделенного концентратора датчиков (discrete sensor hub) и встроенного в процессор концентратора (integrated sensor hub, ISH).


Сравнение различных подходов к сопряжению датчиков с процессором приложений.

Если датчики присоединяются напрямую к AP, это называется прямым подключением. Однако здесь есть одна проблема. Заключается она в том, что датчики потребляют ресурсы процессора для выполнения измерений.

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

Следующий шаг развития взаимодействия процессоров и датчиков состоит в использовании встроенного концентратора. Это, кроме прочих преимуществ, приводит к уменьшению количества используемых дискретных компонентов и к снижению стоимости устройства.
Концентратор датчиков – это, по сути, микрочип, служащий для организации сопряжения множества устройств (Multipoint Control Unit, MCU). Для него можно писать программы на языках C/C++ и загружать скомпилированный код в MCU.

В 2015 году Intel выпускает платформу CherryTrail-T, предназначенную для планшетов, и платформу SkyLake, рассчитанную на устройства «два в одном». Эти решения используют концентраторы датчиков. Подробнее об интегрированных концентраторах вы можете узнать, пройдя по ссылке.

Ниже системы координат сенсоров. В частности, здесь показан акселерометр, который способен измерять ускорение по осям X, Y и Z, и гироскоп, отслеживающий положение устройства в пространстве, в частности – повороты вокруг тех же осей.


Системы координат акселерометра и гироскопа.


Значения ускорения по осям акселерометра при различных положениях устройства в состоянии покоя. Читать в PDF, без регистрации и смс.

В таблице приведены новые события, вызываемые физическими перемещениями устройств, включённые в ОС Android Lollipop.

Новые события, поддерживаемые в Android Lollipop

Название
Описание
SENSOR_STRING_TYPE_PICK_UP_GESTURE
Вызывается, когда устройство берут в руку, независимо от того, где оно было до этого (на столе, в кармане, в сумке)
SENSOR_STRING_TYPE_GLANCE_GESTURE
Позволяет, основываясь на специфическом движении, включить на короткое время экран для того, чтобы пользователь мог взглянуть на него.
SENSOR_STRING_TYPE_WAKE_GESTURE
Позволяет разблокировать устройство, основываясь на определенном перемещении этого устройства в пространстве.
SENSOR_STRING_TYPE_TILT_DETECTOR
Соответствующие событие генерируется каждый раз при наклоне устройства.
Определение этих событий можно найти в папке с исходным кодом Android Lollipop: /hardware/libhardware/include/hardware/sensor.h.

Процесс распознавания жестов


Процесс распознавания жестов можно разделить на следующие стадии: предварительная обработка исходных данных (preprocessing), выделение характерных признаков (feature extraction) и сравнение с шаблонами (template matching).


Процесс распознавания жестов.

Рассмотрим стадии процесса распознавания жестов подробнее.

Предварительная обработка исходных данных


Предварительная обработка начинается после того, как исходные данные (raw data) получены с сенсора. Ниже вы можете видеть графическое представление данных, полученных с гироскопа после того, как устройство было один раз быстро наклонено вправо и возвращено в прежнее состояние (жест flick). Далее показан график для аналогичного жеста, но уже построенный по данным, полученным с акселерометра.


Данные, полученные с гироскопа (однократный наклон устройства вправо и быстрый возврат в исходное положение, RIGHT FLICK ONCE).


Данные, полученные с акселерометра (однократный наклон устройства вправо и быстрый возврат в исходное положение, RIGHT FLICK ONCE).

Можно создать программу, которая будет отправлять через сеть данные, полученные с сенсора на Android-устройстве, затем – написать скрипт на Python*, предназначенный для работы на PC. Это позволить получать, например, со смартфона, изменяющиеся данные сенсоров и строить графики.

Итак, на данном шаге задействовано следующее:

  • Компьютер, на котором выполняется Python-скрипт, получающий данные с сенсоров.
  • Приложение, которое выполняется на тестируемом устройстве (DUT-run application). Оно собирает информацию с датчиков  и отправляет её по сети.
  • Тестовый мост Android (android debug bridge, ADB), сконфигурированный так, чтобы можно было отправлять данные на устройство и принимать их. При его настройке используется команда вида: adb forward tcp: port tcp: port


Динамическое отображение данных, полученных с датчиков.

На данном этапе мы убираем необычные значения сигналов, и, как это часто делается, используем фильтр для подавления помех. График ниже показывает данные сенсоров, полученные после того, как устройство было повёрнуто на 90°, после чего возвращено в исходное положение.


Устранение ухода гироскопа и шума.

Выделение характерных признаков


В сигнале, который выдаёт сенсор, могут присутствовать шумы, это способно повлиять на результаты распознавания. Например, такие характеристики, как FAR (False Acceptance Rate, коэффициент ложного пропуска) и FRR (False Rejection Rate, коэффициент ложного отказа) показывают уровень возникновения отказов в распознавании сигналов. Объединяя данные различных сенсоров, мы можем повысить точность распознавания событий. Комбинирование данных сенсоров (sensor fusion; раз полезная ссылка и два) нашло применение во многих мобильных устройствах. Ниже показан пример использования акселерометра, магнетометра и гироскопа для получения сведений об ориентации устройства в пространстве. Обычно в процессе выделения характерных признаков сигналов используются метод FFT (Fast Fourier Transform, быстрое преобразование Фурье) и анализ перехода через ноль (zero-crossing). Акселерометр и магнитометр подвержены воздействию электромагнитных излучений. Обычно эти сенсоры нуждаются в калибровке.


Получение сведений об ориентации устройства в пространстве с использованием объединения данных сенсоров.

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

Сравнение с шаблонами


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

Из этого следует, что вполне реально спроектировать очень простую систему распознавания жестов на основе конечного автомата. В сравнении с подходом к распознаванию жестов, основанном скрытых моделях Маркова (Hidden Markov model, HMM), этот подход более надёжен и имеет более высокую точность.


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

Примеры: Intel® Context Sensing SDK в действии


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


Сравнение Intel Context Sensing SDK и традиционной архитектуры Android.

В настоящий момент SDK поддерживает распознавание символов, которые можно рисовать устройством в воздухе (glyph), жестов наклона с возвратом в исходное состояние (flick) и жеста касания устройством уха (ear_touch). Демонстрация этих функций реализована в примере ContextSensingApiFlowSample, который рассчитан на работу с Android-устройствами.

Для того чтобы испытать этот и другие примеры использования Intel Context Sensing SDK, нужно загрузить Context Sensing SDK, который поставляется в составе Intel Integrated Native Developer Experience (Intel INDE). После загрузки и установки пакета, при условии использования стандартных путей, всё необходимое можно найти по адресу C:\Intel\INDE\context_sdk_1.6.7.x. В частности, здесь имеется JAVA-библиотека intel-context-sensing-1.6.7.x.jar, предназначенная для подключение к Android-проектам, и папка  Samples, содержащая код демонстрационных Android-приложений.


Поддержка жеста наклона с возвратом в исходное состояние в Intel Context SDK.

Intel Context Sensing SDK поддерживает распознавание жеста наклона с возвратом в исходное состояние в четырёх направлениях. А именно – наклоны влево, вправо, вверх и вниз.


Поддержка жеста касания уха в Intel Context SDK.


Поддержка рисования символов в воздухе в Intel Context SDK.


Демонстрационное приложение ContextSensingApiFlowSample, использующее Intel Context SDK.

Взглянем теперь на приложение-пример PhysicalActivitySensingSample. Как следует из названия, оно позволяет задействовать возможности Intel Context SDK по распознаванию физической активности пользователя (Activity Recognition). Данные с сенсоров анализируются, после чего система выдаёт прогноз, указывая вероятности для различных видов деятельности в процентах.
Реализован пример в виде Eclipse-проекта. Его можно импортировать в Android Studio, а для того, чтобы код заработал, надо добавить в проект вышеупомянутую библиотеку intel-context-sensing-1.6.7.x.jar и подключить её в build.gradle:


Подготовка проекта PhysicalActivitySensingSample к запуску в Android Studio.

Проект содержит в себе два основных элемента. Первый – Activity, реализующая пользовательский интерфейс. Второй – класс, унаследованный от Application, содержащий несколько вспомогательных внутренних классов. Его основная задача – поддерживать работу с объектом класса com.intel.context.Sensing, к которому мы обращаемся, нажимая на кнопки, и который поставляет сведения о физической активности пользователя.
Испытание проходило на планшете ASUS Fonepad 8, который построен на основе CPU Intel Atom Z3530. После запуска приложения нам понадобятся две кнопки. Сначала надо нажать кнопку Start Daemon, потом – Enable Sensing (соответственно, после завершения экспериментов – Disable Sensing и Stop Daemon). Теперь можно ожидать сообщения со сведениями о том, чем, по мнению программы, мы заняты.


Анализ физической активности пользователя.

В ходе экспериментов планшет был взят на прогулку. Как видно из сообщения, программа предположила, что пользователь, с вероятностью 87%, ходит пешком (параметр WALKING). Если устройство лежит без движения, то система решает, что пользователь отдыхает, устанавливая очень высокий показатель у параметра SEDENTARY (100% при полном отсутствии движения). Если же потрясти и повертеть устройство случайным образом, обычно можно наблюдать довольно высокий показатель параметра RANDOM.

Итоги


Сенсоры широко используются в современных вычислительных системах. Реализованное на их базе распознавание движений, примененное в мобильных устройствах, способно стать ценным конкурентным преимуществом приложений, привлекающим пользователей. Работа с датчиками – это очень важная возможность, которая позволяет значительно повысить удобство использования мобильных устройств и приложений. Недавно выпущенный Intel Context Sensing SDK v1.6.7 позволяет укорить и упростить создание приложений, которые используют данные сенсоров. Это хорошо и для разработчиков, и для тех, кто пользуется их приложениями.

Для домашнего чтения


» Sensor stack
» Feature Extraction

This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.

Комментариев нет:

Отправить комментарий