Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

2021ВКР750107ИСАКОВ

.pdf
Скачиваний:
8
Добавлен:
04.09.2023
Размер:
1.84 Mб
Скачать

Для проверки уникальности введенного логина и почты были

реализованы следующие аналогичные друг другу методы внутри класса

RegisterForm(FlaskForms):

def validate_username(self, username):

user = User.query.filter(username=username.data).firts()

if user is not None:

raise ValidationError(‘Имя пользователя занято’)

Рисунок 29 – Уведомление о необходимости заполнить обязательное поле

Включенный параметр «запомнить меня» (см. рисунок 30) ненадолго

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

случайно закрыт, позволит восстановить страницу без повторного ввода

пароля сочетанием клавиш Ctrl+Shift+T.

Рисунок 30 – Экранная форма окон авторизации (слева) и регистрации (справа), отражающая реакцию системы на возможные пользовательские ошибки

61

Помимо хэширования паролей с целью повышения уровня конфиденциальности все запросы от клиента к серверу передаются по защищенному технологией сквозного TLS шифрования протоколу передачи данных HTTPS (см. рисунок 31). Также по умолчанию модуль flask-wtf

обеспечивает защиту от межсайтовой подделки запросов (CSRF).

Рисунок 31 – Безопасное подключение по протоколу HTTPS

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

3.2 Добавление записи о приеме пищи

После регистрации и авторизации приложение переводит пользователя на страницу добавления приемов пищи. Как видно на рисунке 32 слева, форма состоит из полей добавления даты, времени и типа приема пищи. По умолчанию в окне «Укажите прием пищи» стоит «авто», это означает, что программа узнает текущее время исходя из выставленного на компьютере пользователя. Затем определит тип приема пищи «завтрак, обед, ужин,

перекус» в соответствии с правилами: завтрак с 7:00 до 11:30, обед с 12:00 до

15:00 и ужин с 18:00 до 22:00, остальное – перекусы. Однако, это необязательно, в случае если у пациента есть индивидуальный график питания по времени, он может вручную выставить правильное значение.

62

Последнее поле – «Сахар до приема пищи» принимает в себя как целые,

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

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

Рисунок 32 – Экранная форма мобильной версии страниц добавления приема пищи (слева) и поиска продукта в базе данных (справа)

Все когда-либо записанные приемы пищи хранятся в архиве (см.

рисунок 33). Здесь же представлена краткая информация по макронутриентам.

Рисунок 33 – Экранная форма архивной страницы всех приемов пищи

63

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

Рисунок 34 – Экранная форма электронного дневника приемов пищи пользователя

Для повышения ответственности при заполнении дневника и отсеивания небрежно оформленных записей, пациенту предлагается отмечать дни,

которые, как он считает, заполнены полностью (см. рисунок 35).

Соответствующая информация также будет занесена в электронный отчет по пользователю.

Рисунок 35 – Календарная форма графика приемов пищи

64

При нажатии на кнопку «Отправить» (см. рисунок 35) скрипт формирует

Excel файл на основе записей, сохраненных в базе данных. Отчет содержит несколько таблиц, в том числе упомянутых нами ранее: приемы пищи,

предсказание уровня сахара в крови, физическая нагрузка и сон, список полных дней и удаленных записей. На рисунке 36 представлена лист «Приемы пищи». Дни чередуются в соответствии с цветовой раскраской. Ниже располагаются рассчитанные средствами библиотеки sqlite3 средние значения нутриентов по дням. Всего в таблицу в отчете входит 29 макро- и

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

Рисунок 36 – Табличная форма дневника приемов пищи Для скачивая отчета на персональное устройство пациента была

реализована следующая функция:

@app.route('/download, methods=['GET', 'POST']) @login_required

def download_file():

if request.method == 'POST':

dirname = os.path.dirname(__file__)

file_path = os.path.join(dirname, '%s.xlsx' % session["username"])

do_table()

return send_file(file_path, as_attachment=True)

Метод do_table ( ) приведен в приложении А.

65

3.3 Добавление записи о физической нагрузке и сне

Раздел физической активности представлен на странице в виде двух таблиц: нагрузок в течение дня и продолжительности сна (см. рисунок 37).

Пользователю предлагается всего несколько видов активности: ходьба,

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

Рисунок 37 – Экранная форма страницы добавления физической активности Регулярный учет количества и продолжительности итераций физической нагрузки и сна не всегда важен врачу. Нижеприведенное изображение (см. рисунок 38) демонстрирует то, как веб-приложение

обрабатывает пропущенные записи.

Рисунок 38 – Табличная форма дневника физической нагрузки и сна пользователя

В качестве дополнительного функционала в веб-приложении предлагается к использованию JavaScript виджет расчета ИМТ, см. рисунок 39.

При наборе параметров (массы в кг и роста в см) скрипт автоматически рассчитывает ваш ИМТ и динамически изменяет его значение. Виджет сделан средствами JavaScript модуля React. Суть его работы заключается в том, что

66

при срабатывании функции on_change ( ) React формирует виртуальную объектную модель документа (DOM) и сравнивает ее с той, что есть в действительности. Затем вычленяет тот react компонент, которые претерпел изменения и без перезагрузки страницы изменяет его содержание.

Рисунок 39 – Калькулятор индекса массы тела

При нажатии кнопки «Сохранить» происходит формирование JSON

файла и отправка его на сервер для последующей записи в базу данных:

@app.route("/setMBI", methods=['GET', 'POST']) def setMBI():

if request.method == 'POST': jsonBMI = request.get_json() con = sqlite3.connect(db) cur = con.cursor()

cur.execute("UPDATE user SET BMI = ? WHERE id = ?", (jsonBMI['BMI'], session["user_id"]))

con.commit()

con.close()

Такой подход стал возможным благодаря программному интерфейсу

JavaScript – Fetch API. Соответствующий ему метод fetch ( ) предоставляет нам возможность работы с запросами и ответами HTTP. В нашем случае со стороны клиента мы совершаем POST запрос к серверу, передавая в теле запроса JSON файл и ожидая ответ в виде Response объекта.

67

3.4 Модель прогнозирования уровня сахара в крови

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

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

(7,0 ммоль/л), система выведет предупреждение «УСК превысит норму».

Кроме того, при формировании Excel отчета по пользователю, приложение добавит сводную таблицу (см. рисунок 40) в новый лист «Предсказание сахара». Помимо общей информации о приеме пищи и начального УСК,

указывается ИМТ и показатель гликемической нагрузки, полученный в результате умножения количества углеводов в потребляемой пище на ее гликемический индекс.

Рисунок 40 – Табличная форма результатов предсказания постпрандиального гликемического ответа

Оценка модели ранее была проведена сотрудниками кафедры и НМИЦ им. В.А. Алмазова в ходе исследования посвященного ГСД [24].

Окончательная точность оценивалась по данным ранее не привлекавшихся пациентов, численностью 25% от общей выборки. Окончательный набор данных составил 3240 записи. В качестве ключевых параметров для оценки модели были выбраны: коэффициент корреляции Пирсона (R = 0,644) и

средняя абсолютная ошибка (MAE = 0,377 ммоль/л*ч).

68

По итогам сравнения полученных показателей точности с результатами из недавних статей [45, 46], оценили их как аналогичные по уровню точности.

3.5 SQLite база данных

Итоговая структура БД (см. рисунок 41) отличается от теоретически изложенной нами в таблице 1.

Рисунок 41 – Структура базы данных Разобьем все таблицы на две категории: пользовательские записи и

продукты питания. К пользовательским относятся:

user – регистрационные данные;

activity и sleep – разбитые на две части для удобства записи и отображения информации таблицы физических нагрузок и сна;

basket и favourites – вспомогательная и основная таблицы, содержащие записи о планируемой и потребленной пище;

deleted – хранит сведения об удаленных записях;

full_days – отражает регулярность внесения пациентами записей.

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

3.6 Выводы

На основе современного веб-фреймворка Python Flask была реализована система удаленного мониторинга диеты и физической активности. Веб-

69

приложение представляет собой набор из нескольких интернет-страниц,

предлагающих выбрать из предложенной базы продуктов питания блюдо,

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

приложение реализует систему контроля над регулярностью физических нагрузок и продолжительностью сна. В будущем предполагается реализовать работу приложения в рамках медицинских исследовательских центров,

поликлиник. Однако, уже сейчас оно прошло первичную апробацию врачами Института Эндокринологии НМИЦ им. В.А. Алмазова. Впечатления в целом можно оценить как положительные. Процесс регистрации оказался удобнее,

чем в мобильном приложении ДиаКомпаньон [21], с другой стороны, процесс редактирования введенных приемов пищи ждут дальнейшие улучшения.

70