Skip to content

nepoyasnit/dls_image_bot

Repository files navigation

DLS Image Bot

Суть проекта: телеграм-бот для переноса стиля. Для реализации самого бота был применен асинхронный фреймворк aiogram. Для самого переноса стиля используется нейронная сеть на PyTorch. (по мотивам алгоритма)

Примеры изображений

This is an image This is an image

Демонстрация работы

image image image

Демонстрация работы диалога(примерная)

image

Особенности реализации.

  1. Общение с ботом("болталка"). Добавил модель ответа на сообщения пользователю, которую реализовывал в рамках практики в университете. Данные с соревнования Яндек.Алгоритм2018(часть датасета, на котором обучили Алису). Не вдаваясь в подробности, векторизация текста tf-idf, преобразовав вопросы в числовые векторы и использовать метод k-ближайших соседей. Также размерность данных была сокращена простым методом главных компонент. Не получилось адекватно собрать модель в .pkl, решил обучать её при запуске бота(т.к. это длится менее минуты) Реализовал так, что когда ты пишешь сообщения, не связанные с его функционалом он вместо обычного игнора отправляет тебе диалоговый ответ на твою фразу. Таким образом, не создается неловкое молчание :)
  2. Асинхронность. aiogram -> весь интерфейс асинхронный. Чтобы обработка изображения не блокировала основной поток был использован модуль threading. Соответственно сама обработка изображения и пересылка результата пользователю запускаются в отдельном потоке с помощью threading.Thread. То есть бот не зависает, а позволяет продолжать диалог.
  3. Для удобности интерфейса были использованы Inline-клавиатуры.
  4. Дополнительно создан класс для предобработки присланных изображений. Так как их надо приводить к одному размеру, но и не хочется терять соотношение сторон,- изображения ресайзятся с добавлением паддинга, с чем нам помогает ImageOps.pad из либы Pillow. При отправке пользователю изображение ресайзится обратно до исходного размера с помощью ImageOps.fit
  5. Взято только 11 первых слоев VGG-19, чтоб не качать всю модель, но при этом их хватает для реализации алгоритма.
  6. Докер

Структура проекта

  1. В папке handlers расположены все хэндлеры
  2. В папке images - изображения предлагаемых стилей, а также их описание, и примеры работы
  3. В папке style_model лежит сам алгоритм переноса стиля
  4. В папке load_model лежат веса VGG-19, а также их подгрузка
  5. В папке talk_model лежит алгоритм "болталки"
  6. В папке states находится класс состояний для бота
  7. В папке commands доп. скрипты(назначение дефолтных комманд для бота)
  8. Модуль app отвечает за непосредственный запуск бота и окончание его работы
  9. Модуль keyboards отвечает за все inline-клавиатуры
  10. Модуль loader отвечает за создание самого бота, хранилища, event_loop, диспетчера, а также за подгрузку предлагаемых стилей
  11. В модуле text_messages лежат большие текстовые сообщения от бота, сообщение приветствия, а также главного меню.
  12. В requirements.txt лежат все необходимые библиотеки. Установить их можно все сразу командой pip -r requirements.txt

TO DO:

  1. Хотелось бы также добавить ган по улучшению качества фотографии, т.к. интересно разобраться. Таким образом, покрыть сразу две предложенные на проект таски.
  2. To be continued...

About

Итоговый проект по курсу DLS

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published