Skip to content

Latest commit

 

History

History
487 lines (333 loc) · 20.6 KB

File metadata and controls

487 lines (333 loc) · 20.6 KB

Vytváranie aplikácií na generovanie obrázkov

Vytváranie aplikácií na generovanie obrázkov

Generovanie textu nie je jedinou schopnosťou LLM modelov. Je možné generovať aj obrázky na základe textových popisov. Obrázky ako modality môžu byť veľmi užitočné v mnohých oblastiach, ako je MedTech, architektúra, cestovný ruch, vývoj hier a ďalšie. V tejto kapitole sa pozrieme na dva najpopulárnejšie modely na generovanie obrázkov, DALL-E a Midjourney.

Úvod

V tejto lekcii sa budeme venovať:

  • Generovaniu obrázkov a jeho užitočnosti.
  • Modelom DALL-E a Midjourney, ich fungovaniu a využitiu.
  • Ako vytvoriť aplikáciu na generovanie obrázkov.

Ciele učenia

Po absolvovaní tejto lekcie budete schopní:

  • Vytvoriť aplikáciu na generovanie obrázkov.
  • Definovať hranice pre svoju aplikáciu pomocou meta promptov.
  • Pracovať s modelmi DALL-E a Midjourney.

Prečo vytvárať aplikáciu na generovanie obrázkov?

Aplikácie na generovanie obrázkov sú skvelým spôsobom, ako preskúmať schopnosti generatívnej AI. Môžu byť použité napríklad na:

  • Úpravu a syntézu obrázkov. Môžete generovať obrázky pre rôzne účely, ako je úprava obrázkov alebo ich syntéza.

  • Použitie v rôznych odvetviach. Môžu byť tiež použité na generovanie obrázkov pre rôzne odvetvia, ako MedTech, cestovný ruch, vývoj hier a ďalšie.

Scenár: Edu4All

V rámci tejto lekcie budeme pokračovať v práci s naším startupom Edu4All. Študenti budú vytvárať obrázky pre svoje hodnotenia. Aké obrázky si vyberú, je na nich, ale môžu to byť ilustrácie pre ich vlastnú rozprávku, vytvorenie nového charakteru pre ich príbeh alebo pomoc pri vizualizácii ich nápadov a konceptov.

Tu je príklad, čo by mohli študenti Edu4All vytvoriť, ak pracujú v triede na téme pamiatok:

Startup Edu4All, trieda o pamiatkach, Eiffelova veža

pomocou promptu ako:

"Pes vedľa Eiffelovej veže v rannom slnečnom svetle"

Čo je DALL-E a Midjourney?

DALL-E a Midjourney sú dva z najpopulárnejších modelov na generovanie obrázkov, ktoré umožňujú používať prompty na generovanie obrázkov.

DALL-E

Začnime s DALL-E, čo je generatívny AI model, ktorý generuje obrázky na základe textových popisov.

DALL-E je kombináciou dvoch modelov, CLIP a difúznej pozornosti.

  • CLIP je model, ktorý generuje embeddings, čo sú numerické reprezentácie dát, z obrázkov a textu.

  • Difúzna pozornosť je model, ktorý generuje obrázky z embeddings. DALL-E je trénovaný na dátovom súbore obrázkov a textu a môže byť použitý na generovanie obrázkov na základe textových popisov. Napríklad DALL-E môže byť použitý na generovanie obrázkov mačky v klobúku alebo psa s mohawkom.

Midjourney

Midjourney funguje podobne ako DALL-E, generuje obrázky na základe textových promptov. Midjourney môže byť tiež použitý na generovanie obrázkov pomocou promptov ako „mačka v klobúku“ alebo „pes s mohawkom“.

Obrázok generovaný Midjourney, mechanický holub Obrázok: Wikipedia, generovaný Midjourney

Ako fungujú DALL-E a Midjourney

Najprv DALL-E. DALL-E je generatívny AI model založený na architektúre transformátora s autoregresívnym transformátorom.

Autoregresívny transformátor definuje, ako model generuje obrázky na základe textových popisov. Generuje jeden pixel naraz a potom používa generované pixely na generovanie ďalšieho pixelu. Tento proces prechádza viacerými vrstvami v neurónovej sieti, až kým nie je obrázok kompletný.

Pomocou tohto procesu DALL-E kontroluje atribúty, objekty, charakteristiky a ďalšie prvky v generovanom obrázku. Avšak DALL-E 2 a 3 majú väčšiu kontrolu nad generovaným obrázkom.

Vytvorenie vašej prvej aplikácie na generovanie obrázkov

Čo je potrebné na vytvorenie aplikácie na generovanie obrázkov? Potrebujete nasledujúce knižnice:

  • python-dotenv, odporúča sa používať túto knižnicu na uchovávanie tajných údajov v súbore .env mimo kódu.
  • openai, táto knižnica sa používa na interakciu s OpenAI API.
  • pillow, na prácu s obrázkami v Pythone.
  • requests, na pomoc pri vytváraní HTTP požiadaviek.

Vytvorenie a nasadenie modelu Azure OpenAI

Ak ste to ešte neurobili, postupujte podľa pokynov na stránke Microsoft Learn, aby ste vytvorili zdroj a model Azure OpenAI. Vyberte model DALL-E 3.

Vytvorenie aplikácie

  1. Vytvorte súbor .env s nasledujúcim obsahom:

    AZURE_OPENAI_ENDPOINT=<your endpoint>
    AZURE_OPENAI_API_KEY=<your key>
    AZURE_OPENAI_DEPLOYMENT="dall-e-3"
    

    Nájdite tieto informácie v Azure OpenAI Foundry Portáli pre váš zdroj v sekcii "Deployments".

  2. Zozbierajte vyššie uvedené knižnice do súboru requirements.txt takto:

    python-dotenv
    openai
    pillow
    requests
    
  3. Ďalej vytvorte virtuálne prostredie a nainštalujte knižnice:

    python3 -m venv venv
    source venv/bin/activate
    pip install -r requirements.txt

    Pre Windows použite nasledujúce príkazy na vytvorenie a aktiváciu virtuálneho prostredia:

    python3 -m venv venv
    venv\Scripts\activate.bat
  4. Pridajte nasledujúci kód do súboru 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)

Vysvetlime si tento kód:

  • Najprv importujeme potrebné knižnice, vrátane knižnice OpenAI, knižnice dotenv, knižnice requests a knižnice Pillow.

    import openai
    import os
    import requests
    from PIL import Image
    import dotenv
  • Ďalej načítame environmentálne premenné zo súboru .env.

    # import dotenv
    dotenv.load_dotenv()
  • Potom nakonfigurujeme klienta služby Azure OpenAI.

    # 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"
        )
  • Následne generujeme obrázok:

    # 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']
                        )

    Vyššie uvedený kód odpovedá JSON objektom, ktorý obsahuje URL generovaného obrázku. URL môžeme použiť na stiahnutie obrázku a jeho uloženie do súboru.

  • Nakoniec otvoríme obrázok a použijeme štandardný prehliadač obrázkov na jeho zobrazenie:

    image = Image.open(image_path)
    image.show()

Viac detailov o generovaní obrázku

Pozrime sa na kód, ktorý generuje obrázok, podrobnejšie:

  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 textový prompt, ktorý sa používa na generovanie obrázku. V tomto prípade používame prompt "Zajac na koni, držiaci lízatko, na hmlistom lúke, kde rastú narcisy".
  • size je veľkosť generovaného obrázku. V tomto prípade generujeme obrázok s rozmermi 1024x1024 pixelov.
  • n je počet generovaných obrázkov. V tomto prípade generujeme dva obrázky.
  • temperature je parameter, ktorý ovláda náhodnosť výstupu generatívneho AI modelu. Hodnota teploty je medzi 0 a 1, kde 0 znamená, že výstup je deterministický, a 1 znamená, že výstup je náhodný. Predvolená hodnota je 0.7.

Existuje viac vecí, ktoré môžete robiť s obrázkami, a tie pokryjeme v ďalšej sekcii.

Dodatočné schopnosti generovania obrázkov

Doteraz ste videli, ako sme dokázali generovať obrázok pomocou niekoľkých riadkov v Pythone. Existujú však ďalšie veci, ktoré môžete robiť s obrázkami.

Môžete tiež:

  • Vykonávať úpravy. Poskytnutím existujúceho obrázku, masky a promptu môžete upraviť obrázok. Napríklad môžete pridať niečo na určitú časť obrázku. Predstavte si náš obrázok zajaca, môžete pridať klobúk zajacovi. Ako by ste to urobili, je poskytnutím obrázku, masky (identifikujúcej časť oblasti na zmenu) a textového promptu, ktorý určuje, čo by sa malo urobiť.

Poznámka: toto nie je podporované v DALL-E 3.

Tu je príklad pomocou 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].url

Základný obrázok by obsahoval iba salónik s bazénom, ale konečný obrázok by mal plameniaka:

  • Vytvárať variácie. Myšlienka je, že vezmete existujúci obrázok a požiadate o vytvorenie variácií. Na vytvorenie variácie poskytnete obrázok a textový prompt a kód ako takýto:

    response = openai.Image.create_variation(
      image=open("bunny-lollipop.png", "rb"),
      n=1,
      size="1024x1024"
    )
    image_url = response['data'][0]['url']

    Poznámka: toto je podporované iba na OpenAI.

Teplota

Teplota je parameter, ktorý ovláda náhodnosť výstupu generatívneho AI modelu. Hodnota teploty je medzi 0 a 1, kde 0 znamená, že výstup je deterministický, a 1 znamená, že výstup je náhodný. Predvolená hodnota je 0.7.

Pozrime sa na príklad, ako teplota funguje, spustením tohto promptu dvakrát:

Prompt: "Zajac na koni, držiaci lízatko, na hmlistom lúke, kde rastú narcisy"

Zajac na koni držiaci lízatko, verzia 1

Teraz spustíme ten istý prompt, aby sme videli, že nedostaneme dvakrát rovnaký obrázok:

Generovaný obrázok zajaca na koni

Ako vidíte, obrázky sú podobné, ale nie rovnaké. Skúsme zmeniť hodnotu teploty na 0.1 a uvidíme, čo sa stane:

 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
    )

Zmena teploty

Skúsme urobiť výstup viac deterministickým. Mohli sme pozorovať z dvoch generovaných obrázkov, že na prvom obrázku je zajac a na druhom obrázku je kôň, takže obrázky sa značne líšia.

Preto zmeníme náš kód a nastavíme teplotu na 0, takto:

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
    )

Teraz, keď spustíte tento kód, dostanete tieto dva obrázky:

  • Teplota 0, v1
  • Teplota 0, v2

Tu jasne vidíte, ako sa obrázky viac podobajú.

Ako definovať hranice pre vašu aplikáciu pomocou meta promptov

S našou ukážkou už môžeme generovať obrázky pre našich klientov. Avšak, potrebujeme vytvoriť určité hranice pre našu aplikáciu.

Napríklad nechceme generovať obrázky, ktoré nie sú vhodné pre pracovné prostredie alebo nie sú vhodné pre deti.

Môžeme to urobiť pomocou meta promptov. Meta prompty sú textové prompty, ktoré sa používajú na kontrolu výstupu generatívneho AI modelu. Napríklad môžeme použiť meta prompty na kontrolu výstupu a zabezpečiť, že generované obrázky sú vhodné pre pracovné prostredie alebo vhodné pre deti.

Ako to funguje?

Ako fungujú meta prompty?

Meta prompty sú textové prompty, ktoré sa používajú na kontrolu výstupu generatívneho AI modelu. Sú umiestnené pred textovým promptom a používajú sa na kontrolu výstupu modelu a sú zabudované do aplikácií na kontrolu výstupu modelu. Zahrňujú vstup promptu a vstup meta promptu do jedného textového promptu.

Jedným príkladom meta promptu by bol nasledujúci:

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)

Teraz sa pozrime, ako môžeme použiť meta prompty v našej ukážke.

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

Z vyššie uvedeného promptu môžete vidieť, ako všetky generované obrázky zohľadňujú meta prompt.

Úloha - umožnime študentom

Na začiatku tejto lekcie sme predstavili Edu4All. Teraz je čas umožniť študentom generovať obrázky pre ich hodnotenia.

Študenti budú vytvárať obrázky pre svoje hodnotenia obsahujúce pamiatky. Aké pamiatky si vyberú, je na nich. Študenti sú vyzvaní, aby použili svoju kreativitu v tejto úlohe a umiestnili tieto pamiatky do rôznych kontextov.

Riešenie

Tu je jedno možné riešenie:

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)

Skvelá práca! Pokračujte vo svojom učení

Po dokončení tejto lekcie si pozrite našu zbierku učenia o generatívnej AI, aby ste si ďalej rozšírili svoje znalosti o generatívnej AI!

Prejdite na Lekciu 10, kde sa pozrieme na to, ako vytvárať AI aplikácie s nízkym kódom


Upozornenie:
Tento dokument bol preložený pomocou služby AI prekladu Co-op Translator. Hoci sa snažíme o presnosť, upozorňujeme, že automatizované preklady môžu obsahovať chyby alebo nepresnosti. Pôvodný dokument v jeho pôvodnom jazyku by mal byť považovaný za autoritatívny zdroj. Pre kritické informácie sa odporúča profesionálny ľudský preklad. Nenesieme zodpovednosť za akékoľvek nedorozumenia alebo nesprávne interpretácie vyplývajúce z použitia tohto prekladu.