Генеративные языковые модели (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, где мы рассмотрим, как создавать приложения с ИИ с использованием low-code
Отказ от ответственности:
Этот документ был переведен с помощью сервиса автоматического перевода Co-op Translator. Несмотря на наши усилия обеспечить точность, автоматические переводы могут содержать ошибки или неточности. Оригинальный документ на его родном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется профессиональный перевод человеком. Мы не несем ответственности за любые недоразумения или неправильные интерпретации, возникшие в результате использования данного перевода.








