Генеративните езикови модели (LLM) не се ограничават само до генериране на текст. Възможно е също така да се генерират изображения от текстови описания. Наличието на изображения като модалност може да бъде изключително полезно в редица области като медицински технологии, архитектура, туризъм, разработка на игри и други. В тази глава ще разгледаме двата най-популярни модела за генериране на изображения – DALL-E и Midjourney.
В този урок ще разгледаме:
- Генериране на изображения и защо е полезно.
- DALL-E и Midjourney – какво представляват и как работят.
- Как да създадете приложение за генериране на изображения.
След завършване на този урок ще можете:
- Да създадете приложение за генериране на изображения.
- Да дефинирате граници за вашето приложение с помощта на мета промптове.
- Да работите с DALL-E и Midjourney.
Приложенията за генериране на изображения са чудесен начин да изследвате възможностите на Генеративния AI. Те могат да се използват например за:
-
Редактиране и синтез на изображения. Можете да генерирате изображения за различни случаи на употреба, като редактиране и синтез на изображения.
-
Приложение в различни индустрии. Те могат да се използват за генериране на изображения за различни индустрии като медицински технологии, туризъм, разработка на игри и други.
Като част от този урок ще продължим да работим с нашия стартъп Edu4All. Учениците ще създават изображения за своите задачи – какви точно изображения зависи от тях, но те могат да бъдат илюстрации за собствена приказка, нов герой за тяхната история или визуализация на идеи и концепции.
Ето какво биха могли да генерират учениците на Edu4All, ако работят в клас върху паметници:
с помощта на промпт като:
"Куче до Айфеловата кула в ранна утринна светлина"
DALL-E и Midjourney са два от най-популярните модели за генериране на изображения, които позволяват използването на промптове за създаване на изображения.
Да започнем с DALL-E, който е генеративен AI модел, създаващ изображения от текстови описания.
DALL-E е комбинация от два модела – CLIP и дифузно внимание.
-
CLIP е модел, който генерира ембединг (числови представяния на данни) от изображения и текст.
-
Дифузно внимание е модел, който генерира изображения от ембединг. DALL-E е обучен върху набор от данни с изображения и текст и може да се използва за създаване на изображения от текстови описания. Например, DALL-E може да се използва за генериране на изображения на котка с шапка или куче с ирокез.
Midjourney работи по подобен начин на DALL-E – генерира изображения от текстови промптове. Midjourney също може да се използва за създаване на изображения с промптове като „котка с шапка“ или „куче с ирокез“.
Кредит: Wikipedia, изображение, генерирано от Midjourney
Първо, DALL-E. DALL-E е генеративен AI модел, базиран на трансформаторна архитектура с авторегресивен трансформатор.
Авторегресивен трансформатор определя как моделът генерира изображения от текстови описания – генерира един пиксел наведнъж и след това използва генерираните пиксели, за да създаде следващия пиксел. Процесът преминава през множество слоеве в невронна мрежа, докато изображението бъде завършено.
С този процес DALL-E контролира атрибути, обекти, характеристики и други елементи в генерираното изображение. Въпреки това, DALL-E 2 и 3 предоставят повече контрол върху генерираното изображение.
Какво е необходимо за създаване на приложение за генериране на изображения? Трябват ви следните библиотеки:
- python-dotenv – препоръчително е да използвате тази библиотека, за да съхранявате тайните си в .env файл, далеч от кода.
- openai – тази библиотека се използва за взаимодействие с OpenAI API.
- 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 Portal за вашия ресурс в секцията „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 е параметър, който контролира случайността на изхода на генеративния AI модел. Температурата е стойност между 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.
Температурата е параметър, който контролира случайността на изхода на генеративния AI модел. Температурата е стойност между 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
)Сега, когато изпълните този код, ще получите тези две изображения:
Тук ясно се вижда как изображенията си приличат повече.
С нашата демонстрация вече можем да генерираме изображения за нашите клиенти. Въпреки това трябва да създадем някои граници за нашето приложение.
Например, не искаме да генерираме изображения, които не са подходящи за работа или които не са подходящи за деца.
Можем да направим това с мета промптове. Мета промптовете са текстови промптове, които се използват за контролиране на изхода на генеративния AI модел. Например, можем да използваме мета промптове, за да контролираме изхода и да гарантираме, че генерираните изображения са подходящи за работа или за деца.
Как работят мета промптовете?
Мета промптовете са текстови промптове, които се използват за контролиране на изхода на генеративния AI модел. Те се позиционират преди текстовия промпт и се използват за контролиране на изхода на модела, като се вграждат в приложенията за контролиране на изхода на модела. Те обединяват входа на промпта и входа на мета промпта в един текстов промпт.
Един пример за мета промпт би бил следният:
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)След като завършите този урок, разгледайте нашата колекция за обучение по Генеративен AI, за да продължите да развивате знанията си за Генеративен AI!
Преминете към Урок 10, където ще разгледаме как да създаваме AI приложения с нисък код
Отказ от отговорност:
Този документ е преведен с помощта на AI услуга за превод Co-op Translator. Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод.








