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áření aplikací pro generování obrázků

Vytváření aplikací pro generování obrázků

Generování textu není jedinou schopností LLM. Je také možné generovat obrázky na základě textových popisů. Obrázky jako modality mohou být velmi užitečné v mnoha oblastech, jako je zdravotnická technologie, architektura, cestovní ruch, vývoj her a další. V této kapitole se podíváme na dva nejpopulárnější modely pro generování obrázků, DALL-E a Midjourney.

Úvod

V této lekci se zaměříme na:

  • Generování obrázků a jeho užitečnost.
  • DALL-E a Midjourney, co to je a jak fungují.
  • Jak vytvořit aplikaci pro generování obrázků.

Cíle učení

Po dokončení této lekce budete schopni:

  • Vytvořit aplikaci pro generování obrázků.
  • Definovat hranice pro vaši aplikaci pomocí meta promptů.
  • Pracovat s DALL-E a Midjourney.

Proč vytvářet aplikaci pro generování obrázků?

Aplikace pro generování obrázků jsou skvělým způsobem, jak prozkoumat možnosti generativní umělé inteligence. Mohou být použity například pro:

  • Úpravy a syntézu obrázků. Můžete generovat obrázky pro různé účely, jako je úprava obrázků nebo jejich syntéza.

  • Použití v různých odvětvích. Mohou být také použity k vytváření obrázků pro různá odvětví, jako je zdravotnická technologie, cestovní ruch, vývoj her a další.

Scénář: Edu4All

V rámci této lekce budeme pokračovat v práci s naším startupem Edu4All. Studenti budou vytvářet obrázky pro své úkoly, konkrétně jaké obrázky, to záleží na nich. Mohou například vytvořit ilustrace pro svou vlastní pohádku, vytvořit novou postavu pro svůj příběh nebo jim pomoci vizualizovat své nápady a koncepty.

Například pokud studenti Edu4All pracují ve třídě na tématu památek, mohli by vytvořit něco takového:

Startup Edu4All, třída o památkách, Eiffelova věž

pomocí promptu jako:

"Pes vedle Eiffelovy věže za ranního slunečního světla"

Co je DALL-E a Midjourney?

DALL-E a Midjourney jsou dva z nejpopulárnějších modelů pro generování obrázků, které umožňují používat textové prompty k vytváření obrázků.

DALL-E

Začněme s DALL-E, což je model generativní umělé inteligence, který generuje obrázky na základě textových popisů.

DALL-E je kombinací dvou modelů, CLIP a rozptýlené pozornosti.

  • CLIP je model, který generuje vektory (numerické reprezentace dat) z obrázků a textu.

  • Rozptýlená pozornost je model, který generuje obrázky z vektorů. DALL-E je trénován na datasetu obrázků a textu a může být použit k generování obrázků na základě textových popisů. Například DALL-E může být použit k vytvoření obrázků kočky v klobouku nebo psa s čírem.

Midjourney

Midjourney funguje podobně jako DALL-E, generuje obrázky na základě textových promptů. Midjourney může být také použit k vytvoření obrázků pomocí promptů jako „kočka v klobouku“ nebo „pes s čírem“.

Obrázek generovaný Midjourney, mechanický holub Autor obrázku Wikipedia, obrázek generovaný Midjourney

Jak fungují DALL-E a Midjourney

Nejprve DALL-E. DALL-E je model generativní umělé inteligence založený na architektuře transformátorů s autoregresivním transformátorem.

Autoregresivní transformátor definuje, jak model generuje obrázky z textových popisů. Generuje jeden pixel po druhém a poté používá generované pixely k vytvoření dalšího pixelu. Tento proces probíhá přes více vrstev neuronové sítě, dokud není obrázek kompletní.

Díky tomuto procesu DALL-E kontroluje atributy, objekty, charakteristiky a další prvky v generovaném obrázku. Nicméně DALL-E 2 a 3 mají větší kontrolu nad generovaným obrázkem.

Vytvoření první aplikace pro generování obrázků

Co je potřeba k vytvoření aplikace pro generování obrázků? Potřebujete následující knihovny:

  • python-dotenv, doporučuje se použít tuto knihovnu k uchování tajných klíčů v souboru .env mimo kód.
  • openai, tato knihovna slouží k interakci s OpenAI API.
  • pillow, pro práci s obrázky v Pythonu.
  • requests, pro pomoc s HTTP požadavky.

Vytvoření a nasazení modelu Azure OpenAI

Pokud jste to ještě neudělali, postupujte podle pokynů na stránce Microsoft Learn, abyste vytvořili zdroj a model Azure OpenAI. Vyberte model DALL-E 3.

Vytvoření aplikace

  1. Vytvořte soubor .env s následujícím obsahem:

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

    Tyto informace najdete v Azure OpenAI Foundry Portálu pro váš zdroj v sekci "Deployments".

  2. Shromážděte výše uvedené knihovny do souboru requirements.txt takto:

    python-dotenv
    openai
    pillow
    requests
    
  3. Dále vytvořte virtuální prostředí a nainstalujte knihovny:

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

    Pro Windows použijte následující příkazy k vytvoření a aktivaci virtuálního prostředí:

    python3 -m venv venv
    venv\Scripts\activate.bat
  4. Přidejte následující kód do souboru 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)

Vysvětlení kódu:

  • Nejprve importujeme potřebné knihovny, včetně knihovny OpenAI, knihovny dotenv, knihovny requests a knihovny Pillow.

    import openai
    import os
    import requests
    from PIL import Image
    import dotenv
  • Dále načteme proměnné prostředí ze souboru .env.

    # import dotenv
    dotenv.load_dotenv()
  • Poté 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ásledně generujeme obrázek:

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

    Výše uvedený kód odpovídá JSON objektem, který obsahuje URL generovaného obrázku. URL můžeme použít ke stažení obrázku a jeho uložení do souboru.

  • Nakonec otevřeme obrázek a použijeme standardní prohlížeč obrázků k jeho zobrazení:

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

Podrobnosti o generování obrázku

Podívejme se podrobněji na kód, který generuje obrázek:

  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, který se používá k generování obrázku. V tomto případě používáme prompt "Králík na koni, držící lízátko, na mlhavé louce, kde rostou narcisy".
  • size je velikost generovaného obrázku. V tomto případě generujeme obrázek o rozměrech 1024x1024 pixelů.
  • n je počet generovaných obrázků. V tomto případě generujeme dva obrázky.
  • temperature je parametr, který ovládá náhodnost výstupu generativního modelu AI. Teplota je hodnota mezi 0 a 1, kde 0 znamená, že výstup je deterministický, a 1 znamená, že výstup je náhodný. Výchozí hodnota je 0,7.

Existují další věci, které můžete s obrázky dělat, a ty probereme v další části.

Další možnosti generování obrázků

Viděli jste, jak jsme byli schopni vygenerovat obrázek pomocí několika řádků v Pythonu. Existují však další věci, které můžete s obrázky dělat.

Můžete také:

  • Provádět úpravy. Poskytnutím existujícího obrázku, masky a promptu můžete obrázek upravit. Například můžete přidat něco do určité části obrázku. Představte si náš obrázek králíka, můžete přidat klobouk králíkovi. Jak to udělat? Poskytnete obrázek, masku (identifikující část oblasti pro změnu) a textový prompt, který určí, co by mělo být provedeno.

Poznámka: toto není podporováno v DALL-E 3.

Zde je příklad použití 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ázek by obsahoval pouze lounge s bazénem, ale finální obrázek by měl plameňáka:

  • Vytvářet variace. Myšlenka je, že vezmete existující obrázek a požádáte o vytvoření variací. Pro vytvoření variace poskytnete obrázek a textový prompt a kód jako takový:

    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 podporováno pouze na OpenAI.

Teplota

Teplota je parametr, který ovládá náhodnost výstupu generativního modelu AI. Teplota je hodnota mezi 0 a 1, kde 0 znamená, že výstup je deterministický, a 1 znamená, že výstup je náhodný. Výchozí hodnota je 0,7.

Podívejme se na příklad, jak teplota funguje, spuštěním tohoto promptu dvakrát:

Prompt: "Králík na koni, držící lízátko, na mlhavé louce, kde rostou narcisy"

Králík na koni držící lízátko, verze 1

Nyní spusťme stejný prompt znovu, abychom viděli, že nedostaneme stejný obrázek dvakrát:

Generovaný obrázek králíka na koni

Jak vidíte, obrázky jsou podobné, ale ne stejné. Zkusme změnit hodnotu teploty na 0,1 a uvidíme, co se 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
    )

Změna teploty

Zkusme udělat odpověď více deterministickou. Mohli jsme si všimnout, že na prvním obrázku je králík a na druhém obrázku je kůň, takže se obrázky značně liší.

Proto změňme náš kód a nastavme 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
    )

Nyní, když spustíte tento kód, dostanete tyto dva obrázky:

  • Teplota 0, v1
  • Teplota 0, v2

Zde jasně vidíte, jak se obrázky více podobají.

Jak definovat hranice pro vaši aplikaci pomocí meta promptů

S naší ukázkou již můžeme generovat obrázky pro naše klienty. Nicméně je potřeba vytvořit určité hranice pro naši aplikaci.

Například nechceme generovat obrázky, které nejsou vhodné pro práci nebo nejsou vhodné pro děti.

To můžeme udělat pomocí meta promptů. Meta prompty jsou textové prompty, které se používají k ovládání výstupu generativního modelu AI. Například můžeme použít meta prompty k ovládání výstupu a zajistit, že generované obrázky budou vhodné pro práci nebo pro děti.

Jak to funguje?

Jak tedy meta prompty fungují?

Meta prompty jsou textové prompty, které se používají k ovládání výstupu generativního modelu AI. Jsou umístěny před textovým promptem a slouží k ovládání výstupu modelu. Jsou zabudovány do aplikací, aby ovládaly výstup modelu, a spojují vstup promptu a vstup meta promptu do jednoho textového promptu.

Jedním příkladem meta promptu by mohl být následující:

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)

Nyní se podívejme, jak můžeme použít meta prompty v naší ukázce.

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 výše uvedeného promptu můžete vidět, jak všechny generované obrázky zohledňují meta prompt.

Úkol - umožněme studentům

Na začátku této lekce jsme představili Edu4All. Nyní je čas umožnit studentům generovat obrázky pro jejich úkoly.

Studenti vytvoří obrázky pro své úkoly obsahující památky, konkrétně jaké památky, to záleží na nich. Studenti jsou vyzváni, aby použili svou kreativitu v tomto úkolu a umístili tyto památky do různých kontextů.

Řešení

Zde je jedno možné řešení:

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)

Skvělá práce! Pokračujte v učení

Po dokončení této lekce se podívejte na naši sbírku učení o generativní AI, abyste si dále rozšířili své znalosti o generativní AI!

Přejděte na lekci 10, kde se podíváme na to, jak vytvářet AI aplikace pomocí low-code


Prohlášení:
Tento dokument byl přeložen pomocí služby AI pro překlad Co-op Translator. Ačkoli se snažíme o přesnost, mějte prosím na paměti, že automatizované překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho rodném jazyce by měl být považován za autoritativní zdroj. Pro důležité informace se doporučuje profesionální lidský překlad. Neodpovídáme za žádná nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu.