Бот на Python, для генерации изображений с помощью нейросети DALL-E для Telegram [Гайд]
Нейросети

Бот на Python, для генерации изображений с помощью нейросети DALL-E для Telegram [Гайд]

Razilator

В данной статье мы изучим процесс создания бота на Python, который будет генерировать изображения с помощью нейросети DALL-E 2.

Мы будем использовать библиотеку aiogram для создания бота в Telegram, которая обеспечивает удобный и простой интерфейс для взаимодействия с ботом.

Подробно рассмотрим каждый этап создания бота и настройки его работы с нейросетью, чтобы вы смогли легко повторить этот процесс и создать своего собственного бота для генерации изображений.

Получаем API токен на openai (для chatGPT, DALL-E)

  1. Нам необходимо получить токен API для работы с DALL-E, переходим на сайт: platform.openai.com

На сайте нажимаем Personal, и выбираем View API keys:

Personal -> View API keys
Personal -> View API keys

Далее нажимаем Create new secret key

Нажимаем Create new secret key
Нажимаем Create new secret key

Получаем наш ключ для DALL-E.

Сохраняем куда-нибудь в блокнот, потом его вставим в main.py
Сохраняем куда-нибудь в блокнот, потом его вставим в main.py

Получаем токен для бота в телеграмм

  1. Теперь нам необходимо создать бота в телеграмме, делается это через @BotFather, начинаем диалог и вводим команду /newbot, выбираем имя, обязательно чтоб в имени присутствовало слово: Bot, или через подчеркивание _bot
Пример команды
Пример команды

Получаем ключ для доступа к API, на скриншоте он закрашен. Сохраняем в удобное место.

Создаем бота на Python для генерации изображений DALL-E

Перед всеми манипуляциями с кодом на вашем компьютере должен быть установлен Python. Скачать его можно с официального сайта.

  1. Для создания проекта в папке по вашему выбору с помощью IDE редактора, например VS Code, откройте терминал и введите команду cmd. Создайте виртуальное окружение с помощью команды py -m venv venv. Для активации виртуального окружения введите команду cd venv/scripts && activate. Затем вернитесь в корневой каталог, введя команду cd ../../ В терминале вы увидите, что виртуальное окружение активировано, в скобках будет указано (venv).

  2. Создайте файл main.py рядом с папкой venv для дальнейшей работы в проекте.

Скриншот выполнения команд
Скриншот выполнения команд
  1. Далее нам необходимо установить два пакета с помощью терминала: pip install openai aiogram

Результат выполнения команды:

Терминал
(venv) C:\Users\Razilator\Desktop\Projects\DalleTelegram>pip install openai aiogram
Collecting openai
  Using cached openai-0.27.4-py3-none-any.whl (70 kB)
Collecting aiogram
  Using cached aiogram-2.25.1-py3-none-any.whl (203 kB)
Collecting requests>=2.20
  Using cached requests-2.28.2-py3-none-any.whl (62 kB)
Collecting tqdm
  Using cached tqdm-4.65.0-py3-none-any.whl (77 kB)
Collecting aiohttp
  Using cached magic_filter-1.0.9-py3-none-any.whl (9.3 kB)
Collecting attrs>=17.3.0
  Using cached attrs-23.1.0-py3-none-any.whl (61 kB)
Collecting charset-normalizer<4.0,>=2.0
  Using cached charset_normalizer-3.1.0-cp311-cp311-win_amd64.whl (96 kB)
Collecting multidict<7.0,>=4.5
  Using cached multidict-6.0.4-cp311-cp311-win_amd64.whl (28 kB)
Collecting async-timeout<5.0,>=4.0.0a3
Collecting colorama
  Using cached colorama-0.4.6-py2.py3-none-any.whl (25 kB)
Installing collected packages: pytz, urllib3, multidict, magic-filter, idna, frozenlist, colorama, charset-normalizer, certifi, Babel, attrs, async-timeout, yarl, tqdm, requests, aiosignal, aiohttp, openai, aiogram
Successfully installed Babel-2.9.1 aiogram-2.25.1 aiohttp-3.8.4 aiosignal-1.3.1 async-timeout-4.0.2 attrs-23.1.0 certifi-2022.12.7 charset-normalizer-3.1.0 colorama-0.4.6 frozenlist-1.3.3 idna-3.4 magic-filter-1.0.9 multidict-6.0.4 openai-0.27.4 pytz-2023.3 requests-2.28.2 tqdm-4.65.0 urllib3-1.26.15 yarl-1.9.2

[notice] A new release of pip available: 22.3 -> 23.1.1
[notice] To update, run: python.exe -m pip install --upgrade pip
  1. Теперь в наш файл main.py добавим следующий код для генерации изображений с помощью нейросети DALL-E:
main.py
import openai

from aiogram import Bot, types
from aiogram.dispatcher import Dispatcher
from aiogram.utils import executor

telegram_token = "Токен от телеграмм бота"
openai.api_key = "Токен от OpenAI ChatGPT"

bot = Bot(telegram_token)
dp = Dispatcher(bot)


@dp.message_handler(commands=['dalle'])
async def send_image(message: types.Message):
    response = openai.Image.create(
        prompt=message.text,
        n=1,
        size="1024x1024",
    )
    await message.answer_photo(response["data"][0]["url"])

if __name__ == '__main__':
    executor.start_polling(dp, skip_updates=True)

Код начинается с импорта необходимых библиотек, которые мы установили в данной статье. После этого задаются токены для Telegram-бота и для OpenAI API.

Затем создается объект бота и диспетчер, который будет обрабатывать сообщения от пользователей. В данном случае используется команда /dalle для запроса на генерацию изображения.

Функция send_image() обрабатывает сообщения с командой /dalle и передает текст сообщения в функцию openai.Image.create(), которая использует нейросеть DALL-E 2 для генерации изображения на основе введенного текста. Затем полученное изображение отправляется пользователю с помощью метода message.answer_photo().

Код заканчивается вызовом функции executor.start_polling(), которая запускает бота и начинает обрабатывать входящие сообщения.

Что можно улучшить?

  • для улучшения кода можно добавить обработку ошибок, а также улучшить обработку текстовых запросов и передаваемых параметров для генерации изображений. Затем можно улучшить структуру кода, например, вынести токены в отдельный файл для удобства управления ими.

Не забываем, что запросы через API платные. Нам изначально дают баланс на 18$ или более долларов.

Стоимость изображений по размерам:

Размер изображенияЦена за изображение
256×256$0.016
512×512$0.018
1024×1024$0.020

Запускам бота, проверяем работу

Далее нам необходимо запустить бота, для этого в терминале напишите py main.py и если все сделали правильно, результат будет следующим:

Терминал
(venv) C:\Users\Razilator\Desktop\Projects\DalleTelegram>py main.py
Updates were skipped successfully.

Напишем нашему боту для генерации изображений

Скришнот генерации 1
Скришнот генерации 1
Скришнот генерации 2
Скришнот генерации 2
Скришнот генерации 3
Скришнот генерации 3

В следующей статье мы рассмотрим дополнение к коду данной статьи, в котором у нас бот на aiogram будет отвечать на сообщения с помощью ChatGPT, а с помощью команды /dalle обращаться для генерации изображения с помощью DALL-E в рамках одного бота.

;