Skip to content

Latest commit

 

History

History
487 lines (333 loc) · 21.9 KB

File metadata and controls

487 lines (333 loc) · 21.9 KB

Paggawa ng Mga Aplikasyon para sa Pagbuo ng Imahe

Paggawa ng Mga Aplikasyon para sa Pagbuo ng Imahe

Hindi lamang sa pagbuo ng teksto ang kakayahan ng LLMs. Posible rin ang pagbuo ng mga imahe mula sa mga deskripsyon ng teksto. Ang pagkakaroon ng mga imahe bilang modality ay maaaring maging lubos na kapaki-pakinabang sa iba't ibang larangan tulad ng MedTech, arkitektura, turismo, pagbuo ng laro, at marami pang iba. Sa kabanatang ito, tatalakayin natin ang dalawang pinakasikat na modelo ng pagbuo ng imahe, ang DALL-E at Midjourney.

Panimula

Sa araling ito, tatalakayin natin:

  • Ang pagbuo ng imahe at kung bakit ito kapaki-pakinabang.
  • Ang DALL-E at Midjourney, kung ano ang mga ito, at paano ito gumagana.
  • Paano ka makakagawa ng isang app para sa pagbuo ng imahe.

Mga Layunin sa Pag-aaral

Pagkatapos makumpleto ang araling ito, magagawa mo ang:

  • Gumawa ng isang aplikasyon para sa pagbuo ng imahe.
  • Tukuyin ang mga hangganan para sa iyong aplikasyon gamit ang meta prompts.
  • Gumamit ng DALL-E at Midjourney.

Bakit gumawa ng aplikasyon para sa pagbuo ng imahe?

Ang mga aplikasyon para sa pagbuo ng imahe ay isang mahusay na paraan upang tuklasin ang kakayahan ng Generative AI. Maaari itong magamit, halimbawa:

  • Pag-edit at synthesis ng imahe. Maaari kang bumuo ng mga imahe para sa iba't ibang gamit, tulad ng pag-edit ng imahe at synthesis ng imahe.

  • Maaaring gamitin sa iba't ibang industriya. Maaari rin itong magamit upang bumuo ng mga imahe para sa iba't ibang industriya tulad ng MedTech, Turismo, Pagbuo ng Laro, at marami pang iba.

Scenario: Edu4All

Bilang bahagi ng araling ito, ipagpapatuloy natin ang pakikipagtulungan sa ating startup, ang Edu4All. Ang mga mag-aaral ay gagawa ng mga imahe para sa kanilang mga pagsusulit. Ang eksaktong imahe ay depende sa mga mag-aaral, ngunit maaari silang gumawa ng mga ilustrasyon para sa kanilang sariling kwento, lumikha ng bagong karakter para sa kanilang kwento, o tulungan silang mailarawan ang kanilang mga ideya at konsepto.

Narito ang maaaring mabuo ng mga mag-aaral ng Edu4All, halimbawa, kung sila ay nagtatrabaho sa klase tungkol sa mga monumento:

Startup ng Edu4All, klase tungkol sa mga monumento, Eiffel Tower

gamit ang prompt na:

"Aso sa tabi ng Eiffel Tower sa liwanag ng umaga"

Ano ang DALL-E at Midjourney?

Ang DALL-E at Midjourney ay dalawa sa mga pinakasikat na modelo ng pagbuo ng imahe. Pinapayagan ka nitong gumamit ng mga prompt upang bumuo ng mga imahe.

DALL-E

Simulan natin sa DALL-E, na isang Generative AI model na bumubuo ng mga imahe mula sa mga deskripsyon ng teksto.

Ang DALL-E ay kombinasyon ng dalawang modelo, CLIP at diffused attention.

  • CLIP, ay isang modelo na bumubuo ng embeddings, na mga numerikal na representasyon ng data, mula sa mga imahe at teksto.

  • Diffused attention, ay isang modelo na bumubuo ng mga imahe mula sa embeddings. Ang DALL-E ay sinanay sa dataset ng mga imahe at teksto at maaaring magamit upang bumuo ng mga imahe mula sa mga deskripsyon ng teksto. Halimbawa, maaaring gamitin ang DALL-E upang bumuo ng imahe ng pusa na may sombrero, o aso na may mohawk.

Midjourney

Ang Midjourney ay gumagana sa katulad na paraan sa DALL-E, bumubuo ito ng mga imahe mula sa mga text prompt. Ang Midjourney ay maaari ring magamit upang bumuo ng mga imahe gamit ang mga prompt tulad ng “pusa na may sombrero”, o “aso na may mohawk”.

Imahe na binuo ng Midjourney, mekanikal na kalapati Credito ng Imahe: Wikipedia, imahe na binuo ng Midjourney

Paano gumagana ang DALL-E at Midjourney

Una, ang DALL-E. Ang DALL-E ay isang Generative AI model na batay sa transformer architecture na may autoregressive transformer.

Ang autoregressive transformer ay tumutukoy kung paano bumubuo ang modelo ng mga imahe mula sa mga deskripsyon ng teksto. Bumubuo ito ng isang pixel sa bawat pagkakataon, at pagkatapos ay ginagamit ang mga nabuo na pixel upang bumuo ng susunod na pixel. Dumadaan ito sa maraming layer sa neural network, hanggang sa makumpleto ang imahe.

Sa prosesong ito, ang DALL-E ay kumokontrol sa mga katangian, mga bagay, mga karakteristika, at iba pa sa imahe na binuo nito. Gayunpaman, ang DALL-E 2 at 3 ay may mas maraming kontrol sa nabuo na imahe.

Paggawa ng iyong unang aplikasyon para sa pagbuo ng imahe

Ano ang kailangan upang makagawa ng isang aplikasyon para sa pagbuo ng imahe? Kailangan mo ang mga sumusunod na library:

  • python-dotenv, lubos na inirerekomenda na gamitin ang library na ito upang itago ang iyong mga lihim sa isang .env file na hiwalay sa code.
  • openai, ang library na ito ang gagamitin mo upang makipag-ugnayan sa OpenAI API.
  • pillow, upang magtrabaho sa mga imahe gamit ang Python.
  • requests, upang makatulong sa paggawa ng mga HTTP request.

Gumawa at i-deploy ang Azure OpenAI model

Kung hindi pa nagagawa, sundin ang mga tagubilin sa Microsoft Learn page upang gumawa ng Azure OpenAI resource at model. Piliin ang DALL-E 3 bilang modelo.

Gumawa ng app

  1. Gumawa ng file na .env na may ganitong nilalaman:

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

    Hanapin ang impormasyong ito sa Azure OpenAI Foundry Portal para sa iyong resource sa seksyong "Deployments".

  2. Kolektahin ang mga library sa isang file na tinatawag na requirements.txt tulad nito:

    python-dotenv
    openai
    pillow
    requests
    
  3. Susunod, gumawa ng virtual environment at i-install ang mga library:

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

    Para sa Windows, gamitin ang mga sumusunod na command upang gumawa at i-activate ang iyong virtual environment:

    python3 -m venv venv
    venv\Scripts\activate.bat
  4. Idagdag ang sumusunod na code sa file na tinatawag na 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)

Ipaliwanag natin ang code na ito:

  • Una, ini-import natin ang mga library na kailangan natin, kabilang ang OpenAI library, dotenv library, requests library, at Pillow library.

    import openai
    import os
    import requests
    from PIL import Image
    import dotenv
  • Susunod, ina-load natin ang mga environment variable mula sa .env file.

    # import dotenv
    dotenv.load_dotenv()
  • Pagkatapos nito, kino-configure natin ang Azure OpenAI service client.

    # 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"
        )
  • Susunod, bumubuo tayo ng imahe:

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

    Ang code sa itaas ay tumutugon ng JSON object na naglalaman ng URL ng nabuo na imahe. Maaari nating gamitin ang URL upang i-download ang imahe at i-save ito sa isang file.

  • Sa huli, binubuksan natin ang imahe at ginagamit ang standard image viewer upang ipakita ito:

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

Mas detalyado sa pagbuo ng imahe

Tingnan natin ang code na bumubuo ng imahe nang mas detalyado:

  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, ay ang text prompt na ginagamit upang bumuo ng imahe. Sa kasong ito, ginagamit natin ang prompt na "Kuneho sa kabayo, may hawak na lollipop, sa mahamog na parang kung saan tumutubo ang mga daffodil".
  • size, ay ang laki ng imahe na nabuo. Sa kasong ito, bumubuo tayo ng imahe na 1024x1024 pixels.
  • n, ay ang bilang ng mga imahe na nabuo. Sa kasong ito, bumubuo tayo ng dalawang imahe.
  • temperature, ay isang parameter na kumokontrol sa randomness ng output ng Generative AI model. Ang temperature ay isang halaga sa pagitan ng 0 at 1 kung saan ang 0 ay nangangahulugang deterministic ang output at ang 1 ay nangangahulugang random ang output. Ang default na halaga ay 0.7.

May iba pang mga bagay na maaari mong gawin sa mga imahe na tatalakayin natin sa susunod na seksyon.

Karagdagang kakayahan sa pagbuo ng imahe

Nakikita mo na kung paano tayo nakabuo ng imahe gamit ang ilang linya sa Python. Gayunpaman, may iba pang mga bagay na maaari mong gawin sa mga imahe.

Maaari mo ring gawin ang mga sumusunod:

  • Mag-edit ng mga imahe. Sa pamamagitan ng pagbibigay ng umiiral na imahe, mask, at prompt, maaari mong baguhin ang isang imahe. Halimbawa, maaari kang magdagdag ng isang bagay sa isang bahagi ng imahe. Isipin ang ating imahe ng kuneho, maaari kang magdagdag ng sombrero sa kuneho. Paano mo ito gagawin ay sa pamamagitan ng pagbibigay ng imahe, mask (pagkilala sa bahagi ng lugar para sa pagbabago) at text prompt upang sabihin kung ano ang dapat gawin.

Tandaan: hindi ito suportado sa DALL-E 3.

Narito ang isang halimbawa gamit ang 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

Ang base image ay maglalaman lamang ng lounge na may pool ngunit ang final image ay magkakaroon ng flamingo:

  • Gumawa ng mga variation. Ang ideya ay kunin ang umiiral na imahe at hilingin na gumawa ng mga variation. Upang gumawa ng variation, magbigay ng imahe at text prompt at code tulad nito:

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

    Tandaan, ito ay suportado lamang sa OpenAI.

Temperature

Ang temperature ay isang parameter na kumokontrol sa randomness ng output ng Generative AI model. Ang temperature ay isang halaga sa pagitan ng 0 at 1 kung saan ang 0 ay nangangahulugang deterministic ang output at ang 1 ay nangangahulugang random ang output. Ang default na halaga ay 0.7.

Tingnan natin ang isang halimbawa kung paano gumagana ang temperature, sa pamamagitan ng pagtakbo ng prompt na ito nang dalawang beses:

Prompt: "Kuneho sa kabayo, may hawak na lollipop, sa mahamog na parang kung saan tumutubo ang mga daffodil"

Kuneho sa kabayo na may hawak na lollipop, bersyon 1

Ngayon, ulitin natin ang parehong prompt upang makita na hindi natin makukuha ang parehong imahe nang dalawang beses:

Nabuo na imahe ng kuneho sa kabayo

Tulad ng nakikita mo, ang mga imahe ay magkatulad, ngunit hindi pareho. Subukan nating baguhin ang temperature value sa 0.1 at tingnan kung ano ang mangyayari:

 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
    )

Pagbabago ng temperature

Subukan nating gawing mas deterministic ang tugon. Mapapansin natin mula sa dalawang imahe na nabuo na sa unang imahe, may kuneho at sa pangalawang imahe, may kabayo, kaya't ang mga imahe ay lubos na nagkakaiba.

Kaya't baguhin natin ang ating code at itakda ang temperature sa 0, tulad nito:

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
    )

Ngayon, kapag pinatakbo mo ang code na ito, makakakuha ka ng dalawang imahe:

  • Temperature 0, v1
  • Temperature 0, v2

Dito, malinaw mong makikita kung paano mas magkatulad ang mga imahe.

Paano tukuyin ang mga hangganan para sa iyong aplikasyon gamit ang metaprompts

Sa ating demo, maaari na tayong bumuo ng mga imahe para sa ating mga kliyente. Gayunpaman, kailangan nating magtakda ng ilang hangganan para sa ating aplikasyon.

Halimbawa, ayaw nating bumuo ng mga imahe na hindi ligtas para sa trabaho, o hindi angkop para sa mga bata.

Magagawa natin ito gamit ang metaprompts. Ang metaprompts ay mga text prompt na ginagamit upang kontrolin ang output ng Generative AI model. Halimbawa, maaari nating gamitin ang metaprompts upang kontrolin ang output, at tiyakin na ang mga nabuo na imahe ay ligtas para sa trabaho, o angkop para sa mga bata.

Paano ito gumagana?

Ngayon, paano gumagana ang meta prompts?

Ang meta prompts ay mga text prompt na ginagamit upang kontrolin ang output ng Generative AI model. Ang mga ito ay inilalagay bago ang text prompt, at ginagamit upang kontrolin ang output ng modelo at naka-embed sa mga aplikasyon upang kontrolin ang output ng modelo. Pinagsasama ang input ng prompt at ang input ng meta prompt sa isang text prompt.

Isang halimbawa ng meta prompt ay ang sumusunod:

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)

Ngayon, tingnan natin kung paano natin magagamit ang meta prompts sa ating demo.

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

Mula sa prompt sa itaas, makikita mo kung paano isinasaalang-alang ng lahat ng mga imahe na nilikha ang metaprompt.

Takdang-Aralin - tulungan ang mga mag-aaral

Ipinakilala natin ang Edu4All sa simula ng araling ito. Ngayon, oras na upang tulungan ang mga mag-aaral na bumuo ng mga imahe para sa kanilang mga pagsusulit.

Ang mga mag-aaral ay gagawa ng mga imahe para sa kanilang mga pagsusulit na naglalaman ng mga monumento. Ang eksaktong mga monumento ay depende sa mga mag-aaral. Ang mga mag-aaral ay hinihikayat na gamitin ang kanilang pagkamalikhain sa gawaing ito upang ilagay ang mga monumento sa iba't ibang konteksto.

Solusyon

Narito ang isang posibleng solusyon:

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)

Magaling na Trabaho! Ipagpatuloy ang Iyong Pag-aaral

Pagkatapos tapusin ang araling ito, bisitahin ang aming Generative AI Learning collection upang patuloy na paunlarin ang iyong kaalaman sa Generative AI!

Pumunta sa Aralin 10 kung saan tatalakayin natin kung paano bumuo ng mga AI application gamit ang low-code


Paunawa:
Ang dokumentong ito ay isinalin gamit ang AI translation service na Co-op Translator. Bagama't sinisikap naming maging tumpak, mangyaring tandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang katutubong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na dulot ng paggamit ng pagsasaling ito.