- PVSM.RU - https://www.pvsm.ru -

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

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

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

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



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

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

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

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

  • тест-головоломку на определение совпадения текстового описания с формой/цветом геометрической фигуры;
  • тест на отчетливость произнесения набора контрольных фраз.

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

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

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

SpeechRecognizer

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

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

SpeechRecognizer в AndroidWear на момент написания проекта имел два заметных ограничения по сравнению с мобильным Android:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Автор: DataArt

Источник [7]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/android/114117

Ссылки в тексте:

[1] на GitHub: https://github.com/DataArt/Languor

[2] небольшая презентация: http://www.slideshare.net/ittalk/languor

[3] мозга: http://www.braintools.ru

[4] вот: http://docs.cntd.ru/document/gost-r-iso-10075-2011

[5] диагностики таких состояний: http://psychojournal.ru/tests/101-test-na-opredelenie-stepeni-ustalosti.html

[6] v1.0.5: https://github.com/DataArt/Languor/releases/tag/v1.0.5

[7] Источник: https://geektimes.ru/post/272074/