LLM моделите не са само за генериране на текст. Възможно е също така да се генерират изображения от текстови описания. Използването на изображения като модалност може да бъде изключително полезно в различни области като Медицински технологии, архитектура, туризъм, разработка на игри и други. В тази глава ще разгледаме двата най-популярни модела за генериране на изображения – DALL-E и Midjourney.
В този урок ще разгледаме:
- Генериране на изображения и защо е полезно.
- Какво представляват DALL-E и Midjourney и как работят.
- Как да създадете приложение за генериране на изображения.
След завършване на този урок ще можете да:
- Създавате приложение за генериране на изображения.
- Определяте граници за вашето приложение с помощта на мета промпти.
- Работите с DALL-E и Midjourney.
Приложенията за генериране на изображения са отличен начин да изследвате възможностите на Генеративния AI. Те могат да се използват, например, за:
-
Редактиране и синтез на изображения. Можете да генерирате изображения за различни случаи на употреба, като редактиране и синтез на изображения.
-
Приложение в различни индустрии. Те могат да се използват за създаване на изображения в различни индустрии като Медицински технологии, Туризъм, Разработка на игри и други.
В рамките на този урок ще продължим да работим със стартиращата ни компания Edu4All. Учениците ще създават изображения за своите оценки – какви точно изображения зависи от тях, но това могат да бъдат илюстрации за собствена приказка, нов герой за тяхната история или помощ за визуализиране на идеи и концепции.
Ето какво биха могли да създадат учениците на Edu4All, ако работят в час по темата за паметници:
с помощта на промпт като
"Куче до Айфеловата кула в ранна сутрешна светлина"
DALL-E и Midjourney са два от най-популярните модела за генериране на изображения, които позволяват използването на промпти за създаване на изображения.
Нека започнем с DALL-E, който е генеративен AI модел, създаващ изображения от текстови описания.
DALL-E е комбинация от два модела – CLIP и diffused attention.
-
CLIP е модел, който създава вграждания (embeddings) – числови представяния на данни – от изображения и текст.
-
Diffused attention е модел, който генерира изображения от тези вграждания. 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 заявки.
-
Създайте файл .env със следното съдържание:
AZURE_OPENAI_ENDPOINT=<your endpoint> AZURE_OPENAI_API_KEY=<your key>Намерете тази информация в Azure Portal за вашия ресурс в секцията „Keys and Endpoint“.
-
Съберете горните библиотеки в файл с име 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 # import dotenv dotenv.load_dotenv() # Get endpoint and key from environment variables openai.api_base = os.environ['AZURE_OPENAI_ENDPOINT'] openai.api_key = os.environ['AZURE_OPENAI_API_KEY'] # Assign the API version (DALL-E is currently supported for the 2023-06-01-preview API version only) openai.api_version = '2023-06-01-preview' openai.api_type = 'azure' try: # Create an image by using the image generation API generation_response = openai.Image.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, ) # 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()
-
След това задаваме endpoint, ключ за OpenAI API, версия и тип.
# Get endpoint and key from environment variables openai.api_base = os.environ['AZURE_OPENAI_ENDPOINT'] openai.api_key = os.environ['AZURE_OPENAI_API_KEY'] # add version and type, Azure specific openai.api_version = '2023-06-01-preview' openai.api_type = 'azure'
-
След това генерираме изображението:
# Create an image by using the image generation API generation_response = openai.Image.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, )
Горният код връща JSON обект, съдържащ URL адреса на генерираното изображение. Можем да използваме този URL, за да изтеглим изображението и да го запишем във файл.
-
Накрая отваряме изображението и използваме стандартен преглед на изображения, за да го покажем:
image = Image.open(image_path) image.show()
Нека разгледаме кода за генериране на изображението по-подробно:
generation_response = openai.Image.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,
)- prompt е текстовият промпт, използван за генериране на изображението. В този случай използваме промпта „Зайче на кон, държащо близалка, на мъглива поляна, където растат нарциси“.
- size е размерът на генерираното изображение. В този случай генерираме изображение с размер 1024x1024 пиксела.
- n е броят на генерираните изображения. В този случай генерираме две изображения.
- temperature е параметър, който контролира случайността на изхода на генеративния AI модел. Температурата е стойност между 0 и 1, където 0 означава детерминиран изход, а 1 – случаен. По подразбиране е 0.7.
Има още неща, които можете да правите с изображения, които ще разгледаме в следващия раздел.
Вече видяхте как с няколко реда Python код успяхме да генерираме изображение. Но има още възможности с изображенията.
Можете също така да:
-
Правите редакции. Като предоставите съществуващо изображение, маска и промпт, можете да променяте изображението. Например, можете да добавите нещо в част от изображението. Представете си нашето зайче – можете да му добавите шапка. Това става като подадете изображението, маска (определяща зоната за промяна) и текстов промпт, описващ какво трябва да се направи.
response = openai.Image.create_edit( image=open("base_image.png", "rb"), mask=open("mask.png", "rb"), prompt="An image of a rabbit with a hat on its head.", n=1, size="1024x1024" ) 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 = openai.Image.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 = openai.Image.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 модел. Например, можем да използваме мета промпти, за да гарантираме, че генерираните изображения са безопасни за работна среда или подходящи за деца.
Как работят мета промптите?
Мета промптите са текстови промпти, които се поставят преди основния текстов промпт и служат за контролиране на изхода на модела. Те се вграждат в приложенията, за да управляват резултатите от модела, като обединяват входа на основния промпт и мета промпта в един текстов промпт.
Един пример за мета промпт е следният:
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
# import dotenv
dotenv.load_dotenv()
# Get endpoint and key from environment variables
openai.api_base = "<replace with endpoint>"
openai.api_key = "<replace with api key>"
# Assign the API version (DALL-E is currently supported for the 2023-06-01-preview API version only)
openai.api_version = '2023-06-01-preview'
openai.api_type = 'azure'
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 = openai.Image.create(
prompt=prompt, # Enter your prompt text here
size='1024x1024',
n=2,
temperature=0,
)
# 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)След като завършите този урок, разгледайте нашата колекция за обучение по Генеративен AI, за да продължите да развивате знанията си в областта на Генеративния AI!
Преминете към Урок 10, където ще разгледаме как да създавате AI приложения с нисък код
Отказ от отговорност:
Този документ е преведен с помощта на AI преводаческа услуга Co-op Translator. Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи могат да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за каквито и да е недоразумения или неправилни тълкувания, произтичащи от използването на този превод.





