Генерирането на текст не е единственото, което може да се постигне с LLMs. Възможно е също така да се генерират изображения от текстови описания. Изображенията като модалност могат да бъдат изключително полезни в различни области като MedTech, архитектура, туризъм, разработка на игри и други. В тази глава ще разгледаме двата най-популярни модела за генериране на изображения, DALL-E и Midjourney.
В този урок ще разгледаме:
- Генериране на изображения и защо е полезно.
- DALL-E и Midjourney, какво представляват и как работят.
- Как да създадете приложение за генериране на изображения.
След завършване на този урок ще можете да:
- Създадете приложение за генериране на изображения.
- Определите граници за вашето приложение с метапромпти.
- Работите с DALL-E и Midjourney.
Приложенията за генериране на изображения са чудесен начин да изследвате възможностите на Генеративния AI. Те могат да се използват за, например:
-
Редактиране и синтез на изображения. Можете да генерирате изображения за различни случаи на употреба, като редактиране и синтез на изображения.
-
Приложение в различни индустрии. Те също така могат да се използват за генериране на изображения за различни индустрии като MedTech, Туризъм, Разработка на игри и други.
Като част от този урок ще продължим да работим с нашия стартъп, Edu4All. Учениците ще създават изображения за своите оценки, като точно какви изображения зависи от тях, но те биха могли да бъдат илюстрации за собствена приказка или да създадат нов герой за своята история или да им помогнат да визуализират своите идеи и концепции.
Ето какво биха могли да генерират учениците на Edu4All, ако работят в клас върху паметници:
използвайки промпт като
"Куче до Айфеловата кула в ранна утринна светлина"
DALL-E и Midjourney са два от най-популярните модели за генериране на изображения, които ви позволяват да използвате промпти за генериране на изображения.
Нека започнем с DALL-E, който е генеративен AI модел, генериращ изображения от текстови описания.
-
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 заявки.
-
Създайте файл .env със следното съдържание:
AZURE_OPENAI_ENDPOINT=<your endpoint> AZURE_OPENAI_API_KEY=<your key>Намерете тази информация в Azure Portal за вашия ресурс в секцията "Ключове и крайна точка".
-
Съберете горепосочените библиотеки в файл, наречен 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()
-
След това задаваме крайна точка, ключ за 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 модел. Например, можем да използваме метапромпти, за да контролираме изхода и да гарантираме, че генерираните изображения са безопасни за работа или подходящи за деца.
Сега, как работят метапромптите?
Метапромптите са текстови промпти, които се използват за контролиране на изхода на генеративния 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"""{metaprompt}
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. Докато се стремим към точност, моля, имайте предвид, че автоматизираните преводи могат да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Не носим отговорност за каквито и да било недоразумения или погрешни интерпретации, произтичащи от използването на този превод.





