Суть проекта: телеграм-бот для переноса стиля. Для реализации самого бота был применен асинхронный фреймворк aiogram. Для самого переноса стиля используется нейронная сеть на PyTorch. (по мотивам алгоритма)
- Общение с ботом("болталка"). Добавил модель ответа на сообщения пользователю, которую реализовывал в рамках практики в университете. Данные с соревнования Яндек.Алгоритм2018(часть датасета, на котором обучили Алису). Не вдаваясь в подробности, векторизация текста tf-idf, преобразовав вопросы в числовые векторы и использовать метод k-ближайших соседей. Также размерность данных была сокращена простым методом главных компонент. Не получилось адекватно собрать модель в .pkl, решил обучать её при запуске бота(т.к. это длится менее минуты) Реализовал так, что когда ты пишешь сообщения, не связанные с его функционалом он вместо обычного игнора отправляет тебе диалоговый ответ на твою фразу. Таким образом, не создается неловкое молчание :)
- Асинхронность. aiogram -> весь интерфейс асинхронный. Чтобы обработка изображения не блокировала основной поток был использован модуль threading. Соответственно сама обработка изображения и пересылка результата пользователю запускаются в отдельном потоке с помощью threading.Thread. То есть бот не зависает, а позволяет продолжать диалог.
- Для удобности интерфейса были использованы Inline-клавиатуры.
- Дополнительно создан класс для предобработки присланных изображений. Так как их надо приводить к одному размеру, но и не хочется терять соотношение сторон,- изображения ресайзятся с добавлением паддинга, с чем нам помогает ImageOps.pad из либы Pillow. При отправке пользователю изображение ресайзится обратно до исходного размера с помощью ImageOps.fit
- Взято только 11 первых слоев VGG-19, чтоб не качать всю модель, но при этом их хватает для реализации алгоритма.
- Докер
- В папке handlers расположены все хэндлеры
- В папке images - изображения предлагаемых стилей, а также их описание, и примеры работы
- В папке style_model лежит сам алгоритм переноса стиля
- В папке load_model лежат веса VGG-19, а также их подгрузка
- В папке talk_model лежит алгоритм "болталки"
- В папке states находится класс состояний для бота
- В папке commands доп. скрипты(назначение дефолтных комманд для бота)
- Модуль app отвечает за непосредственный запуск бота и окончание его работы
- Модуль keyboards отвечает за все inline-клавиатуры
- Модуль loader отвечает за создание самого бота, хранилища, event_loop, диспетчера, а также за подгрузку предлагаемых стилей
- В модуле text_messages лежат большие текстовые сообщения от бота, сообщение приветствия, а также главного меню.
- В requirements.txt лежат все необходимые библиотеки. Установить их можно все сразу командой pip -r requirements.txt
- Хотелось бы также добавить ган по улучшению качества фотографии, т.к. интересно разобраться. Таким образом, покрыть сразу две предложенные на проект таски.
- To be continued...