Ни для кого не секрет, что рынок полон разнообразных фитнес-трекеров в различных форм-факторах.
К ним относятся фитнес-браслеты, умные часы и нагрудные пульсометры с измерением веса в килограммах.
Их часто дарят и, понося пару месяцев, убедившись, что пресловутые 10 тысяч шагов не найдены сидя в офисе, кладут в ящик стола и забывают навсегда.
Между тем, эти устройства способны собирать очень важную информацию о пользователе: большинство трекеров измеряют пульс или метод плетизмографии или через электрическая активность сердца - ? КГ .
Некоторые устройства оценивают изменения артериального давления и оксигенации крови.
Проблема в том, что обычный трекер не делает этого системно и не анализирует данные.
Мы решили: почему бы не написать сервис, который бы помогал людям следить за своим здоровьем с помощью носимых гаджетов: круглосуточно отслеживать доступные физиологические параметры, строить индивидуальный профиль, отслеживать отклонения от этого профиля.
Более того, мы хотели, чтобы все это не ограничивалось только нашим пользователем.
Мы хотели, чтобы наши пользователи могли позаботиться о своих близких, т. е.
увидеть онлайн все измерения, снятые гаджетом, который носит мама-давно пенсионерка, живущая на другом конце страны.
Мы хотим, чтобы телемедицинская консультация со специалистом проходила не на уровне «врач, здесь болит», а с объективным измерением.
Что следует из такой постановки задачи? Первое: мы находимся на рынке B2C, т. е.
у нас нет ограничения на количество пользователей – чем больше, тем лучше.
Второе: мы хотим стремиться к максимально полной картине состояния организма, т. е.
типов датчиков потенциально может быть много, и мы не фиксируем их типы априори.
Третье: мы не умеем регулировать потоки данных.
Поток данных живет своей жизнью; Некоторые пользователи измеряют только пульс, некоторые измеряют артериальное давление каждые полчаса, некоторые беспокоятся о своем стрессе, некоторые делают кардиограмму каждый час.
Пользователи находятся в разных часовых поясах: для сервиса нет дня и ночи, нет «закрытия торгового дня», любое время суток для одних — разгар дня, а для других — время подводить итоги.
как прошел день.
Поскольку наша задача — анализ, мы не можем отрезать этот поток данных на уровне мобильного приложения, мы должны отправить все данные на сервер, обеспечив их эффективный прием на сервере, хранение и последующую, а зачастую и параллельно с записью в базу данных, обработка.
На основании всего этого было принято решение использовать технологии Big Data. В качестве дистрибутива был выбран дистрибутив от Cloudera. Общая архитектура решения представлена на рис.
1.
Рисунок 1. Архитектура решения
Носимое устройство (гаджет) измеряет определенные физиологические показатели пользователя и передает их на смартфон по протоколу Bluetooth. На смартфоне работает приложение (доступно как на Android, так и на iOS), которое функционально состоит из двух частей:
- Сервис, управляющий гаджетом;
- Пользовательский интерфейс.
Служба работает по расписанию, просыпаясь через заданный пользователем интервал времени — обычно раз в несколько минут — и выполняя запланированный объем задач.
В большинстве случаев это запрос регулярно собираемых с гаджета данных: пульс, сон, физическая активность.
Полученные данные отправляются по протоколу REST на сервер.
Если сеть недоступна или сервер отвечает ошибкой, данные сохраняются на смартфоне до тех пор, пока соединение не будет восстановлено.
Это обеспечивает надежную доставку данных через мобильные сети, которые не очень надежны и доступны не везде.
Помимо основного расписания, пользователь может установить дополнительное расписание для выполнения отдельных видов измерений, таких как давление, напряжение, МКГ, которые не входят в основное расписание и выполняются несколько раз в день.
По умолчанию эти измерения запланированы на ночное время, чтобы активность пользователя в дневное время не искажала результаты измерений.
Кроме того, регулярное измерение показателей в фиксированных условиях – в данном случае во время сна – позволяет отслеживать динамику показателей, оценивая их изменение относительно ранее построенного профиля пользователя.
Сам по себе пульс 150 ударов в минуту ничего не значит. У совершенно здорового человека такой пульс может быть во время физической нагрузки или сразу после нее, но такая же величина во время глубокого отдыха, характерного для сна, указывает на проблемы с сердечно-сосудистой системой человека.
Пользователь может установить график по своему желанию или выполнить измерение вручную.
Основная задача пользовательского интерфейса — предоставить пользователю доступ к данным: как самим сырым измерениям, так и аналитике в виде построенных профилей и уведомлений, созданных по результатам анализа данных.
На рис.
2 показаны примеры таких предупреждений.
Рисунок 2. Уведомления
Рисунок 3
Профиль сердечного ритма во время сна и частота сердечных сокращений в начале сна выходят за пределы типичных значений, что может свидетельствовать о чрезмерной нагрузке в предыдущий день.
Сбор данных на сервере осуществляется через Flume, что позволяет гибко настраивать потоки данных по различным каналам, маршрутизируя данные в различные таблицы для хранения или для экспресс-обработки с помощью Spark Streams. Каналы также позволяют сглаживать неравномерность объемов входящих данных путем буферизации входящих данных.
Кроме того, по мере роста количества пользователей мы просто увеличиваем количество агентов Flume, распределяя данные между агентами с помощью балансировщика — в нашем случае haproxy. Мы используем HBase для хранения данных.
Выбор в пользу HBase определяется не только фактом большого объема данных, но и особенностями использования:
- Мы имеем дело с измерениями, т. е.
с данными, неизменяемыми по своей природе;
- Расчет аналитических показателей требует доступа не к отдельной записи, а к последовательному во времени чтению массива данных и параллельной обработке.
На скорость записи также положительно влияет функция HBase, которая обновление записи реализуется физически как создание новой версии записи, а не поиск и перезапись существующей, что облегчает нам работу с «дубликатами».
Чтобы дополнительно гарантировать от потери данных, мы частично дублируем обмен данными между гаджетом и сервером, и эта особенность HBase позволяет нам не терять производительность записи в случае дублирования.
Конечно, некоторые хранимые данные могут меняться, например, аналитические показатели — они регулярно пересчитываются в течение текущего дня, но их объем непропорционально мал по сравнению с исходными данными, а требуемая реакция на доступ к ним определяется GUI. и не является серьезным ограничением.
Часть данных, носящая метаданный характер, а также персональные данные пользователей хранятся в отдельной базе данных Postgres. В системе реализованы три схемы обработки данных в зависимости от срочности:
- Пакетные задания в виде очередей Oozie в основном представляют собой задания для Hive, выполняемые по расписанию, с относительно низким приоритетом.
- Spark Stream для обработки достаточно срочных событий, таких как пересчет агрегатов, например, статистика шагов, сон, не связанных с прямыми действиями пользователя через GUI.
- Расчет аналитических показателей в ходе измерений осуществляется пользователем вручную через графический интерфейс.
В этом случае запрос на обработку инициируется мобильным приложением, а сервер приложений — в нашем случае Play — запускает соответствующую задачу на сервере Hadoop. Типичным примером является расчет показателей вариабельности на основе измерения МЦГ или пульсовой волны, когда пользователь производит это измерение самостоятельно через мобильное приложение, а не по заранее созданному графику.
Естественно, что в этом случае пользователю хочется «мгновенного» результата, а непосредственный запуск расчета позволяет ему получить необходимую скорость реакции.
В первых двух случаях данные многих пользователей обрабатываются в рамках одной задачи; в третьем случае обрабатываются данные конкретного пользователя, инициировавшего расчет. Использование Spark Stream позволяет не реагировать на каждое отдельное событие, а собирать все события, требующие пересчета агрегатов, за короткий промежуток времени и обрабатывать их в рамках одного задания, тем самым сохраняя разумное время обновления агрегатов и снижая нагрузку на сервер.
Помимо мобильного приложения пользователям доступно веб-приложение.
Целью разработки веб-версии приложения было предоставление пользователям доступа к большему объему данных, большему количеству показателей и возможности более глубокого анализа, в том числе медицинским специалистом.
Мы также предположили, что в некоторых случаях пользователям понадобится доступ к своим данным без мобильного приложения.
Например, при общении с врачом в рамках телемедицинской консультации сложно ожидать, что у каждого врача на смартфоне будет установлено приложение Actenzo, но с большой вероятностью врач сможет использовать WEB-версию, не требующую монтаж.
Чтобы, с одной стороны, облегчить восприятие информации пользователями, не обладающими глубокими знаниями, а с другой, дать специалистам возможность максимально глубоко проанализировать состояние, WEB-приложение имеет два режима: пользователь и профессионал.
Пользовательский режим максимально приближен по интерфейсу к мобильному приложению, однако пользователю доступна вся история наблюдений — в отличие от последних 7 дней в случае с мобильным приложением.
В профессиональном режиме мы предоставляем доступ к более подробным показателям, смысл которых понятен медицинскому персоналу, но требует от обычного пользователя обращения к специализированной литературе – не слишком глубокой, но необходимой для понимания терминов.
В этом режиме доступны графики МКГ, пульсовой волны, детальный анализ вариабельности сердечного ритма как во временной, так и в частотной области, а также анализ МКГ.
У специалиста есть возможность дополнительно очистить записи сердечных интервалов, удалив пропущенные алгоритмом артефакты и экстрасистолы.
И мобильное, и веб-приложение визуализируют данные, полученные из кластера Hadoop, через службу REST с единым API для обоих приложений.
Этот же API можно использовать для интеграции с внешними системами, поскольку он спроектирован на основе данных, а не форматов их использования в приложениях.
Сервис реализован на платформе Play. Не последним аргументом при выборе фреймворка был язык программирования — Scala. Spark, который мы используем для обработки данных в кластере Hadoop, предоставляет возможность программирования на Python и Scala. Scala, будучи языком, изначально разработанным на парадигме функционального программирования, показался нам более удобным при работе со Spark, и было естественно использовать тот же язык для разработки сервиса.
Вернемся, собственно, к фитнес-браслетам и возможности получать с таких устройств значимые для оценки состояния организма данные.
Мы уверены, что регулярный мониторинг – именно мониторинг, а не измерение время от времени даже достаточно доступных физиологических параметров, таких как пульс, может помочь вовремя заметить негативные изменения и обратиться за профессиональной помощью.
Однако для расширения возможностей браслета мы дополнительно поработали над его прошивкой.
Любой фитнес-браслет с пульсометром так или иначе измеряет пульсовую волну с помощью плетизмографии, но не каждое устройство предоставляет эти данные для анализа.
То же самое и с ЭKG. Эти данные мы раскрыли в браслете Actenzo. Приложение обеспечивает измерения пульсовой волны с частотой дискретизации 84 Гц и МКГ с частотой 250 Гц, что позволило проанализировать вариабельность сердечного ритма в соответствии с рекомендациями рабочей группы Европейского общества кардиологов и Севера.
Американское общество стимуляции и электрофизиологии.
Мы также изменили способ представления данных о физической активности.
Традиционно браслеты сообщают только общий объем активности за весь период активности: сожженные калории или количество шагов за весь период тренировки.
Это не дает возможности оценить интенсивность нагрузки в разные периоды времени и сравнить ее, например, с пульсом.
Мы разбиваем период активности на пятиминутные интервалы, сообщая о нагрузке в каждом из них, что позволяет увидеть изменения интенсивности физической нагрузки и, по сравнению с вариабельностью пульса и сердечного ритма, точнее понять уровни нагрузки.
приемлемо для человека.
В целом браслет Actenzo совместно с приложением позволяет отслеживать следующие параметры:
- Пульс
- Физическая активность в виде шагов и калорий
- Продолжительность и фазы сна
- ЭКГ
- Пульсовая волна
- Вариабельность сердечного ритма, стресс и адаптационные резервы организма.
- Изменения артериального давления
Таким образом, пульсометры, использующие плетизмографию для измерения пульса, неизбежно сталкиваются с ограничениями при активном движении: кровь, как и любая жидкость, начинает колебаться не только в ответ на сокращение сердца, но и в такт движению тела.
Это ограничение не распространяется на пульсометры, измеряющие электрическую активность сердца.
Именно это и продиктовало включение в линейку поддерживаемых устройств нагрудного пульсометра Polar H10, который непрерывно снимает ЭЦГ пользователя, что позволяет использовать его во время интенсивных тренировок для точного измерения сердечного ритма и оценки адаптационного потенциала.
Для решения этой проблемы мы продолжаем работать как над алгоритмами, так и над линейкой доступных устройств, чтобы расширить количество измеряемых физиологических параметров и сделать картину состояния организма наших пользователей более полной.
Нам будет интересно, если вы расскажете в комментариях, для чего вы используете фитнес-браслет. Какие параметры вы отслеживаете регулярно, что вам это дает и чего не хватает в подобных сервисах? Теги: #здоровье #Гаджеты #Большие данные #Телемедицина #Medgadgets #фитнес-трекеры #фитнес-приложения #гаджеты для здоровья #Actenzo
-
Советы По Конвертации M2Ts На Mac
19 Oct, 24 -
Сравнение Поставщиков Услуг Dsl
19 Oct, 24 -
Софисты
19 Oct, 24 -
Жидкость От Coollaboratory: Большая Скидка
19 Oct, 24 -
Поможет Ли Chrome С Хабраэффектом?
19 Oct, 24 -
Конференция По Безопасности 2017: Отчеты
19 Oct, 24 -
Борьба С Zonaalarm 4.5
19 Oct, 24