Электро самолёт
Философия Стива Джобса
iPhone 16e
Nothing Phone 3a
Оживление фото LumaAI
Велосипед Mercedes
Робота научили делать сальто
Grok vs ChatGPT vs Claude
Генерация видео от Google

Бот для генерации изображений

Бот для генерации изображений

Сегодня создадим телеграм бота на базе API от OpenAI для генерации изображений по текстовому описанию, использовать будем их модели DALL·E 2 и DALL·E 3, приступим

Создаем бота

Для начала, перейдем в BotFather и создадим нового бота

Создание телеграм бота с помощью BotFather
Создание телеграм бота с помощью BotFather

после будет доступен токен бота, копируем и идем дальше.

API OpenAI

Переходим на платформу OpenAI в раздел API Keys и создаем новый ключ

Создание API ключа на платформе OpenAI
Создание API ключа на платформе OpenAI

В графе name указываете имя ключа, я написал "create img", далее получаетет ключ API Open AI.

Пишем код

Использовать будем python

import telebot from openai import OpenAI from config import * import requests import db import os # Создание экземпляра бота с использованием вашего токена bot = telebot.TeleBot(BOT_TOKEN) # Инициализация клиента OpenAI client = OpenAI(api_key=AI_TOKEN) # Создание таблиц в базе данных db.create_tables() # Создание папки, если ее нет if not os.path.exists(IMAGE_FOLDER): os.makedirs(IMAGE_FOLDER) # Обработчик команды /start @bot.message_handler(commands=['start']) def send_welcome(message): # Запись данных пользователя в базу данных db.add_user(message.chat.id) bot.reply_to(message, "Привет! Я могу создать обои по текстовому описанию для твоего телефона.") # Обработчик команды /stats @bot.message_handler(commands=['stats']) def show_stats(message): # Проверка, является ли пользователь администратором if message.from_user.id == ADMIN_ID: # Получение количества пользователей из базы данных total_users = db.get_total_users() bot.reply_to(message, f"Количество пользователей, воспользовавшихся ботом: {total_users}") else: bot.reply_to(message, "У вас нет прав на выполнение этой команды.") # Обработчик текстовых сообщений @bot.message_handler(func=lambda message: True) def generate_image(message): # Проверка длины сообщения if len(message.text) < 10: bot.send_message(message.chat.id, "Введите текст длиной не менее 10 символов.") return # Отправка оповещения о начале процесса генерации bot.send_message(message.chat.id, "Создаю обои, пожалуйста ожидайте...") # Генерация изображения с использованием OpenAI try: response = client.images.generate( model="dall-e-3", prompt=message.text, size="1024x1024", # 1024x1024, 1024x1792, 1792x1024 quality="standard", # standard, hd n=1, ) # -------------------------------------------------- # Model | Quality | Resolution | Price # -------------------------------------------------- # DALL·E 3 | Standard | 1024×1024 | $0.040 / image # -------------------------------------------------- # DALL·E 3 | Standard | 1024×1792 | $0.080 / image # -------------------------------------------------- # DALL·E 3 | Standard | 1792×1024 | $0.080 / image # -------------------------------------------------- # DALL·E 3 | HD | 1024×1024 | $0.080 / image # -------------------------------------------------- # DALL·E 3 | HD | 1024×1792 | $0.120 / image # -------------------------------------------------- # DALL·E 3 | HD | 1792×1024 | $0.120 / image # -------------------------------------------------- # DALL·E 2 | | 1024×1024 | $0.020 / image # -------------------------------------------------- # DALL·E 2 | | 512×512 | $0.018 / image # -------------------------------------------------- # DALL·E 2 | | 256×256 | $0.016 / image # -------------------------------------------------- # Получение URL сгенерированного изображения image_url = response.data[0].url # print(image_url) # Скачивание изображения и сохранение в папку images image_path = os.path.join(IMAGE_FOLDER, f"{message.chat.id}_{message.message_id}.png") with requests.get(image_url, stream=True) as r: if r.status_code == 200: with open(image_path, 'wb') as f: f.write(r.content) else: bot.send_message(message.chat.id, "Не удалось загрузить изображение.") # Запись данных об изображении в базу данных db.add_image(message.chat.id, message.text, image_path) # Отправка изображения пользователю with open(image_path, 'rb') as photo: bot.send_photo(message.chat.id, photo, reply_to_message_id=message.message_id) except Exception as e: # bot.send_message(message.chat.id, f"Произошла ошибка: {str(e)}") bot.send_message(message.chat.id, f"Произошла ошибка, прошу прощения за предоcтавленные неудобства, попробуйте еще раз или свяжитесь с разработчиком @king_triton") # Запуск бота bot.infinity_polling(interval=0)

1. Импорт библиотек: Код импортирует необходимые библиотеки, такие как telebot для работы с API Telegram, OpenAI для использования сервиса генерации изображений, requests для работы с HTTP-запросами, db для взаимодействия с базой данных, и os для работы с операционной системой.
2. Инициализация бота и клиента OpenAI: Создаются экземпляры бота и клиента OpenAI с использованием предоставленных токенов.
3. Создание таблиц в базе данных и папки: Проверяется наличие таблиц в базе данных и папки для сохранения изображений, и при необходимости они создаются.
4. Обработчик команды /start: При получении команды /start бот регистрирует пользователя в базе данных и приветствует его.
5. Обработчик команды /stats: При получении команды /stats бот отображает общее количество пользователей, которые воспользовались им, если отправитель сообщения является администратором.
6. Обработчик текстовых сообщений: Если бот получает текстовое сообщение, он проверяет его длину и, если она больше 10 символов, создает изображение на основе текста с использованием сервиса OpenAI. Затем бот отправляет сгенерированное изображение пользователю и сохраняет его в базе данных.
7. Запуск бота: Бот запускается в режиме бесконечного опроса, чтобы он мог реагировать на входящие сообщения пользователя.

Пару слов

Я создавал этого бота для генерации "обоев" на телефон, но эта тематика на сильно популярна, поэтому я выложил исходный код в открытый доступ, код можно модифицировать под свои нужны он очень прост, спасибо за внимание!

P.S. Посмотреть работу бота можно в tiktok.

Начать дискуссию
[]