A nagy nyelvi modellek (LLM-ek) nem csak szöveg generálására alkalmasak. Szöveges leírások alapján képek is létrehozhatók. A képek mint modalitás számos területen hasznosak lehetnek, például az orvostechnológia, építészet, turizmus, játékfejlesztés és más területeken. Ebben a fejezetben megvizsgáljuk a két legnépszerűbb képgeneráló modellt, a DALL-E-t és a Midjourney-t.
Ebben a leckében az alábbiakat fogjuk áttekinteni:
- Képgenerálás és annak hasznossága.
- DALL-E és Midjourney: mik ezek, és hogyan működnek.
- Hogyan építhetsz képgeneráló alkalmazást.
A lecke elvégzése után képes leszel:
- Képgeneráló alkalmazást építeni.
- Meghatározni az alkalmazás határait meta promptok segítségével.
- Dolgozni a DALL-E és Midjourney modellekkel.
A képgeneráló alkalmazások remek lehetőséget kínálnak a generatív mesterséges intelligencia képességeinek felfedezésére. Például az alábbiakra használhatók:
-
Képszerkesztés és szintézis. Különféle felhasználási célokra generálhatsz képeket, például képszerkesztéshez és képszintézishez.
-
Számos iparágban alkalmazható. Képek generálására is használhatók különféle iparágakban, mint például orvostechnológia, turizmus, játékfejlesztés és más területeken.
A lecke részeként tovább dolgozunk az Edu4All nevű startupunkkal. A diákok képeket készítenek a feladataikhoz, hogy pontosan milyen képeket, az az ő döntésük, de lehetnek például illusztrációk saját meséikhez, új karakterek a történetükhöz, vagy segíthetnek elképzeléseik és koncepcióik vizualizálásában.
Például, ha az Edu4All diákjai az osztályban műemlékekről tanulnak, az alábbi képet generálhatják:
egy ilyen prompt segítségével:
"Kutya az Eiffel-torony mellett kora reggeli napsütésben"
DALL-E és Midjourney a két legnépszerűbb képgeneráló modell, amelyek lehetővé teszik, hogy promptok segítségével képeket generálj.
Kezdjük a DALL-E-vel, amely egy generatív mesterséges intelligencia modell, amely szöveges leírásokból képeket generál.
A DALL-E két modell, a CLIP és a diffúz figyelem kombinációja.
-
CLIP egy modell, amely beágyazásokat generál, amelyek numerikus reprezentációk képekből és szövegekből.
-
Diffúz figyelem egy modell, amely képeket generál a beágyazásokból. A DALL-E-t képek és szövegek adatállományán képezték ki, és szöveges leírásokból képek generálására használható. Például a DALL-E képes generálni egy kalapos macska vagy egy mohawk frizurás kutya képét.
A Midjourney hasonló módon működik, mint a DALL-E, szöveges promptokból generál képeket. A Midjourney szintén használható képek generálására olyan promptokkal, mint például „macska kalapban” vagy „kutya mohawk frizurával”.
Kép forrása: Wikipedia, Midjourney által generált kép
Először is, DALL-E. A DALL-E egy generatív mesterséges intelligencia modell, amely a transzformátor architektúrán alapul, és egy autoregresszív transzformátort használ.
Az autoregresszív transzformátor meghatározza, hogyan generál egy modell képeket szöveges leírásokból: egy pixelből indul ki, majd a generált pixelek alapján generálja a következő pixelt. Ez a folyamat több rétegen keresztül halad a neurális hálózatban, amíg a kép elkészül.
Ezzel a folyamattal a DALL-E képes szabályozni a generált kép attribútumait, objektumait, jellemzőit és egyebeket. Azonban a DALL-E 2 és 3 még nagyobb kontrollt biztosít a generált kép felett.
Mit igényel egy képgeneráló alkalmazás építése? Az alábbi könyvtárakra lesz szükséged:
- python-dotenv, erősen ajánlott ezt a könyvtárat használni, hogy a titkos kulcsokat egy .env fájlban tartsd távol a kódtól.
- openai, ezt a könyvtárat használod az OpenAI API-val való interakcióhoz.
- pillow, képekkel való munkához Pythonban.
- requests, HTTP kérések küldéséhez.
Ha még nem tetted meg, kövesd az Microsoft Learn oldalon található utasításokat, hogy létrehozz egy Azure OpenAI erőforrást és modellt. Válaszd a DALL-E 3 modellt.
-
Hozz létre egy .env fájlt az alábbi tartalommal:
AZURE_OPENAI_ENDPOINT=<your endpoint> AZURE_OPENAI_API_KEY=<your key> AZURE_OPENAI_DEPLOYMENT="dall-e-3"Ezt az információt az Azure OpenAI Foundry Portálon találod meg az erőforrásod "Deployments" szekciójában.
-
Gyűjtsd össze a fenti könyvtárakat egy requirements.txt nevű fájlban, így:
python-dotenv openai pillow requests -
Ezután hozz létre egy virtuális környezetet, és telepítsd a könyvtárakat:
python3 -m venv venv source venv/bin/activate pip install -r requirements.txtWindows esetén használd az alábbi parancsokat a virtuális környezet létrehozásához és aktiválásához:
python3 -m venv venv venv\Scripts\activate.bat
-
Add hozzá az alábbi kódot egy app.py nevű fájlba:
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)
A kód magyarázata:
-
Először importáljuk a szükséges könyvtárakat, beleértve az OpenAI könyvtárat, a dotenv könyvtárat, a requests könyvtárat és a Pillow könyvtárat.
import openai import os import requests from PIL import Image import dotenv
-
Ezután betöltjük a környezeti változókat a .env fájlból.
# import dotenv dotenv.load_dotenv()
-
Utána konfiguráljuk az Azure OpenAI szolgáltatás kliensét.
# 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" )
-
Ezután generáljuk a képet:
# 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'] )
A fenti kód egy JSON objektummal válaszol, amely tartalmazza a generált kép URL-jét. Az URL-t használhatjuk a kép letöltésére és fájlba mentésére.
-
Végül megnyitjuk a képet, és a standard képnézegetővel megjelenítjük:
image = Image.open(image_path) image.show()
Nézzük meg részletesebben a kép generálására vonatkozó kódot:
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, a szöveges prompt, amelyet a kép generálására használunk. Ebben az esetben a prompt: "Nyúl lovon, nyalókát tartva, ködös réten, ahol nárciszok nőnek".
- size, a generált kép mérete. Ebben az esetben egy 1024x1024 pixeles képet generálunk.
- n, a generált képek száma. Ebben az esetben két képet generálunk.
- temperature, egy paraméter, amely a generatív mesterséges intelligencia modell kimenetének véletlenszerűségét szabályozza. Az érték 0 és 1 között van, ahol 0 azt jelenti, hogy a kimenet determinisztikus, míg 1 azt jelenti, hogy a kimenet véletlenszerű. Az alapértelmezett érték 0,7.
További dolgokat is tehetsz a képekkel, amelyeket a következő szakaszban tárgyalunk.
Eddig láthattad, hogyan lehet néhány sor Python kóddal képet generálni. Azonban még több dolgot is tehetsz a képekkel.
Ezeket is megteheted:
- Szerkesztés végrehajtása. Egy meglévő kép, egy maszk és egy prompt megadásával módosíthatod a képet. Például hozzáadhatsz valamit egy kép egy részéhez. Képzeld el a nyúl képet, hozzáadhatsz egy kalapot a nyúlhoz. Ezt úgy teheted meg, hogy megadod a képet, egy maszkot (amely azonosítja a módosítandó területet) és egy szöveges promptot, amely leírja, mit kell tenni.
Megjegyzés: ez nem támogatott a DALL-E 3-ban.
Itt egy példa a GPT Image használatával:
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].urlAz alap kép csak a medencés lounge-t tartalmazza, de a végső kép egy flamingót is tartalmaz:
-
Variációk létrehozása. Az ötlet az, hogy egy meglévő képet veszel, és variációkat kérsz róla. A variáció létrehozásához megadod a képet és egy szöveges promptot, valamint ilyen kódot:
response = openai.Image.create_variation( image=open("bunny-lollipop.png", "rb"), n=1, size="1024x1024" ) image_url = response['data'][0]['url']
Megjegyzés: ez csak az OpenAI-n támogatott.
A hőmérséklet egy paraméter, amely a generatív mesterséges intelligencia modell kimenetének véletlenszerűségét szabályozza. Az érték 0 és 1 között van, ahol 0 azt jelenti, hogy a kimenet determinisztikus, míg 1 azt jelenti, hogy a kimenet véletlenszerű. Az alapértelmezett érték 0,7.
Nézzünk egy példát arra, hogyan működik a hőmérséklet, ha kétszer futtatjuk ezt a promptot:
Prompt: "Nyúl lovon, nyalókát tartva, ködös réten, ahol nárciszok nőnek"
Most futtassuk ugyanazt a promptot, hogy lássuk, nem kapunk kétszer ugyanazt a képet:
Ahogy látható, a képek hasonlóak, de nem teljesen azonosak. Próbáljuk meg megváltoztatni a hőmérséklet értékét 0,1-re, és nézzük meg, mi történik:
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
)Próbáljuk meg a választ determinisztikusabbá tenni. Az első két generált képből megfigyelhettük, hogy az első képen van egy nyúl, míg a másodikon egy ló, tehát a képek jelentősen eltérnek.
Ezért változtassuk meg a kódunkat, és állítsuk a hőmérsékletet 0-ra, így:
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
)Most, amikor futtatod ezt a kódot, az alábbi két képet kapod:
Itt egyértelműen látható, hogy a képek jobban hasonlítanak egymásra.
A demónkkal már képeket generálhatunk ügyfeleink számára. Azonban szükséges, hogy bizonyos határokat állítsunk fel az alkalmazásunk számára.
Például nem szeretnénk olyan képeket generálni, amelyek nem biztonságosak munkahelyen, vagy nem megfelelőek gyermekek számára.
Ezt meta promptokkal tehetjük meg. A meta promptok olyan szöveges promptok, amelyek a generatív mesterséges intelligencia modell kimenetét szabályozzák. Például meta promptokkal biztosíthatjuk, hogy a generált képek biztonságosak legyenek munkahelyen, vagy megfelelőek legyenek gyermekek számára.
Hogyan működnek a meta promptok?
A meta promptok olyan szöveges promptok, amelyek a generatív mesterséges intelligencia modell kimenetét szabályozzák. Ezek a szöveges prompt előtt helyezkednek el, és a modell kimenetét szabályozzák, beágyazva az alkalmazásokba, hogy szabályozzák a modell kimenetét. A prompt bemenetet és a meta prompt bemenetet egyetlen szöveges promptba foglalják.
Egy meta prompt példája lehet a következő:
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)
Most nézzük meg, hogyan használhatjuk a meta promptokat a demónkban.
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 imageA fenti promptból látható, hogy minden létrehozott kép figyelembe veszi a meta promptot.
A lecke elején bemutattuk az Edu4All-t. Most itt az ideje, hogy lehetőséget adjunk a diákoknak, hogy képeket generáljanak a feladataikhoz.
A diákok képeket készítenek a feladataikhoz, amelyek műemlékeket tartalmaznak, pontosan milyen műemlékek, az a diákok döntése. A diákokat arra kérjük, hogy használják kreativitásukat ebben a feladatban, és helyezzék ezeket a műemlékeket különböző kontextusokba.
Íme egy lehetséges megoldás:
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)A lecke befejezése után nézd meg a Generatív AI tanulási gyűjteményt, hogy tovább fejleszthesd a generatív AI ismereteidet!
Lépj tovább a 10. leckére, ahol azt vizsgáljuk meg, hogyan lehet AI alkalmazásokat építeni alacsony kódú megoldásokkal.
Felelősség kizárása:
Ez a dokumentum az Co-op Translator AI fordítási szolgáltatás segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.








