Лучшие выпускные работы весеннего семестра Технопроектов
Наш новый рассказ о выпускных проектах студентов наших учебных проектов — последний в этом году. На этот раз мы познакомим вас с тремя работами студентов Технопарка, Технополиса и Техносферы. Это выпускные проекты по результатам двухлетнего обучения, и жюри выбрало их как наилучшие работы. Также хотим напомнить, что программы обучения в Технопарке, Технополисе и Техносфере имеют собственную специализацию и сильно различаются.
Предыдущие публикации: 1, 2, 3, 4, 5.
Студенты, защищавшие проекты, сталкиваются с этими технологиями впервые. На проект уходит один семестр, цель статьи — показать учебный процесс и результаты работы студентов.
Facepick, Технополис
Сервис поиска фотографий по лицам.
На массовых мероприятиях — конференциях, праздниках, корпоративах, свадьбах — делают сотни, а то и тысячи фотографий. И поиск снимков, на которых есть ты и твои друзья или близкие, занимает очень много времени. Поэтому команда проекта решила сделать сервис для быстрого поиска фотографий, на которых есть заданные лица.
Система с помощью нейронных сетей сначала распознаёт лица на эталонных снимках, а затем кластеризует базу фотографий по найденным людям. Сервис умеет работать со внешними источниками: ВКонтактом, Одноклассниками, Яндекс.Диском и Google Drive.
Обработанный альбом представляет собой набор фотопаков, каждый из которых содержит фотографии одного человека. На странице обработанного альбома пользователь может просмотреть фотографии конкретного фотопака, а также скачать его к себе на устройство, либо поделиться с друзьями. Можно воспользоваться поиском в обработанном альбоме, загрузив фотографию человека.
Сервис представляет собой клиент-серверное приложение с REST API. Серверная часть состоит из двух основных компонентов: Java-приложения, в котором реализована логика взаимодействия пользователя с сервисом; и Python-приложения для определения лиц на фотографиях и извлечения их уникальных признаков при помощи нейронной сети.
Авторы делали упор на масштабируемость, поэтому применили балансировщик для регулирования нагрузки на бэкенд, а использование очереди сообщений Redis для взаимодействия Java- и Python-приложений позволяет независимо изменять число инстансов этих компонентов.
Все сервисы разворачивается в отдельных Docker-контейнерах, а для их оркестрации используется docker-compose. Для реализации клиентской части приложения использовали TypeScript и React. В качестве персистентного хранилища данных применена база данных PostgreSQL.
В дальнейшем выпускники хотят повысить точность распознавания, добавить фильтры по полу и возрасту, а также поддержку Facebook и Google Photos. Также есть идеи по монетизации сервиса ограничением бесплатной функциональности и введением рекламы.
Команда проекта: Вадим Дьячков, Егор Шахмин, Николай Рубцов.
Видео с защитой проекта.
Playmakers, Технопарк
Программно-аппаратное решение для журналирования спортивных тренировок.
Так получилось, что все участники команды проекта увлекаются спортом. Приходя в зал и наблюдая, как люди журналируют свои тренировки и прогресс, студенты задавались вопросом — можно ли улучшить этот процесс? После исследований и опросов команда поняла, что существующие приложения для ведения тренировок имеют слишком сложный UX, а носимые устройства, которые есть на рынке, хорошо работают, в основном, с кардиотренировками (бег, эллипс и т.п.). В результате они сформулировали свою схему работы:
Устройство сделали самостоятельно, потому что интеграция с существующими решениями (например, MiBand) оказалась очень трудоемкой, а в случае с часами и браслетами разработчиков не устроило размещение на запястье, это давало меньше информации о паттернах движений.
В качестве аппаратной платформы выбрали модуль ESP32-WROOM в составе ESP32-devkit-v1. Она удовлетворяла определённым требованиям, под неё написаны утилиты генерирования кода и прошивки на Python, и к тому же её можно программировать из Arduino IDE как любую плату Arduino. На роль датчиков выбрали модуль Amperka IMU, в состав которого входит акселерометр и гироскоп. Вс` общение с датчиками происходит по протоколу I2C.
Схема прототипа:
Для следующей версии устройства печать платы и пайку компонентов заказали в Китае.
Далее нужно было обучить нейросеть распознавать различные упражнения. Однако открытых наборов данных, которые содержали бы в себе временные ряды с акселерометра и гироскопа во время физической активности, не так много. И большинство из них охватывают только бег, ходьбу и т. п. В итоге, решили сделать обучающий набор самостоятельно. Выбрали три основных упражнения, которые не требовали специального оборудования: отжимания, приседания и скручивания.
Данные с акселерометра после фильтрации.
Данные с гироскопа после фильтрации.
За классификацию упражнений отвечает рекуррентная нейронная сеть с архитектурой LSTM. Для удобства визуализации временных рядов использовали метод главных компонент (PCA).
Результат работы нейросети (оранжевая линия — вероятность выполнения отжиманий, зеленая — приседаний).
Для подсчета количества повторений использовали метод подсчета локальных максимумов, учитывая базовый уровень сигнала. После достижения удовлетворительных результатов, взялись за мобильное приложение. Одним из условий была разработка такого интерфейса, который требовал бы минимального взаимодействия со смартфоном. В качестве паттерна проектирования выбрали MVP.
Интерфейс приложения:
Кроме клиентского приложения авторы разработали вспомогательную программу Batcher, которая облегчала запись и разметку данных для обучения нейросети:
Кроме того, авторы написали механизм валидации батчей после их сохранения в БД.
Для хранения временных рядов была выбрана база InfluxDB, которая адаптирована под такие задачи. Для реализации сервиса машинного обучения выбрали стандартный стэк из Python, Django и Celery. Очередь задач позволил выполнять задачу классификации асинхронно, не блокируя основной интерфейс приложения.
Для хранения данных о пользователях взяли Postgres, сам бэкенд приложения реализовали на Go с использованием фреймворка Gin.
Общая архитектура.
В итоге, команда достигла своих целей и разработала MVP-версию продукта, который позволяет с помощью одной кнопки решить задачу журналирования тренировки. Сейчас студенты работают над снижением себестоимости и уменьшением габаритов устройства, повышает точность работы нейросети и расширяет набор поддерживаемых упражнений.
Команда проекта: Олег Соловьев, Темирлан Рахимгалиев, Владимир Елфимов, Антон Мартынов.
Видео с защитой проекта.
GestureApp, Техносфера
Фреймворĸ бесĸонтаĸтного интерфейса.
Иногда пользоваться привычными тактильными интерфейсами становится неудобно или нежелательно. Например, когда управляешь автомобилем, пользуешься банкоматом или платёжным терминалом, или когда просто испачканы руки. Для решения этой задачи авторы создали фреймворк бесконтактного интерфейса, который позволяет жестами управлять приложением.
Для работы GestureApp нужна видеокамера, сигнал с которой обрабатывается в реальном времени, чтобы распознать жесты пользователя. И в зависимости от жестов фреймворк даёт соответствующие команды приложению.
Вычислительная нагрузка относительно невелика, фреймворк может работать на достаточно слабых устройствах и не требует специального оборудования.
Жесты распознаёт нейронная сеть MobileNet3D. Нейросеть выдает вероятности классов жестов, а также специального класса «отсутствие жеста». Такая архитектура позволяет распознавать как статичные, так и динамические жесты. Обучалась нейросеть на датасете Jester. Достигнута точность прогнозирования F1=0,92.
Поток захвата получает кадры с фронтальной камеры и помещает их в конец списка. Если его длина больше 32, поток захвата будит поток исполнения модели. Тот берет 32 кадра из начала списка, прогнозирует классы, затем удаляет элементы с конца, пока не останется один элемент. Благодаря этому не нужна тяжелая синхронизация и существенно повышается производительность: 20 FPS на iPhone 11, 18 FPS на iPhone XS Max, 15 FPS на iPhone XR. А с помощью «умного» конвейера предварительной и последующей обработки энергопотребление снижено до минимума.
Пока что фреймворк работает только под iOS и Windows. В разработке применялись фреймворк PyTorch, платформа TwentyBN и язык Swift.
В планах: улучшать качество распознавания, добавлять распознавание новых жестов без переобучения всех моделей, создать версию под Android, добавить не только жесты-кнопки, но и жесты-ползунки.
Команда проекта: Максим Матюшин, Борис Константиновский, Мирослав Морозов.
Видео с защитой проекта.
Подробнее о наших образовательных проектах вы можете почитать по этой ссылке. И почаще заходите на канал Технострим, там регулярно появляются новые обучающие видео о программировании, разработке и других дисциплинах.