Generativni AI modeli (LLM) nisu ograničeni samo na generiranje teksta. Također je moguće generirati slike iz tekstualnih opisa. Imati slike kao modalitet može biti izuzetno korisno u brojnim područjima, poput medicinske tehnologije, arhitekture, turizma, razvoja igara i drugih. U ovom poglavlju istražit ćemo dva najpopularnija modela za generiranje slika, DALL-E i Midjourney.
U ovoj lekciji obradit ćemo:
- Generiranje slika i zašto je korisno.
- DALL-E i Midjourney, što su i kako funkcioniraju.
- Kako izraditi aplikaciju za generiranje slika.
Nakon završetka ove lekcije, moći ćete:
- Izraditi aplikaciju za generiranje slika.
- Definirati granice za svoju aplikaciju pomoću meta prompta.
- Raditi s DALL-E i Midjourney modelima.
Aplikacije za generiranje slika odličan su način za istraživanje mogućnosti generativnog AI-a. Mogu se koristiti, na primjer:
-
Uređivanje i sinteza slika. Možete generirati slike za razne svrhe, poput uređivanja slika i sinteze slika.
-
Primjena u raznim industrijama. Također se mogu koristiti za generiranje slika u raznim industrijama poput medicinske tehnologije, turizma, razvoja igara i drugih.
Kao dio ove lekcije, nastavit ćemo raditi s našim startupom, Edu4All. Studenti će kreirati slike za svoje zadatke, a točne slike ovise o njihovim idejama. Na primjer, mogu ilustrirati vlastitu bajku, kreirati novi lik za svoju priču ili im pomoći da vizualiziraju svoje ideje i koncepte.
Evo što bi studenti Edu4All-a mogli generirati, na primjer, ako rade u razredu na temi spomenika:
koristeći prompt poput:
"Pas pored Eiffelovog tornja u jutarnjem svjetlu"
DALL-E i Midjourney dva su najpopularnija modela za generiranje slika, koji omogućuju korištenje prompta za generiranje slika.
Počnimo s DALL-E, generativnim AI modelom koji generira slike iz tekstualnih opisa.
-
CLIP je model koji generira ugrađene reprezentacije podataka, numeričke prikaze podataka, iz slika i teksta.
-
Difuzna pažnja je model koji generira slike iz ugrađenih reprezentacija. DALL-E je treniran na skupu podataka slika i teksta te se može koristiti za generiranje slika iz tekstualnih opisa. Na primjer, DALL-E može generirati slike mačke s kapom ili psa s irokezom.
Midjourney funkcionira na sličan način kao DALL-E, generira slike iz tekstualnih prompta. Midjourney također može generirati slike koristeći prompt poput "mačka s kapom" ili "pas s irokezom".
Slika: Wikipedia, generirana pomoću Midjourney
Prvo, DALL-E. DALL-E je generativni AI model temeljen na arhitekturi transformatora s autoregresivnim transformatorom.
Autoregresivni transformator definira način na koji model generira slike iz tekstualnih opisa, generira jedan piksel po jedan, a zatim koristi generirane piksele za generiranje sljedećeg piksela. Proces prolazi kroz više slojeva u neuronskoj mreži dok slika ne bude dovršena.
Ovim procesom DALL-E kontrolira atribute, objekte, karakteristike i više u generiranoj slici. Međutim, DALL-E 2 i 3 imaju veću kontrolu nad generiranom slikom.
Što je potrebno za izradu aplikacije za generiranje slika? Trebat će vam sljedeće biblioteke:
- python-dotenv, preporučuje se korištenje ove biblioteke za čuvanje tajni u datoteci .env izvan koda.
- openai, biblioteka koju ćete koristiti za interakciju s OpenAI API-jem.
- pillow, za rad sa slikama u Pythonu.
- requests, za pomoć pri slanju HTTP zahtjeva.
Ako to već niste učinili, slijedite upute na stranici Microsoft Learn za kreiranje Azure OpenAI resursa i modela. Odaberite DALL-E 3 kao model.
-
Kreirajte datoteku .env sa sljedećim sadržajem:
AZURE_OPENAI_ENDPOINT=<your endpoint> AZURE_OPENAI_API_KEY=<your key> AZURE_OPENAI_DEPLOYMENT="dall-e-3"Ove informacije pronađite u Azure OpenAI Foundry Portalu za svoj resurs u odjeljku "Deployments".
-
Prikupite gore navedene biblioteke u datoteku requirements.txt na sljedeći način:
python-dotenv openai pillow requests -
Zatim kreirajte virtualno okruženje i instalirajte biblioteke:
python3 -m venv venv source venv/bin/activate pip install -r requirements.txtZa Windows koristite sljedeće naredbe za kreiranje i aktivaciju virtualnog okruženja:
python3 -m venv venv venv\Scripts\activate.bat
-
Dodajte sljedeći kod u datoteku 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)
Objašnjenje koda:
-
Prvo, uvozimo potrebne biblioteke, uključujući OpenAI biblioteku, dotenv biblioteku, requests biblioteku i Pillow biblioteku.
import openai import os import requests from PIL import Image import dotenv
-
Zatim učitavamo varijable okruženja iz datoteke .env.
# import dotenv dotenv.load_dotenv()
-
Nakon toga konfiguriramo klijenta za Azure OpenAI uslugu.
# 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" )
-
Zatim generiramo sliku:
# 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'] )
Gornji kod vraća JSON objekt koji sadrži URL generirane slike. URL možemo koristiti za preuzimanje slike i spremanje u datoteku.
-
Na kraju, otvaramo sliku i koristimo standardni preglednik slika za prikaz:
image = Image.open(image_path) image.show()
Pogledajmo detaljnije kod koji generira sliku:
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 tekstualni prompt koji se koristi za generiranje slike. U ovom slučaju koristimo prompt "Zec na konju, drži lizalicu, na maglovitoj livadi gdje rastu narcisi".
- size je veličina generirane slike. U ovom slučaju generiramo sliku veličine 1024x1024 piksela.
- n je broj generiranih slika. U ovom slučaju generiramo dvije slike.
- temperature je parametar koji kontrolira slučajnost izlaza generativnog AI modela. Vrijednost temperature je između 0 i 1, gdje 0 znači da je izlaz deterministički, a 1 znači da je izlaz slučajan. Zadana vrijednost je 0.7.
Postoje još mnoge stvari koje možete raditi sa slikama, a o tome ćemo govoriti u sljedećem odjeljku.
Vidjeli ste kako smo generirali sliku koristeći nekoliko linija koda u Pythonu. Međutim, postoje još mnoge stvari koje možete raditi sa slikama.
Također možete:
- Izvoditi uređivanja. Pružanjem postojeće slike, maske i prompta možete izmijeniti sliku. Na primjer, možete dodati nešto na dio slike. Zamislite našu sliku zeca, možete dodati šešir zecu. To se radi pružanjem slike, maske (koja identificira dio područja za promjenu) i tekstualnog prompta koji opisuje što treba učiniti.
Napomena: ovo nije podržano u DALL-E 3.
Evo primjera korištenja 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].urlOsnovna slika sadržavala bi samo salon s bazenom, ali konačna slika imala bi flaminga:
-
Kreirati varijacije. Ideja je da uzmete postojeću sliku i zatražite da se kreiraju varijacije. Za kreiranje varijacije pružate sliku i tekstualni prompt te kod poput ovog:
response = openai.Image.create_variation( image=open("bunny-lollipop.png", "rb"), n=1, size="1024x1024" ) image_url = response['data'][0]['url']
Napomena: ovo je podržano samo na OpenAI.
Temperatura je parametar koji kontrolira slučajnost izlaza generativnog AI modela. Vrijednost temperature je između 0 i 1, gdje 0 znači da je izlaz deterministički, a 1 znači da je izlaz slučajan. Zadana vrijednost je 0.7.
Pogledajmo primjer kako temperatura funkcionira, pokretanjem ovog prompta dva puta:
Prompt: "Zec na konju, drži lizalicu, na maglovitoj livadi gdje rastu narcisi"
Sada pokrenimo isti prompt ponovno da vidimo da nećemo dobiti istu sliku dva puta:
Kao što možete vidjeti, slike su slične, ali nisu iste. Pokušajmo promijeniti vrijednost temperature na 0.1 i vidjeti što se događa:
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
)Pokušajmo učiniti odgovor više determinističkim. Mogli smo primijetiti iz dvije generirane slike da na prvoj slici postoji zec, a na drugoj slici konj, pa se slike značajno razlikuju.
Stoga promijenimo naš kod i postavimo temperaturu na 0, ovako:
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
)Sada kada pokrenete ovaj kod, dobit ćete ove dvije slike:
Ovdje jasno možete vidjeti kako se slike više međusobno nalikuju.
S našim demo primjerom već možemo generirati slike za naše klijente. Međutim, trebamo postaviti neke granice za našu aplikaciju.
Na primjer, ne želimo generirati slike koje nisu prikladne za radno okruženje ili koje nisu prikladne za djecu.
To možemo učiniti pomoću meta prompta. Meta prompti su tekstualni prompti koji se koriste za kontrolu izlaza generativnog AI modela. Na primjer, možemo koristiti meta prompte za kontrolu izlaza i osigurati da generirane slike budu prikladne za radno okruženje ili za djecu.
Kako funkcioniraju meta prompti?
Meta prompti su tekstualni prompti koji se koriste za kontrolu izlaza generativnog AI modela. Pozicionirani su prije tekstualnog prompta i koriste se za kontrolu izlaza modela te se ugrađuju u aplikacije kako bi kontrolirali izlaz modela. Kombiniraju unos prompta i meta prompta u jedan tekstualni prompt.
Jedan primjer meta prompta bio bi sljedeći:
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)
Sada, pogledajmo kako možemo koristiti meta prompte u našem demo primjeru.
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 imageIz gornjeg prompta možete vidjeti kako sve generirane slike uzimaju u obzir meta prompt.
Na početku ove lekcije predstavili smo Edu4All. Sada je vrijeme da omogućimo studentima generiranje slika za njihove zadatke.
Studenti će kreirati slike za svoje zadatke koji uključuju spomenike, a točni spomenici ovise o njihovim idejama. Studenti se potiču da koriste svoju kreativnost u ovom zadatku kako bi smjestili te spomenike u različite kontekste.
Evo jednog mogućeg rješenja:
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)Nakon što završite ovu lekciju, pogledajte našu kolekciju za učenje o generativnoj umjetnoj inteligenciji kako biste nastavili unapređivati svoje znanje o generativnoj umjetnoj inteligenciji!
Prijeđite na Lekciju 10, gdje ćemo istražiti kako izraditi AI aplikacije uz malo kodiranja
Odricanje od odgovornosti:
Ovaj dokument je preveden pomoću AI usluge za prevođenje Co-op Translator. Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadržavati pogreške ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za ključne informacije preporučuje se profesionalni prijevod od strane čovjeka. Ne preuzimamo odgovornost za nesporazume ili pogrešna tumačenja koja mogu proizaći iz korištenja ovog prijevoda.








