LLM-ovi 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 više. U ovom poglavlju ćemo istražiti 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.
Aplikacije za generiranje slika odličan su način za istraživanje mogućnosti generativne umjetne inteligencije. Mogu se koristiti, na primjer:
-
Uređivanje i sinteza slika. Možete generirati slike za razne primjene, poput uređivanja slika i sinteze slika.
-
Primjena u raznim industrijama. Također se mogu koristiti za generiranje slika za razne industrije poput medicinske tehnologije, turizma, razvoja igara i više.
Kao dio ove lekcije, nastavit ćemo raditi s našim startupom, Edu4All. Studenti će kreirati slike za svoje zadatke, točno koje slike ovisi o studentima, ali to mogu biti ilustracije za njihovu vlastitu bajku, kreiranje novog lika za njihovu priču ili im pomoći vizualizirati njihove ideje i koncepte.
Evo što bi studenti Edu4All-a mogli generirati, na primjer, ako rade u razredu na spomenicima:
koristeći prompt poput
"Pas pored Eiffelovog tornja u jutarnjem svjetlu"
DALL-E i Midjourney dva su najpopularnija modela za generiranje slika, omogućuju vam korištenje prompta za generiranje slika.
Počnimo s DALL-E, koji je generativni AI model koji generira slike iz tekstualnih opisa.
-
CLIP, je model koji generira ugrađene podatke, numeričke reprezentacije podataka, iz slika i teksta.
-
Difuzna pažnja, je model koji generira slike iz ugrađenih podataka. DALL-E je treniran na skupu podataka slika i teksta i može se koristiti za generiranje slika iz tekstualnih opisa. Na primjer, DALL-E se može koristiti za generiranje slika mačke s kapom ili psa s irokezom.
Midjourney radi na sličan način kao DALL-E, generira slike iz tekstualnih prompta. Midjourney se također može koristiti za generiranje slika koristeći prompte poput "mačka s kapom" ili "pas s irokezom".
Autor slike Wikipedia, slika generirana pomoću Midjourney
Prvo, DALL-E. DALL-E je generativni AI model temeljen na arhitekturi transformatora s autoregresivnim transformatorom.
Autoregresivni transformator definira kako model generira slike iz tekstualnih opisa, generira jedan piksel po piksel, a zatim koristi generirane piksele za generiranje sljedećeg piksela. 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 slici koju generira. Međutim, DALL-E 2 i 3 imaju veću kontrolu nad generiranom slikom.
Što je potrebno za izradu aplikacije za generiranje slika? Potrebne su vam sljedeće biblioteke:
- python-dotenv, preporučuje se korištenje ove biblioteke za čuvanje vaših tajni u datoteci .env odvojeno od koda.
- openai, ova biblioteka koristi se 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 vaš resurs u odjeljku "Deployments".
-
Prikupite gore navedene biblioteke u datoteci pod nazivom 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 vašeg virtualnog okruženja:
python3 -m venv venv venv\Scripts\activate.bat
-
Dodajte sljedeći kod u datoteku pod nazivom 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. Možemo koristiti URL 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 kod koji generira sliku detaljnije:
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 nasumičnost 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 nasumičan. Zadana vrijednost je 0.7.
Postoje još mnoge stvari koje možete raditi sa slikama, a o tome ćemo govoriti u sljedećem dijelu.
Do sada ste vidjeli kako smo uspjeli generirati sliku koristeći nekoliko linija koda u Pythonu. Međutim, postoje još mnoge stvari koje možete raditi sa slikama.
Također možete učiniti sljedeće:
- Izvršiti izmjene. 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. Kako biste to učinili, trebate pružiti sliku, masku (koja identificira dio područja za promjenu) i tekstualni prompt 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 bi sadržavala samo salon s bazenom, ali konačna slika bi imala 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 nasumičnost 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 nasumičan. 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 će se dogoditi:
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 podudaraju.
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 primjerene 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, postavljaju se 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 unos 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 prompt 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, točno koji spomenici ovisi o studentima. Od studenata se traži 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 AI kako biste nastavili unapređivati svoje znanje o generativnoj AI!
Prijeđite na Lekciju 10 gdje ćemo istražiti kako izraditi AI aplikacije s malo koda
Izjava o odricanju 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 ljudskog prevoditelja. Ne preuzimamo odgovornost za nesporazume ili pogrešna tumačenja koja proizlaze iz korištenja ovog prijevoda.








