Генеративні мовні моделі (LLM) можуть робити більше, ніж просто генерувати текст. Вони також здатні створювати зображення на основі текстових описів. Можливість працювати із зображеннями може бути надзвичайно корисною в багатьох сферах, таких як медична технологія, архітектура, туризм, розробка ігор тощо. У цьому розділі ми розглянемо дві найпопулярніші моделі генерації зображень: DALL-E та Midjourney.
У цьому уроці ми розглянемо:
- Генерацію зображень та її корисність.
- DALL-E та Midjourney: що це таке і як вони працюють.
- Як створити додаток для генерації зображень.
Після завершення цього уроку ви зможете:
- Створити додаток для генерації зображень.
- Визначити межі для вашого додатка за допомогою метапідказок.
- Працювати з DALL-E та Midjourney.
Додатки для генерації зображень — це чудовий спосіб дослідити можливості генеративного штучного інтелекту. Вони можуть бути використані, наприклад, для:
-
Редагування та синтезу зображень. Ви можете створювати зображення для різних цілей, таких як редагування та синтез зображень.
-
Застосування в різних галузях. Вони також можуть бути використані для створення зображень у таких галузях, як медична технологія, туризм, розробка ігор тощо.
У рамках цього уроку ми продовжимо працювати з нашим стартапом Edu4All. Студенти створюватимуть зображення для своїх завдань. Які саме зображення — залежить від студентів, але це можуть бути ілюстрації до їхньої казки, створення нового персонажа для їхньої історії або допомога у візуалізації їхніх ідей та концепцій.
Ось що, наприклад, можуть створити студенти Edu4All, якщо вони працюють у класі над темою пам'ятників:
використовуючи підказку, наприклад:
"Собака біля Ейфелевої вежі на ранковому сонці"
DALL-E та Midjourney — це дві найпопулярніші моделі генерації зображень, які дозволяють використовувати текстові підказки для створення зображень.
Почнемо з DALL-E — генеративної моделі штучного інтелекту, яка створює зображення на основі текстових описів.
DALL-E — це комбінація двох моделей: CLIP та розсіяної уваги.
-
CLIP — це модель, яка створює векторні представлення даних (ембеддинги) з зображень та тексту.
-
Розсіяна увага — це модель, яка створює зображення з ембеддингів. 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. Хоча ми прагнемо до точності, звертаємо вашу увагу, що автоматичні переклади можуть містити помилки або неточності. Оригінальний документ на його рідній мові слід вважати авторитетним джерелом. Для критично важливої інформації рекомендується професійний людський переклад. Ми не несемо відповідальності за будь-які непорозуміння або неправильні тлумачення, що виникли внаслідок використання цього перекладу.








