Содержание


Разработка интеллектуальных носимых устройств для сферы здравоохранения: Часть 3

Разработка интеллектуальных носимых устройств для сферы здравоохранения: Часть 3. Использование служб Watson в приложениях для носимых устройств

Comments

Серия контента:

Этот контент является частью # из серии # статей: Разработка интеллектуальных носимых устройств для сферы здравоохранения: Часть 3

Следите за выходом новых статей этой серии.

Этот контент является частью серии:Разработка интеллектуальных носимых устройств для сферы здравоохранения: Часть 3

Следите за выходом новых статей этой серии.

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

В этой статье мы используем приложение Node.js Starter из службы IBM Watson Tradeoff Analytics и настраиваем его для визуализации данных, имитирующих показания носимых датчиков. Служба IBM Tradeoff Analytics, как было описано в предыдущих статьях, помогает пользователям принимать решения, предоставляя возможность сравнивать альтернативные варианты. В данном случае мы хотим создать приложение, помогающее пользователю находить баланс между тренировками на выносливость, силовыми упражнениями и снижением веса, а также получать рекомендации на основе данных об упражнениях и диете. Кроме того, приложение будет предоставлять пользователю визуализацию, фильтрующую первоначальный список данных для вывода различных вариантов, из которых пользователь затем сможет выбирать.

Что вам потребуется для разработки приложения

Развертывание приложения Tradeoff Analytics с использованием команд Cloud Foundry

Многие из описываемых действий можно выполнить в пользовательском интерфейсе IBM Bluemix, но здесь приводится их выполнение с использованием интерфейса командной строки Cloud Foundry.

  1. Получите Node.js-приложение Tradeoff Analytics из GitHub (https://github.com/watson-developer-cloud/tradeoff-analytics-nodejs) одним из следующих способов:
    • Загрузите архив .zip и распакуйте его в каталог watsonta.
    • Если вы используете Git, клонируйте этот репозиторий в каталог watsonta.
  2. Перейдите в каталог watsonta и отредактируйте файл manifest.yml, как показано в листинге 1. Для параметра label можно указать любое имя (в этом примере мы используем имя watsonta).
    Листинг 1. Файл manifest.yml
    ---
    declared-services:
      tradeoff-analytics-standard-service:
        label: watsonta
        plan: standard
    applications:
    - services:
      - tradeoff-analytics-standard-service
      name: tradeoff-analytics-nodejs
      command: node app.js
      path: .
      memory: 128M
  3. Войдите в IBM Bluemix, выполнив из каталога watsonta, в который был загружен исходный код, следующую команду:

    cf login -a https://api.ng.bluemix.net.

  4. Введите свои учетные данные и выберите рабочее пространство, если у вас их несколько.
  5. Перенесите код в IBM Bluemix, выполнив следующую команду:

    cf push watsonta -no-start

  6. Создайте экземпляр службы Tradeoff Analytics, выполнив следующую команду:

    cf create-service tradeoff_analytics standard tradeoff_analytics_node.js.

    Будет выведено сообщение о статусе, а также предупреждение о том, что служба не бесплатна (см. рисунок 1). Однако если вы зарегистрировались для пробного использования IBM Bluemix, служба IBM Watson Tradeoff Analytics будет для вас бесплатна в течение 30 дней. В ином случае этот API будет бесплатен для первых 1000 вызовов в месяц, а стоимость каждого последующего вызова будет составлять 0,03 цента. Поэтому после завершения работы с этим руководством обязательно закройте приложение (если только не планируете продолжить его использование).


    Рисунок 1. Команда создания экземпляра службы для использования в приложении и последующие сообщения со статусом и предупреждением
    Command to create a service instance to use in the                             application and the subsequent status and warning messages
    Command to create a service instance to use in the application and the subsequent status and warning messages
  7. Привяжите экземпляр службы к экземпляру приложения watsonta, выполнив следующую команду:

    cf bind-service watsonta tradeoff_analytics_nodejs.

    Эта команда связывает экземпляр приложения с экземпляром службы Tradeoff Analytics, имеющим имя tradeoff_analytics_nodejs.

  8. Обновите приложение, выполнив следующую команду:

    cf restage watsonta.

    Наберитесь терпения, поскольку для этого может потребоваться несколько минут.

    Кроме того, можно выполнить команду cf start watsonta, которая также выполняет обновление приложения перед его запуском.

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

  9. Войдите в Bluemix под своей учетной записью. На панели Bluemix вы увидите экземпляр приложения, который выполняется, и службу, которая к нему привязана (см. рисунок 2).
    Рисунок 2. Фрагмент панели IBM Bluemix, показывающий выполняемое приложение watsonta и привязанную к нему службу
    Partial view of the IBM Bluemix                             dashboard that shows your watsonta Tradeoff Analytics                             application running on Bluemix and the service bound to                             it.
    Partial view of the IBM Bluemix dashboard that shows your watsonta Tradeoff Analytics application running on Bluemix and the service bound to it.
  10. Откройте пользовательский интерфейс для приложения watsonta, воспользовавшись одним из следующих методов:
    • Скопируйте маршрут или URL, отображаемый под именем приложения.
    • Щелкните по кнопке open website под приложением watsonta рядом с текстом Running.

    Приложение откроется в новой вкладке или в новом окне (см. рисунок 3).


    Рисунок 3. Приложение Tradeoff Analytics NodeJS Starter, выполняемое в Bluemix
    Tradeoff Analytics NodeJS starter application that is running on Bluemix
    Tradeoff Analytics NodeJS starter application that is running on Bluemix

Настройка приложения NodeJS Starter

Развернув приложение NodeJS Starter, приступайте к его настройке. Перед тем как начать, изучите общую структуру кода приложения.

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

Включение в файл переменных среды узла ваших учетных данных в Bluemix

Сначала изменим файл app.js. Внесенные изменения позволяют включить ваши учетные данные в Bluemix в файл переменных среды узла. Если вы используете Git, добавьте env в Git ignore, чтобы случайно не сохранить ваши имя и пароль в системе контроля версий. Внесенные изменения приведены в листинге 2.

Листинг 2. Файл app.js
'use strict';

var express = require('express'),
  app = express(),
  bluemix = require('./config/bluemix'),
  watson = require('watson-developer-cloud'),
  extend = require('util')._extend,
  env = require('node-env-file');

// Загружаем настройки приложения
require('./config/express')(app);

env(__dirname + '/.env');

// если учетные данные в bluemix существуют, то переопределяем локально
var credentials = extend({
  version: 'v1',
  username: '<username>',
  password: '<password>'
}, {
  username: process.env.USERNAME,
  password: process.env.PASSWORD
}, bluemix.getServiceCreds('tradeoff_analytics')); // VCAP_SERVICES

// Создаем оболочку службы
var tradeoffAnalytics = watson.tradeoff_analytics(credentials);

// воспроизводим индексную страницу
app.get('/', function(req, res) {
  res.render('index');
});

app.post('/', function(req, res) {
  tradeoffAnalytics.dilemmas(req.body, function(err, dilemmas) {
    if (err)
      return res.status(err.code || 500).json(err.error || 'Error processing the request');
    else
      return res.json(dilemmas);
  });
});

var port = process.env.VCAP_APP_PORT || 3000;
app.listen(port);
console.log('listening at:', port);

Добавление новых данных путем замены файлов JSON

Теперь мы хотим удалить файлы JSON из каталога public/problems/ и добавить в него собственные файлы JSON с целевыми показателями снижения веса, тренировок на выносливость и силовых упражнений. Файлы JSON по сути определяют кандидатов, которые служба Tradeoff оценивает относительно целей, определенных в файле. Цели также ограничивают масштаб задачи. Для получения дополнительной информации о том, как работают входные и выходные данные для службы, ознакомьтесь с документацией.

В данном случае мы хотим работать только с тремя задачами, создавая файлы JSON, которые их описывают. Например, для задачи тренировки на выносливость мы создали файл JSON с именем endurance-training.json (см. листинг 3).

Листинг 3. Файл endurance-training.json
endurance-training.json 
{
  "subject": "Endurance",
  "columns": [
    {
      "key": "heart_rate",
      "full_name": "Heart Rate",
      "type": "numeric",
      "is_objective": true,
      "goal": "max",
      "defaultValue": 0
    },
    {
      "key": "duration",
      "full_name": "Duration (Seconds)",
      "type": "numeric",
      "is_objective": true,
      "goal": "max",
      "format": "####0 s",
      "defaultValue": 0
    },
    {
      "key": "mode",
      "full_name": "Exercise Type",
      "type": "categorical",
      "goal": "min",
      "is_objective": true,
      "range": ["run", "row", "sprints", "lifts"],
      "preference": ["run", "row", "sprints", "lifts"],
      "defaultValue": "lifts"
    },
    {
      "key": "total_protein",
      "full_name": "Protein (g)",
      "type": "numeric",
      "goal": "max",
      "is_objective": true,
      "significant_gain": 0.5,
      "format": "####0 g",
      "defaultValue": 0
    },
    {
      "key": "calories_burned",
      "full_name": "Calories Burned",
      "type": "numeric"
    },
    {
      "key": "weight",
      "full_name": "Weight Lifted",
      "type": "numeric",
      "format": "####0 LB"
    },
    {
      "key": "reps",
      "full_name": "Exercise Reps",
      "type": "numeric"
    }
  ]
}

Как видите, файл JSON определяет набор столбцов, которые могут быть целью или данными. Этот и другие файлы JSON можно загрузить из проекта Сэма в GitHub и сохранить в каталог /public/problems.

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

Добавление данных

Теперь в каталоге public/ создадим каталог datasets. Здесь мы определим несколько файлов JSON, которые будут хранить данные, имитирующие показания носимых датчиков, или данные, введенные в приложение для управления диетой. Например, создадим файл examples.json (см. листинг 4).

Листинг 4. Файл examples.json
{
  "exercises_plans": [
    {
      "name": "Run 5k",
      "calories_burned": 600,
      "duration": 2700,
      "heart_rate": 170,
      "mode": "run"
    },
    {
      "name": "Sprints",
      "calories_burned": 300,
      "duration": 700,
      "heart_rate": 185,
      "mode": "run"
    },
    {
      "name": "Bench Press 3 Sets 3 Reps",
      "calories_burned": 90,
      "reps": 3,
      "weight": 200,
      "duration": 360,
      "heart_rate": 110,
      "mode": "lifts"
    },
    {
      "name": "Bench Press 5 Sets 10 Reps",
      "calories_burned": 120,
      "reps": 10,
      "weight": 80,
      "duration": 480,
      "heart_rate": 130,
      "mode": "lifts"
    },
    {
      "name": "Squat 3 Sets 5 Reps",
      "calories_burned": 120,
      "reps": 5,
      "weight": 220,
      "duration": 360,
      "heart_rate": 120,
      "mode": "lifts"
    },
    {
      "name": "Squat 5 Sets 20 Reps",
      "calories_burned": 150,
      "reps": 20,
      "weight": 60,
      "duration": 520,
      "heart_rate": 160,
      "mode": "lifts"
    },
    {
      "name": "Pull-ups weighted 3 Sets 5 Reps",
      "calories_burned": 115,
      "reps": 3,
      "weight": 185,
      "duration": 300,
      "heart_rate": 120,
      "mode": "lifts"
    },
    {
      "name": "Pull-ups 5 Sets 10 Reps",
      "calories_burned": 150,
      "reps": 10,
      "max_weight": 160,
      "duration": 480,
      "heart_rate": 155,
      "mode": "lifts"
    },
    {
      "name": "Rowing 30 minutes",
      "calories_burned": 700,
      "duration": 1800,
      "heart_rate": 180,
      "mode": "row"
    }
  ]
}

Как видите, данные в этом файле описывают упражнение, а также имитируют такие данные, как продолжительность в секундах, пульс и количество сжигаемых калорий. Этот файл, а также файл food.js можно загрузить из проекта Сэма в GitHub и сохранить в каталог /datasets.

Обновление пользовательского интерфейса

После внесения изменений в данные можно использовать Watson для выполнения всей сложной алгоритмической обработки. Большинство приложений должны предоставлять пользовательский интерфейс для работы с результатами службы Tradeoff. Для краткости в этом руководстве рассматриваются лишь некоторые изменения в файле /public/js/index.js, но вам следует изучить всю историю изменений в проекте Роби в GitHub.

Сначала рассмотрим вызов основного API. Для вызова службы IBM Watson Tradeoff Analytics Service необходимо только вызвать переменную Tradeoff API, определенную в файле app.js. В файле index.js мы используем этот вызов функции для API:

  function loadTradeoffAnalytics(profile, themeName, callback, errCallback) {
    taClient = new TA.TradeoffAnalytics({
      dilemmaServiceUrl: '/',
      customCssUrl: 'https://ta-cdn.mybluemix.net/v1/modmt/styles/' + themeName + '.css',
      profile: profile
    }, 'taWidgetContainer');

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

После вызова службы нужно передать в нее наши наборы задач и наборы данных. Мы используем функцию onPageLoad(), в которую добавлены функции loadExcercises(), loadFood() и loadSelectedProblem().

  function onPageLoad() {
    loadTradeoffAnalytics('basic', 'watson', onPageReady, onError);
    loadProfile('basic');
    loadTheme('watson');
    loadExercises().then(function() {
      loadFood().then(function() {
        loadSelectedProblem().then(function() {
          onProblemChanged();
          $('.problemText').change(onProblemChanged);
        });
      });
    });
  }

Функция onPageLoad() загружает оцениваемые задачи и данные для задач из определенных нами файлов JSON. Следующие функции JavaScript выполняют такую загрузку данных:

  function loadExercises() {
    var path = 'datasets/exercises.json';
    return $.getJSON(path, function(data) {
      $('.exercisesText').val(JSON.stringify(data, null, 2)).change();
    });
  }

Остальная часть кода в основном предоставляет данные для таблицы и виджета Tradeoff Analytics или обрабатывает такие события, как обновления. Если вы посмотрите на оставшуюся часть файла index.js, помня о созданных файлах JSON, то быстро увидите, что происходит.

Данные JSON передаются из одного из файлов задач в API дилемм службы IBM Watson Tradeoff Analytics Service. API анализирует отправленную информацию и возвращает JSON-документ Dilemma, содержащий две структуры JSON. Это исходная задача и ее решение. Объект JSON с решением содержит представление оптимальных вариантов и их характеристик, определенных службой Watson Tradeoff Analytics Service. Благодаря тому, что представление этих оптимальных вариантов возвращается в двумерном пространстве, их можно визуализировать в виджете Tradeoff Analytics, который мы вызываем в index.js.

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

Загрузка кода и повторное развертывание приложения

  1. Проверив и обновив новый код, получите его из репозитория и создайте его новый экземпляр, либо просто скопируйте исходное приложение Tradeoff Analytics.
  2. Для загрузки нового кода используйте команды cf-push, как делали это прежде.
  3. Перейдите на панель IBM Bluemix, выполните повторное развертывание обновленного приложения и запустите его.
  4. Скопируйте и вставьте маршрут, или IBM Bluemix URL, чтобы увидеть новое приложение (см. рисунок 4).
    Рисунок 4. Демонстрация приложения Health and Fitness Tradeoff Analytics с табличным представлением вариантов и целей
    Health and Fitness Tradeoff Analytics demo show tabular data representation of options versus goals
    Health and Fitness Tradeoff Analytics demo show tabular data representation of options versus goals

Сравнение различных вариантов и целей можно также посмотреть на рисунке 5.

Рисунок 5. Виджет Tradeoff Analytics, показывающий сравнение различных целей и вариантов
Tradeoff Analytics widget showing tradeoffs between various goals and options
Tradeoff Analytics widget showing tradeoffs between various goals and options

Заключение

В первой статье этой серии описаны некоторые проблемы на современном рынке носимых устройств, включая отсутствие полезных приложений с развитыми аналитическими возможностями. Во второй статье представлены основы проектирования и настройки когнитивного приложения с использованием API-интерфейсов и инфраструктуры IBM Watson. В этой заключительной статье описано использование службы IBM Watson Tradeoff Analytics Service, а также настройка примера приложения, позволяющего пользователям носимых устройств визуализировать баланс тренировок на выносливость, силовых упражнений и снижения веса.


Ресурсы для скачивания


Похожие темы


Комментарии

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

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Когнитивное программированиеs, Internet of Things, Облачные вычисления
ArticleID=1031714
ArticleTitle=Разработка интеллектуальных носимых устройств для сферы здравоохранения: Часть 3: Разработка интеллектуальных носимых устройств для сферы здравоохранения: Часть 3. Использование служб Watson в приложениях для носимых устройств
publish-date=05172016