Nichteye121

Nichteye121

На Пикабу
рейтинг 4 подписчика 0 подписок 46 постов 1 в горячем
8

От идеи до реальности: история создания сайта с генерацией картин

Идея

Я задумал создать сайт, где каждый пользователь может сгенерировать одну картину с помощью GPT от Сбера (что-то вроде text-to-image). Пользователь вводит запрос, выбирает стиль и цвет, и затем все сгенерированные картинки объединяются в одну общую(один раз) и в режиме реального времени генерируется сетка со всеми пользовательскими картинкми.

К сожалению, развернуть проект не получилось: при отправке запроса с хостинга API Сбера возвращал connection refused.

Код проекта можно посмотреть и потестировать здесь: GitHub репозиторий.

Интересные решения в коде

1. Создание общей картинки

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

2. Создание сетки из картин

На сайте я хотел показать сетку из всех картин в реальном времени, потому что общая картина генерировалась бы только один раз. Для создания сетки я использовал numpy, а также добавил подписи с позициями картин в сетке. Чтобы поддерживать актуальность сетки, я создал фоновую задачу, которая регенерирует её каждые 5 картинок (5 — оптимальное количество, определенное опытным путем).

3. Автоматизация заполнения базы данных

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

def create_color():

Color.objects.bulk_create([Color(color=short_cut) for short_cut, color in COLORS.items()])

return len(COLORS)

def create_styles():

Style.objects.bulk_create([Style(style=short_cut) for short_cut, style in STYLES.items()])

return len(STYLES)

4. Функция шаринга

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

В итоге я также добавил лидерборд для тех, кто шарил сайт, настроил celery, redis, и завернул всё это в Docker.

В итоге я также добавил лидерборд для тех, кто шарил сайт, настроил celery, redis, и завернул всё это в Docker.

Надеюсь, эта статья была полезной и вдохновляющей. Делитесь своим мнением в комментариях!

Показать полностью 2
Отличная работа, все прочитано!

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества