17
0
0
Скопировать ссылку
Telegram
WhatsApp
Vkontakte
Одноклассники
Назад

Не замерзнуть и не вспотеть: создаем мобильное приложение для подбора одежды

Время чтения 5 минут
Нет времени читать?
Скопировать ссылку
Telegram
WhatsApp
Vkontakte
Одноклассники
17
0
0
Нет времени читать?
Скопировать ссылку
Telegram
WhatsApp
Vkontakte
Одноклассники

Меня зовут Варвара, и я совсем недавно защитила дипломную работу по разработке Android-приложения для подбора гардероба по погоде. На самом деле вопрос «Что надеть, чтоб не вспотеть и не замерзнуть?» близок каждому человеку. Мне самой не раз приходилось сталкиваться с ситуацией, когда утром сложно решить, что надеть. Днем жарко, а вечером резко холодает, и обычных прогнозов погоды недостаточно. Хотелось создать удобный инструмент, который не просто показывает температуру, а помогает принять практичное решение и делает выбор более простым и осознанным.

Не замерзнуть и не вспотеть: создаем мобильное приложение для подбора одежды

Выбор инструментов разработки

Чтобы создать приложение на операционную систему Android, существует много специальных инструментов, например Eclipse, Visual Studio, Unity и другие. Но я решила остановиться на самом популярном — Android Studio. Эта среда пользуется успехом среди разработчиков благодаря своей простоте: программист пишет код и сразу видит изменения интерфейса. Кроме того, разработку облегчает четкое структурирование файлов различных классов, возможность выбора языка программирования — Java или Kotlin, а также наличие множества встроенных библиотек. 

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

Процесс регистрации и входа в аккаунт пользователя реализован через Firebase Authentication. Этот сервис от Гугла простой в использовании и отлично обеспечивает работу с базами данных, таких как БД аккаунтов пользователей и их персональных элементов гардероба. 

Чтобы приложение выполняло свою основную функцию, ему необходимо дать доступ к погодным данным. Это удобно сделано через OpenWeatherMap. Сейчас много разных сервисов, которые в реальном времени передают погодные условия из любой точки мира, однако после анализа каждого из них было принято решение остановиться именно на этом варианте. Из основных преимуществ: бесплатный тариф, простая интеграция в приложение и поддержка формата JSON.

Как работает приложение

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

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

Цикл работы приложения

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

Процесс разработки

Углубимся во внутреннюю кухню приложения. Основной модуль — это алгоритм подбора рекомендаций. В этом фрагменте кода для двадцати распространенных материалов вручную прописаны три параметра (от 1 до 10 типа float): теплоизоляция, влагостойкость и защита от ветра. Значения этих параметров я определила самостоятельно, согласно известным свойствам ткани. 


private val materials = listOf(
   Material("Хлопок", 2.3f, 1.5f, 1.2f),
   Material("Шерсть", 4.7f, 2.8f, 3.5f),
   Material("Полиэстер", 3.2f, 3.6f, 3.1f),
   Material("Мембрана", 2.1f, 8.9f, 9.1f),
   Material("Пух", 7.5f, 2.3f, 3.8f),
   Material("Лён", 1.2f, 2.4f, 1.5f),
   Material("Нейлон", 2.7f, 7.2f, 6.8f),
   Material("Флис", 5.8f, 2.5f, 2.9f),
   Material("Деним", 3f, 1.5f, 4f),
   Material("Кожа", 3.5f, 4.2f, 7.5f),
   Material("Замша", 3.8f, 2.9f, 4.2f),
   Material("Акрил", 3.3f, 2.6f, 2.8f),
  ...

)

 

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


return scores.entries
   .sortedByDescending { it.value }
   .take(5)
   .map { it.key }

 

Баллы назначаются по такой логике: если осадки в виде дождя, в приоритете высокая влагостойкость. Значение этого параметра удваивается. Логично, что у кожи защита от влаги выше, чем у хлопка, поэтому и конечная сумма баллов будет больше. То же самое происходит при высокой скорости ветра. В коде имеется дополнительное условие для направления ветра «С» (северное). 


if (precipAmount > 0) {
   materialScore += when (precipType) {
       "Rain" -> material.moisture_resistance * 2 * sensitivityMultiplier
       "Snow" -> material.moisture_resistance * sensitivityMultiplier
       else -> 0.0
   }

 

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


// Исключаем слишком тёплые материалы при мягкой погоде
if (temp >= 10 && material.name in tooWarmMaterials) {
   materialScore -= 3.0
}

 

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

Что у меня получилось

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

Так выглядит основное меню приложения

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

Интерфейс приложения

Перспективы развития

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

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

Пока можно указать только один тип ткани для каждого предмета в гардеробе

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

Мои выводы и рекомендации

Работа над приложением стала для меня интересным и полезным опытом. Я познакомилась с новыми инструментами для разработки и повысила свой уровень программирования. Уверена, что тема подбора одежды по погодным условиям будет развиваться дальше, ведь это касается каждого человека. Тем, кто хотел бы глубже разобраться в вопросе, рекомендую материал Designing Weather-Based Recommendation Systems — в нем подробно рассматриваются подходы к созданию алгоритмов рекомендаций и примеры их практического применения.

Комментарии0
Тоже интересно
Комментировать
Поделиться
Скопировать ссылку
Telegram
WhatsApp
Vkontakte
Одноклассники