Генерация текста — это не единственное, что могут делать LLM. Также возможно создавать изображения на основе текстовых описаний. Наличие изображений как модальности может быть чрезвычайно полезным в различных областях, таких как медицинские технологии, архитектура, туризм, разработка игр и многое другое. В этой главе мы рассмотрим две самые популярные модели генерации изображений: DALL-E и Midjourney.
В этом уроке мы рассмотрим:
- Генерацию изображений и её полезность.
- DALL-E и Midjourney: что это такое и как они работают.
- Как создать приложение для генерации изображений.
После завершения этого урока вы сможете:
- Создать приложение для генерации изображений.
- Определить границы для вашего приложения с помощью метаподсказок.
- Работать с DALL-E и Midjourney.
Приложения для генерации изображений — отличный способ изучить возможности генеративного ИИ. Они могут быть использованы, например, для:
-
Редактирования и синтеза изображений. Вы можете создавать изображения для различных целей, таких как редактирование и синтез изображений.
-
Применение в различных отраслях. Они также могут быть использованы для создания изображений для различных отраслей, таких как медицинские технологии, туризм, разработка игр и многое другое.
В рамках этого урока мы продолжим работать с нашим стартапом Edu4All. Студенты будут создавать изображения для своих заданий. Какие именно изображения — решать студентам, но это могут быть иллюстрации для их собственной сказки, создание нового персонажа для их истории или помощь в визуализации их идей и концепций.
Вот пример того, что студенты Edu4All могут создать, если они работают в классе над темой памятников:
используя подсказку вроде:
"Собака рядом с Эйфелевой башней на утреннем солнце"
DALL-E и Midjourney — две из самых популярных моделей генерации изображений, которые позволяют использовать подсказки для создания изображений.
Начнем с DALL-E — генеративной модели ИИ, которая создает изображения на основе текстовых описаний.
DALL-E — это комбинация двух моделей: CLIP и diffused attention.
-
CLIP — модель, которая создает эмбеддинги, числовые представления данных, из изображений и текста.
-
Diffused attention — модель, которая создает изображения из эмбеддингов. DALL-E обучена на наборе данных изображений и текста и может использоваться для создания изображений на основе текстовых описаний. Например, DALL-E может быть использована для создания изображения кота в шляпе или собаки с ирокезом.
Midjourney работает аналогично DALL-E, создавая изображения на основе текстовых подсказок. Midjourney также может быть использована для генерации изображений с подсказками вроде "кот в шляпе" или "собака с ирокезом".
Источник изображения: Wikipedia, изображение создано Midjourney
Сначала DALL-E. DALL-E — это генеративная модель ИИ, основанная на архитектуре трансформеров с авторегрессионным трансформером.
Авторегрессионный трансформер определяет, как модель создает изображения на основе текстовых описаний: она генерирует один пиксель за раз, а затем использует созданные пиксели для генерации следующего пикселя. Проходя через несколько слоев нейронной сети, пока изображение не будет завершено.
С помощью этого процесса DALL-E контролирует атрибуты, объекты, характеристики и многое другое в создаваемом изображении. Однако DALL-E 2 и 3 обеспечивают больший контроль над созданным изображением.
Итак, что нужно для создания приложения для генерации изображений? Вам понадобятся следующие библиотеки:
- python-dotenv — настоятельно рекомендуется использовать эту библиотеку для хранения секретов в файле .env отдельно от кода.
- openai — библиотека, которая используется для взаимодействия с API OpenAI.
- pillow — для работы с изображениями в Python.
- requests — для выполнения HTTP-запросов.
Если это еще не сделано, следуйте инструкциям на странице Microsoft Learn, чтобы создать ресурс и модель Azure OpenAI. Выберите модель DALL-E 3.
-
Создайте файл .env со следующим содержанием:
AZURE_OPENAI_ENDPOINT=<your endpoint> AZURE_OPENAI_API_KEY=<your key> AZURE_OPENAI_DEPLOYMENT="dall-e-3"Найдите эту информацию в портале Azure OpenAI Foundry для вашего ресурса в разделе "Deployments".
-
Соберите вышеуказанные библиотеки в файле requirements.txt следующим образом:
python-dotenv openai pillow requests -
Затем создайте виртуальное окружение и установите библиотеки:
python3 -m venv venv source venv/bin/activate pip install -r requirements.txtДля Windows используйте следующие команды для создания и активации виртуального окружения:
python3 -m venv venv venv\Scripts\activate.bat
-
Добавьте следующий код в файл app.py:
import openai import os import requests from PIL import Image import dotenv from openai import OpenAI, AzureOpenAI # import dotenv dotenv.load_dotenv() # configure Azure OpenAI service client client = AzureOpenAI( azure_endpoint = os.environ["AZURE_OPENAI_ENDPOINT"], api_key=os.environ['AZURE_OPENAI_API_KEY'], api_version = "2024-02-01" ) try: # Create an image by using the image generation API generation_response = client.images.generate( prompt='Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils', size='1024x1024', n=1, model=os.environ['AZURE_OPENAI_DEPLOYMENT'] ) # Set the directory for the stored image image_dir = os.path.join(os.curdir, 'images') # If the directory doesn't exist, create it if not os.path.isdir(image_dir): os.mkdir(image_dir) # Initialize the image path (note the filetype should be png) image_path = os.path.join(image_dir, 'generated-image.png') # Retrieve the generated image image_url = generation_response.data[0].url # extract image URL from response generated_image = requests.get(image_url).content # download the image with open(image_path, "wb") as image_file: image_file.write(generated_image) # Display the image in the default image viewer image = Image.open(image_path) image.show() # catch exceptions except openai.InvalidRequestError as err: print(err)
Объясним этот код:
-
Сначала мы импортируем необходимые библиотеки, включая библиотеку OpenAI, библиотеку dotenv, библиотеку requests и библиотеку Pillow.
import openai import os import requests from PIL import Image import dotenv
-
Затем мы загружаем переменные окружения из файла .env.
# import dotenv dotenv.load_dotenv()
-
После этого мы настраиваем клиент сервиса Azure OpenAI.
# Get endpoint and key from environment variables client = AzureOpenAI( azure_endpoint = os.environ["AZURE_OPENAI_ENDPOINT"], api_key=os.environ['AZURE_OPENAI_API_KEY'], api_version = "2024-02-01" )
-
Далее мы генерируем изображение:
# Create an image by using the image generation API generation_response = client.images.generate( prompt='Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils', size='1024x1024', n=1, model=os.environ['AZURE_OPENAI_DEPLOYMENT'] )
Этот код возвращает JSON-объект, содержащий URL созданного изображения. Мы можем использовать URL для загрузки изображения и сохранения его в файл.
-
Наконец, мы открываем изображение и используем стандартный просмотрщик изображений для его отображения:
image = Image.open(image_path) image.show()
Давайте подробнее рассмотрим код, который генерирует изображение:
generation_response = client.images.generate(
prompt='Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils',
size='1024x1024', n=1,
model=os.environ['AZURE_OPENAI_DEPLOYMENT']
)- prompt — текстовая подсказка, которая используется для генерации изображения. В данном случае мы используем подсказку "Кролик на лошади, держащий леденец, на туманном лугу, где растут нарциссы".
- size — размер создаваемого изображения. В данном случае мы создаем изображение размером 1024x1024 пикселей.
- n — количество создаваемых изображений. В данном случае мы создаем два изображения.
- temperature — параметр, который контролирует случайность вывода генеративной модели ИИ. Температура — это значение от 0 до 1, где 0 означает детерминированный вывод, а 1 — случайный. Значение по умолчанию — 0.7.
Есть еще много возможностей работы с изображениями, которые мы рассмотрим в следующем разделе.
Вы уже видели, как мы смогли создать изображение с помощью нескольких строк кода на Python. Однако есть еще много возможностей работы с изображениями.
Вы также можете:
- Редактировать изображения. Предоставив существующее изображение, маску и подсказку, вы можете изменить изображение. Например, вы можете добавить что-то на часть изображения. Представьте наше изображение с кроликом, вы можете добавить шляпу кролику. Для этого нужно предоставить изображение, маску (определяющую часть области для изменения) и текстовую подсказку, чтобы указать, что должно быть сделано.
Примечание: это не поддерживается в DALL-E 3.
Вот пример с использованием GPT Image:
response = client.images.edit(
model="gpt-image-1",
image=open("sunlit_lounge.png", "rb"),
mask=open("mask.png", "rb"),
prompt="A sunlit indoor lounge area with a pool containing a flamingo"
)
image_url = response.data[0].urlИсходное изображение будет содержать только лаунж с бассейном, но итоговое изображение будет включать фламинго:
-
Создавать вариации. Идея заключается в том, чтобы взять существующее изображение и попросить создать его вариации. Для создания вариации вы предоставляете изображение и текстовую подсказку, а код выглядит следующим образом:
response = openai.Image.create_variation( image=open("bunny-lollipop.png", "rb"), n=1, size="1024x1024" ) image_url = response['data'][0]['url']
Примечание: это поддерживается только в OpenAI.
Температура — это параметр, который контролирует случайность вывода генеративной модели ИИ. Температура — это значение от 0 до 1, где 0 означает детерминированный вывод, а 1 — случайный. Значение по умолчанию — 0.7.
Давайте рассмотрим пример работы температуры, запустив эту подсказку дважды:
Подсказка: "Кролик на лошади, держащий леденец, на туманном лугу, где растут нарциссы"
Теперь запустим ту же подсказку снова, чтобы увидеть, что мы не получим одно и то же изображение дважды:
Как видите, изображения похожи, но не идентичны. Давайте попробуем изменить значение температуры на 0.1 и посмотрим, что произойдет:
generation_response = client.images.create(
prompt='Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils', # Enter your prompt text here
size='1024x1024',
n=2
)Попробуем сделать вывод более детерминированным. Мы могли наблюдать, что на первом изображении есть кролик, а на втором — лошадь, так что изображения сильно различаются.
Давайте изменим наш код и установим температуру на 0, вот так:
generation_response = client.images.create(
prompt='Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils', # Enter your prompt text here
size='1024x1024',
n=2,
temperature=0
)Теперь, когда вы запустите этот код, вы получите эти два изображения:
Здесь вы можете ясно видеть, как изображения больше похожи друг на друга.
С помощью нашего демо мы уже можем создавать изображения для наших клиентов. Однако нам нужно установить некоторые границы для нашего приложения.
Например, мы не хотим создавать изображения, которые не подходят для работы или не подходят для детей.
Мы можем сделать это с помощью метаподсказок. Метаподсказки — это текстовые подсказки, которые используются для контроля вывода генеративной модели ИИ. Например, мы можем использовать метаподсказки для контроля вывода и обеспечения того, чтобы создаваемые изображения были подходящими для работы или детей.
Итак, как работают метаподсказки?
Метаподсказки — это текстовые подсказки, которые используются для контроля вывода генеративной модели ИИ. Они размещаются перед текстовой подсказкой и используются для контроля вывода модели, внедряясь в приложения для управления выводом модели. Инкапсулируя ввод подсказки и ввод метаподсказки в одну текстовую подсказку.
Пример метаподсказки может выглядеть следующим образом:
You are an assistant designer that creates images for children.
The image needs to be safe for work and appropriate for children.
The image needs to be in color.
The image needs to be in landscape orientation.
The image needs to be in a 16:9 aspect ratio.
Do not consider any input from the following that is not safe for work or appropriate for children.
(Input)
Теперь давайте посмотрим, как мы можем использовать метаподсказки в нашем демо.
disallow_list = "swords, violence, blood, gore, nudity, sexual content, adult content, adult themes, adult language, adult humor, adult jokes, adult situations, adult"
meta_prompt =f"""You are an assistant designer that creates images for children.
The image needs to be safe for work and appropriate for children.
The image needs to be in color.
The image needs to be in landscape orientation.
The image needs to be in a 16:9 aspect ratio.
Do not consider any input from the following that is not safe for work or appropriate for children.
{disallow_list}
"""
prompt = f"{meta_prompt}
Create an image of a bunny on a horse, holding a lollipop"
# TODO add request to generate imageИз приведенной выше подсказки видно, как все создаваемые изображения учитывают метаподсказку.
Мы представили Edu4All в начале этого урока. Теперь пришло время дать студентам возможность создавать изображения для их заданий.
Студенты будут создавать изображения для своих заданий, содержащих памятники. Какие именно памятники — решать студентам. Студенты должны проявить свою креативность в этом задании, размещая эти памятники в различных контекстах.
Вот одно из возможных решений:
import openai
import os
import requests
from PIL import Image
import dotenv
from openai import AzureOpenAI
# import dotenv
dotenv.load_dotenv()
# Get endpoint and key from environment variables
client = AzureOpenAI(
azure_endpoint = os.environ["AZURE_OPENAI_ENDPOINT"],
api_key=os.environ['AZURE_OPENAI_API_KEY'],
api_version = "2024-02-01"
)
disallow_list = "swords, violence, blood, gore, nudity, sexual content, adult content, adult themes, adult language, adult humor, adult jokes, adult situations, adult"
meta_prompt = f"""You are an assistant designer that creates images for children.
The image needs to be safe for work and appropriate for children.
The image needs to be in color.
The image needs to be in landscape orientation.
The image needs to be in a 16:9 aspect ratio.
Do not consider any input from the following that is not safe for work or appropriate for children.
{disallow_list}
"""
prompt = f"""{meta_prompt}
Generate monument of the Arc of Triumph in Paris, France, in the evening light with a small child holding a Teddy looks on.
""""
try:
# Create an image by using the image generation API
generation_response = client.images.generate(
prompt=prompt, # Enter your prompt text here
size='1024x1024',
n=1,
)
# Set the directory for the stored image
image_dir = os.path.join(os.curdir, 'images')
# If the directory doesn't exist, create it
if not os.path.isdir(image_dir):
os.mkdir(image_dir)
# Initialize the image path (note the filetype should be png)
image_path = os.path.join(image_dir, 'generated-image.png')
# Retrieve the generated image
image_url = generation_response.data[0].url # extract image URL from response
generated_image = requests.get(image_url).content # download the image
with open(image_path, "wb") as image_file:
image_file.write(generated_image)
# Display the image in the default image viewer
image = Image.open(image_path)
image.show()
# catch exceptions
except openai.BadRequestError as err:
print(err)После завершения этого урока ознакомьтесь с нашей коллекцией обучения генеративному ИИ, чтобы продолжить повышать свои знания о генеративном ИИ!
Перейдите к уроку 10, где мы рассмотрим, как создавать AI-приложения с использованием low-code
Отказ от ответственности:
Этот документ был переведен с использованием сервиса автоматического перевода Co-op Translator. Хотя мы стремимся к точности, пожалуйста, учитывайте, что автоматические переводы могут содержать ошибки или неточности. Оригинальный документ на его родном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется профессиональный перевод человеком. Мы не несем ответственности за любые недоразумения или неправильные интерпретации, возникающие в результате использования данного перевода.








