Skip to content

Latest commit

 

History

History
487 lines (333 loc) · 21.1 KB

File metadata and controls

487 lines (333 loc) · 21.1 KB

Képgeneráló alkalmazások építése

Képgeneráló alkalmazások építése

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.

Bevezetés

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.

Tanulási célok

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.

Miért érdemes képgeneráló alkalmazást építeni?

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.

Forgatókönyv: Edu4All

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:

Edu4All startup, osztály a műemlékekről, Eiffel-torony

egy ilyen prompt segítségével:

"Kutya az Eiffel-torony mellett kora reggeli napsütésben"

Mi az a DALL-E és Midjourney?

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.

DALL-E

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.

Midjourney

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”.

Midjourney által generált kép, mechanikus galamb Kép forrása: Wikipedia, Midjourney által generált kép

Hogyan működik a DALL-E és Midjourney?

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.

Az első képgeneráló alkalmazásod építése

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.

Azure OpenAI modell létrehozása és telepítése

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.

Az alkalmazás létrehozása

  1. 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.

  2. Gyűjtsd össze a fenti könyvtárakat egy requirements.txt nevű fájlban, így:

    python-dotenv
    openai
    pillow
    requests
    
  3. 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.txt

    Windows 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
  4. 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()

További részletek a kép generálásáról

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.

További képességek a képgenerálásban

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].url

Az 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.

Hőmérséklet

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"

Nyúl lovon, nyalókát tartva, 1. verzió

Most futtassuk ugyanazt a promptot, hogy lássuk, nem kapunk kétszer ugyanazt a képet:

Generált kép nyúl lovon

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
    )

A hőmérséklet megváltoztatása

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:

  • Hőmérséklet 0, 1. verzió
  • Hőmérséklet 0, 2. verzió

Itt egyértelműen látható, hogy a képek jobban hasonlítanak egymásra.

Hogyan határozzuk meg az alkalmazás határait meta promptokkal?

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ödik?

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 image

A fenti promptból látható, hogy minden létrehozott kép figyelembe veszi a meta promptot.

Feladat - engedjük szabadjára a diákokat

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.

Megoldás

Í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)

Nagyszerű munka! Folytasd a tanulást

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.