Pull to refresh
69.21
Rating
DataArt
Технологический консалтинг и разработка ПО

Ловим усталость с помощью AndroidWear

DataArt corporate blog IOT Wearable electronics Health


Это небольшая история про один из экспериментов нашей компетенции Wearables.
Мы провели его больше года тому назад, поэтому код изрядно устарел, да и AndroidWear-приложением сегодня уже никого не удивишь, однако задумка была очень интересной, и поработать над ней было здорово. За что огромное спасибо авторам идеи: Арсению Печенкину и VP of Engineering Роману Чернышеву, благодаря которым стартовал этот R&D.

Посмотреть код можно на GitHub. А вот небольшая презентация.



У мозга человека есть особенность — когда человек утомляется, его внимательность падает. Да и не только от утомления: от скачков давления, от температуры, или если граммов 300 опрокинуть (для кого-то — 1000), слова тоже начнут невпопад произноситься, а слоги — плохо связываться. Есть даже научные методы установления уровня утомления / алкогольного опьянения, используемые, например, полицией, среди которых — пройти по бордюру эн метров, не пошатнувшись, дотронуться мизинцем до своего носа, произнести некоторую установленную скороговорку и т. п.

В былые времена признаки и принипы умственного утомления были описаны даже в ГОСТах, например, вот.

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

Зная, чтотолько набирающая популярность платформа AndroidWear, поддерживает не только тач-инпут, но и голосовой ввод, мы решили попробовать реализовать тесты сразу двух типов:
  • тест-головоломку на определение совпадения текстового описания с формой/цветом геометрической фигуры;
  • тест на отчетливость произнесения набора контрольных фраз.


Сразу скажу — голосовой ввод на тот момент различал произвольные слова не так уж хорошо. Это вам не работа с предопределенным набором команд “ok, Google”. Однако при некоторой тренировке добиться заметных различий между фразой, четко сказанной отдохнувшим человеком, и той же фразой, произнесенной в спешке или в состоянии полудремы, удалось весьма наглядно.

Повторюсь: коду уже больше года, и в нем вы не найдете ни Ambient Mode, ни кастомного WatchFace, ни некоторых других новинок, пришедших с обновлениями SDK за этот год.

Но кое-что полезное из проекта мы все же вынесли.

SpeechRecognizer

В первую очередь, это работа с android.speech.SpeechRecognizer.



SpeechRecognizer в AndroidWear на момент написания проекта имел два заметных ограничения по сравнению с мобильным Android:
  • Ограничено число результатов распознавания лишь одним значением. Речь о массиве значений, получаемых из Bundle results в коллбэке android.speech.RecognitionListener#onResults. С одной стороны, это сделано для улучшения перформанса, и в надежде, что распознавание голоса эволюционирует и даст достаточно точный результат. С другой — из-за этого на AndroidWear не проходит трюк с выбором одного из n кандидатов на распознанную фразу, который работал на handheld Android. В результате — никакой ручной регулировки точности, и «полная чистота эксперимента» :).
  • Нет возможности подключить custom recognition animation. Это позволило бы сделать красивый эквалайзер для распознавания голоса, реагирующий на android.speech.RecognitionListener#onRmsChanged, вписывающийся в тему приожения вместо стандартного белого экрана с красной кнопкой голосового ввода Google. Но без этого, впрочем, вполне можно жить.


Использование полезного тулкита на AndroidWear




Как показала практика, и ButterKnife, и GreenDao ORM, и многие другие удобные инструменты, облегчающие и ускоряющие разарботку, прекрасно работают в AndroidWear-проекте. Более того, в ходе проекта мы опробовали возможность создавать общие Android-компоненты: CustomView, диалоги и даже Activity, доступные из общей библиотеки для обоих проектов (и mobile, и wear).

Работа с базой данных

Для себя я давно завел правило использовать ORM всегда, когда это возможно, избавляясь от пачки самописных классов с множестом публичных статических констант. И за это время такой подход сэкономил немало времени и показал себя очень хорошо. Скажу лишь, что GreenDao, используемая в проекте, мне не очень понравилась — Sprinkles или DbFlow решают эти же задачи проще и элегантнее. Но это — мое личное мнение, и, если вам интересно посмотреть на живой пример применения GreenDao и кодогенератора, строящего классы ORM для работы проекта, — милости просим в код.

WearableConnector




Редактировать шаблоны фраз на часах (у которых нет клавиатуры) не очень удобно, поэтому редактор мы разместили на смартфоне. За отправку шаблонов на часы и результатов обратно на телефон используется GoogleApiClient Wearable.API.\

Для обмена данными (DataItems и Messages) создали класс WearableConnector. Все, что он обеспечивает, — единый протокол (включая path для DataMapRequests и вызовов sendMessage).

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

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



Как мы видии, бывает два типа результатов — Speech test и Shape test.



Отмечу, что Shape test изначально разрабатывался для handheld и уже после был перенесен в виде CustomView в AndroidWear часть проекта. Это лишний раз подтвердило догадку, что реализации многих компонентов очень хорошо переносятся с mobile-платформы на wear.

Результатом эксперимента стало приложение, которое позволит простыми наручными средствами (такими как ваш AndroidWear smartwatch) проверить степень утомления и сохранить некоторые результаты на ваш смартфон. Ну и, конечно, опыт разработки под AndroidWear, которая не только увлекательна, но и достаточно легка и приятна, особенно за счет переносимости и компонентов, и вашего любимого инструментария из обычного Android проекта в проект для AndroidWear.

Первый релиз Languor v1.0.5 доступен на Github.

Бодрости вам, мобильности и неутомимости! И до новых встреч.

Tags:
Hubs:
Total votes 9: ↑7 and ↓2 +5
Views 4.4K
Comments Leave a comment

Information

Founded
Website
www.dataart.com
Employees
1,001–5,000 employees
Registered