Generování textu není jedinou schopností LLM. Je také možné generovat obrázky na základě textových popisů. Obrázky jako modality mohou být velmi užitečné v mnoha oblastech, jako je zdravotnická technologie, architektura, cestovní ruch, vývoj her a další. V této kapitole se podíváme na dva nejpopulárnější modely pro generování obrázků, DALL-E a Midjourney.
V této lekci se zaměříme na:
- Generování obrázků a jeho užitečnost.
- DALL-E a Midjourney, co to je a jak fungují.
- Jak vytvořit aplikaci pro generování obrázků.
Po dokončení této lekce budete schopni:
- Vytvořit aplikaci pro generování obrázků.
- Definovat hranice pro vaši aplikaci pomocí meta promptů.
- Pracovat s DALL-E a Midjourney.
Aplikace pro generování obrázků jsou skvělým způsobem, jak prozkoumat možnosti generativní umělé inteligence. Mohou být použity například pro:
-
Úpravy a syntézu obrázků. Můžete generovat obrázky pro různé účely, jako je úprava obrázků nebo jejich syntéza.
-
Použití v různých odvětvích. Mohou být také použity k vytváření obrázků pro různá odvětví, jako je zdravotnická technologie, cestovní ruch, vývoj her a další.
V rámci této lekce budeme pokračovat v práci s naším startupem Edu4All. Studenti budou vytvářet obrázky pro své úkoly, konkrétně jaké obrázky, to záleží na nich. Mohou například vytvořit ilustrace pro svou vlastní pohádku, vytvořit novou postavu pro svůj příběh nebo jim pomoci vizualizovat své nápady a koncepty.
Například pokud studenti Edu4All pracují ve třídě na tématu památek, mohli by vytvořit něco takového:
pomocí promptu jako:
"Pes vedle Eiffelovy věže za ranního slunečního světla"
DALL-E a Midjourney jsou dva z nejpopulárnějších modelů pro generování obrázků, které umožňují používat textové prompty k vytváření obrázků.
Začněme s DALL-E, což je model generativní umělé inteligence, který generuje obrázky na základě textových popisů.
DALL-E je kombinací dvou modelů, CLIP a rozptýlené pozornosti.
-
CLIP je model, který generuje vektory (numerické reprezentace dat) z obrázků a textu.
-
Rozptýlená pozornost je model, který generuje obrázky z vektorů. DALL-E je trénován na datasetu obrázků a textu a může být použit k generování obrázků na základě textových popisů. Například DALL-E může být použit k vytvoření obrázků kočky v klobouku nebo psa s čírem.
Midjourney funguje podobně jako DALL-E, generuje obrázky na základě textových promptů. Midjourney může být také použit k vytvoření obrázků pomocí promptů jako „kočka v klobouku“ nebo „pes s čírem“.
Autor obrázku Wikipedia, obrázek generovaný Midjourney
Nejprve DALL-E. DALL-E je model generativní umělé inteligence založený na architektuře transformátorů s autoregresivním transformátorem.
Autoregresivní transformátor definuje, jak model generuje obrázky z textových popisů. Generuje jeden pixel po druhém a poté používá generované pixely k vytvoření dalšího pixelu. Tento proces probíhá přes více vrstev neuronové sítě, dokud není obrázek kompletní.
Díky tomuto procesu DALL-E kontroluje atributy, objekty, charakteristiky a další prvky v generovaném obrázku. Nicméně DALL-E 2 a 3 mají větší kontrolu nad generovaným obrázkem.
Co je potřeba k vytvoření aplikace pro generování obrázků? Potřebujete následující knihovny:
- python-dotenv, doporučuje se použít tuto knihovnu k uchování tajných klíčů v souboru .env mimo kód.
- openai, tato knihovna slouží k interakci s OpenAI API.
- pillow, pro práci s obrázky v Pythonu.
- requests, pro pomoc s HTTP požadavky.
Pokud jste to ještě neudělali, postupujte podle pokynů na stránce Microsoft Learn, abyste vytvořili zdroj a model Azure OpenAI. Vyberte model DALL-E 3.
-
Vytvořte soubor .env s následujícím obsahem:
AZURE_OPENAI_ENDPOINT=<your endpoint> AZURE_OPENAI_API_KEY=<your key> AZURE_OPENAI_DEPLOYMENT="dall-e-3"Tyto informace najdete v Azure OpenAI Foundry Portálu pro váš zdroj v sekci "Deployments".
-
Shromážděte výše uvedené knihovny do souboru requirements.txt takto:
python-dotenv openai pillow requests -
Dále vytvořte virtuální prostředí a nainstalujte knihovny:
python3 -m venv venv source venv/bin/activate pip install -r requirements.txtPro Windows použijte následující příkazy k vytvoření a aktivaci virtuálního prostředí:
python3 -m venv venv venv\Scripts\activate.bat
-
Přidejte následující kód do souboru 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)
Vysvětlení kódu:
-
Nejprve importujeme potřebné knihovny, včetně knihovny OpenAI, knihovny dotenv, knihovny requests a knihovny Pillow.
import openai import os import requests from PIL import Image import dotenv
-
Dále načteme proměnné prostředí ze souboru .env.
# import dotenv dotenv.load_dotenv()
-
Poté nakonfigurujeme klienta služby 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" )
-
Následně generujeme obrázek:
# 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'] )
Výše uvedený kód odpovídá JSON objektem, který obsahuje URL generovaného obrázku. URL můžeme použít ke stažení obrázku a jeho uložení do souboru.
-
Nakonec otevřeme obrázek a použijeme standardní prohlížeč obrázků k jeho zobrazení:
image = Image.open(image_path) image.show()
Podívejme se podrobněji na kód, který generuje obrázek:
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 je textový prompt, který se používá k generování obrázku. V tomto případě používáme prompt "Králík na koni, držící lízátko, na mlhavé louce, kde rostou narcisy".
- size je velikost generovaného obrázku. V tomto případě generujeme obrázek o rozměrech 1024x1024 pixelů.
- n je počet generovaných obrázků. V tomto případě generujeme dva obrázky.
- temperature je parametr, který ovládá náhodnost výstupu generativního modelu AI. Teplota je hodnota mezi 0 a 1, kde 0 znamená, že výstup je deterministický, a 1 znamená, že výstup je náhodný. Výchozí hodnota je 0,7.
Existují další věci, které můžete s obrázky dělat, a ty probereme v další části.
Viděli jste, jak jsme byli schopni vygenerovat obrázek pomocí několika řádků v Pythonu. Existují však další věci, které můžete s obrázky dělat.
Můžete také:
- Provádět úpravy. Poskytnutím existujícího obrázku, masky a promptu můžete obrázek upravit. Například můžete přidat něco do určité části obrázku. Představte si náš obrázek králíka, můžete přidat klobouk králíkovi. Jak to udělat? Poskytnete obrázek, masku (identifikující část oblasti pro změnu) a textový prompt, který určí, co by mělo být provedeno.
Poznámka: toto není podporováno v DALL-E 3.
Zde je příklad použití 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].urlZákladní obrázek by obsahoval pouze lounge s bazénem, ale finální obrázek by měl plameňáka:
-
Vytvářet variace. Myšlenka je, že vezmete existující obrázek a požádáte o vytvoření variací. Pro vytvoření variace poskytnete obrázek a textový prompt a kód jako takový:
response = openai.Image.create_variation( image=open("bunny-lollipop.png", "rb"), n=1, size="1024x1024" ) image_url = response['data'][0]['url']
Poznámka: toto je podporováno pouze na OpenAI.
Teplota je parametr, který ovládá náhodnost výstupu generativního modelu AI. Teplota je hodnota mezi 0 a 1, kde 0 znamená, že výstup je deterministický, a 1 znamená, že výstup je náhodný. Výchozí hodnota je 0,7.
Podívejme se na příklad, jak teplota funguje, spuštěním tohoto promptu dvakrát:
Prompt: "Králík na koni, držící lízátko, na mlhavé louce, kde rostou narcisy"
Nyní spusťme stejný prompt znovu, abychom viděli, že nedostaneme stejný obrázek dvakrát:
Jak vidíte, obrázky jsou podobné, ale ne stejné. Zkusme změnit hodnotu teploty na 0,1 a uvidíme, co se stane:
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
)Zkusme udělat odpověď více deterministickou. Mohli jsme si všimnout, že na prvním obrázku je králík a na druhém obrázku je kůň, takže se obrázky značně liší.
Proto změňme náš kód a nastavme teplotu na 0, takto:
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
)Nyní, když spustíte tento kód, dostanete tyto dva obrázky:
Zde jasně vidíte, jak se obrázky více podobají.
S naší ukázkou již můžeme generovat obrázky pro naše klienty. Nicméně je potřeba vytvořit určité hranice pro naši aplikaci.
Například nechceme generovat obrázky, které nejsou vhodné pro práci nebo nejsou vhodné pro děti.
To můžeme udělat pomocí meta promptů. Meta prompty jsou textové prompty, které se používají k ovládání výstupu generativního modelu AI. Například můžeme použít meta prompty k ovládání výstupu a zajistit, že generované obrázky budou vhodné pro práci nebo pro děti.
Jak tedy meta prompty fungují?
Meta prompty jsou textové prompty, které se používají k ovládání výstupu generativního modelu AI. Jsou umístěny před textovým promptem a slouží k ovládání výstupu modelu. Jsou zabudovány do aplikací, aby ovládaly výstup modelu, a spojují vstup promptu a vstup meta promptu do jednoho textového promptu.
Jedním příkladem meta promptu by mohl být následující:
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)
Nyní se podívejme, jak můžeme použít meta prompty v naší ukázce.
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 imageZ výše uvedeného promptu můžete vidět, jak všechny generované obrázky zohledňují meta prompt.
Na začátku této lekce jsme představili Edu4All. Nyní je čas umožnit studentům generovat obrázky pro jejich úkoly.
Studenti vytvoří obrázky pro své úkoly obsahující památky, konkrétně jaké památky, to záleží na nich. Studenti jsou vyzváni, aby použili svou kreativitu v tomto úkolu a umístili tyto památky do různých kontextů.
Zde je jedno možné řešení:
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)Po dokončení této lekce se podívejte na naši sbírku učení o generativní AI, abyste si dále rozšířili své znalosti o generativní AI!
Přejděte na lekci 10, kde se podíváme na to, jak vytvářet AI aplikace pomocí low-code
Prohlášení:
Tento dokument byl přeložen pomocí služby AI pro překlad Co-op Translator. Ačkoli se snažíme o přesnost, mějte prosím na paměti, že automatizované překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho rodném jazyce by měl být považován za autoritativní zdroj. Pro důležité informace se doporučuje profesionální lidský překlad. Neodpovídáme za žádná nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu.








