Skip to content

Latest commit

 

History

History
489 lines (334 loc) · 21.4 KB

File metadata and controls

489 lines (334 loc) · 21.4 KB

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

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

Az 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 orvostechnika, építészet, turizmus, játékfejlesztés és más területeken. Ebben a fejezetben a két legnépszerűbb képgeneráló modellt, a DALL-E-t és a Midjourney-t vizsgáljuk meg.

Bevezetés

Ebben a leckében az alábbiakat tárgyaljuk:

  • Képgenerálás és annak hasznossága.
  • DALL-E és Midjourney: mik ezek, és hogyan működnek.
  • Hogyan építhetünk 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 promptokkal.
  • 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 AI 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 esetekhez 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 orvostechnika, turizmus, játékfejlesztés és más területek.

Szenárió: Edu4All

A lecke részeként továbbra is az Edu4All startupunkkal dolgozunk. A diákok képeket készítenek a feladataikhoz, hogy pontosan milyen képeket, az a diákokon múlik. Lehetnek például illusztrációk saját meséjükhöz, új karakterek létrehozása történetükhöz, vagy ötleteik és koncepcióik vizualizálása.

Íme, mit generálhatnak az Edu4All diákjai például, ha az osztályban műemlékekkel dolgoznak:

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?

A DALL-E és a 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 AI 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 az adatok numerikus reprezentációi, képekből és szövegekből.

  • Diffúz figyelem, egy modell, amely beágyazásokból képeket generál. A DALL-E-t képek és szövegek adatállományán képezték, é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 a Midjourney?

Először is, DALL-E. A DALL-E egy generatív AI modell, amely a transzformer architektúrán alapul, egy autoregresszív transzformerrel.

Az autoregresszív transzformer meghatározza, hogyan generál egy modell képeket szöveges leírásokból: egy pixel generálásával kezdi, majd a generált pixeleket használja a következő pixel generálásához. Több rétegen halad át egy neurális hálózatban, amíg a kép elkészül.

Ezzel a folyamattal a DALL-E szabályozza a generált kép attribútumait, objektumait, jellemzőit és egyebeket. Azonban a DALL-E 2 és 3 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 van szükséged:

  • python-dotenv, erősen ajánlott ezt a könyvtárat használni, hogy a titkos adataidat 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épek kezeléséhez 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 egy Azure OpenAI erőforrás és modell létrehozásához. 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 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)

Magyarázzuk el ezt a kódot:

  • 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()

A kép generálásának részletei

Nézzük meg részletesebben a képgeneráló 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ához használunk. Ebben az esetben a "Nyúl lovon, nyalókát tartva, ködös réten, ahol nárciszok nőnek" promptot használjuk.
  • 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 AI modell kimenetének véletlenszerűségét szabályozza. A hőmérséklet értéke 0 és 1 között van, ahol 0 azt jelenti, hogy a kimenet determinisztikus, és 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ő szekcióban tárgyalunk.

A képgenerálás további képességei

Eddig láthattad, hogyan tudtunk néhány sor Python kóddal képet generálni. Azonban további dolgokat is tehetsz a képekkel.

Az alábbiakat is megteheted:

  • Szerkesztések 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épünket, hozzáadhatsz egy kalapot a nyúlhoz. Ezt úgy teheted meg, hogy megadod a képet, egy maszkot (amely azonosítja a változtatás területét), és egy szöveges promptot, amely leírja, mit kell tenni.

Megjegyzés: ez nem támogatott a DALL-E 3-ban.

Íme egy példa 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 tartalmazná, de a végső kép egy flamingót is tartalmazna:

  • 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ál támogatott.

Hőmérséklet

A hőmérséklet egy paraméter, amely a generatív AI modell kimenetének véletlenszerűségét szabályozza. A hőmérséklet értéke 0 és 1 között van, ahol 0 azt jelenti, hogy a kimenet determinisztikus, és 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, verzió 1

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 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, a második képen pedig 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, ezeket a képeket kapod:

  • Hőmérséklet 0, v1
  • Hőmérséklet 0, v2

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égünk van arra, hogy bizonyos határokat állítsunk 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, amelyeket a generatív AI modell kimenetének szabályozására használunk. Például meta promptokkal szabályozhatjuk a kimenetet, és 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, amelyeket a generatív AI modell kimenetének szabályozására használnak. Ezek a szöveges prompt előtt helyezkednek el, és a modell kimenetének szabályozására szolgálnak, beágyazva az alkalmazásokba a modell kimenetének szabályozására. 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 - segítsük 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ákokon múlik. 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

Miután befejezted ezt a leckét, nézd meg a Generatív AI tanulási gyűjteményt, hogy tovább fejleszthesd a generatív AI-val kapcsolatos tudásodat!

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 került lefordításra. 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. Fontos 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.