Skip to content

Latest commit

 

History

History
489 lines (334 loc) · 20.2 KB

File metadata and controls

489 lines (334 loc) · 20.2 KB

Kujenga Programu za Kuzalisha Picha

Kujenga Programu za Kuzalisha Picha

LLMs zina uwezo zaidi ya kuzalisha maandishi pekee. Inawezekana pia kuzalisha picha kutoka kwa maelezo ya maandishi. Kuwa na picha kama njia ya mawasiliano kunaweza kuwa muhimu sana katika maeneo mbalimbali kama MedTech, usanifu majengo, utalii, ukuzaji wa michezo, na zaidi. Katika sura hii, tutachunguza mifano miwili maarufu ya kuzalisha picha, DALL-E na Midjourney.

Utangulizi

Katika somo hili, tutajadili:

  • Kuzalisha picha na umuhimu wake.
  • DALL-E na Midjourney, ni nini na jinsi zinavyofanya kazi.
  • Jinsi ya kujenga programu ya kuzalisha picha.

Malengo ya Kujifunza

Baada ya kukamilisha somo hili, utaweza:

  • Kujenga programu ya kuzalisha picha.
  • Kufafanua mipaka ya programu yako kwa kutumia meta prompts.
  • Kufanya kazi na DALL-E na Midjourney.

Kwa nini kujenga programu ya kuzalisha picha?

Programu za kuzalisha picha ni njia nzuri ya kuchunguza uwezo wa Generative AI. Zinatumika kwa mfano:

  • Uhariri na muunganiko wa picha. Unaweza kuzalisha picha kwa matumizi mbalimbali, kama vile uhariri wa picha na muunganiko wa picha.

  • Kutumika katika sekta mbalimbali. Zinatumika pia kuzalisha picha kwa sekta mbalimbali kama MedTech, Utalii, ukuzaji wa michezo, na zaidi.

Hali: Edu4All

Kama sehemu ya somo hili, tutaendelea kufanya kazi na kampuni yetu ya kuanzisha, Edu4All. Wanafunzi wataunda picha kwa ajili ya tathmini zao, aina ya picha ni juu yao, lakini zinaweza kuwa michoro ya hadithi yao ya kufikirika, kuunda mhusika mpya kwa hadithi yao, au kuwasaidia kuona mawazo na dhana zao.

Hapa kuna mfano wa kile wanafunzi wa Edu4All wanaweza kuzalisha ikiwa wanajifunza darasani kuhusu makaburi:

Kampuni ya Edu4All, darasa kuhusu makaburi, Mnara wa Eiffel

kwa kutumia prompt kama

"Mbwa karibu na Mnara wa Eiffel katika mwanga wa jua wa asubuhi mapema"

DALL-E na Midjourney ni nini?

DALL-E na Midjourney ni mifano miwili maarufu ya kuzalisha picha, zinakuruhusu kutumia prompts kuzalisha picha.

DALL-E

Tuanzie na DALL-E, ambayo ni mfano wa Generative AI unaozalisha picha kutoka kwa maelezo ya maandishi.

DALL-E ni mchanganyiko wa mifano miwili, CLIP na diffused attention.

  • CLIP, ni mfano unaozalisha embeddings, ambazo ni uwakilishi wa namba wa data, kutoka kwa picha na maandishi.

  • Diffused attention, ni mfano unaozalisha picha kutoka kwa embeddings. DALL-E imefundishwa kwa seti ya data ya picha na maandishi na inaweza kutumika kuzalisha picha kutoka kwa maelezo ya maandishi. Kwa mfano, DALL-E inaweza kutumika kuzalisha picha ya paka aliyevaa kofia, au mbwa mwenye mohawk.

Midjourney

Midjourney inafanya kazi kwa njia sawa na DALL-E, inazalisha picha kutoka kwa prompts za maandishi. Midjourney, inaweza pia kutumika kuzalisha picha kwa kutumia prompts kama "paka aliyevaa kofia", au "mbwa mwenye mohawk".

Picha iliyozalishwa na Midjourney, njiwa wa mitambo Picha kwa hisani ya Wikipedia, picha iliyozalishwa na Midjourney

Jinsi DALL-E na Midjourney Zinavyofanya Kazi

Kwanza, DALL-E. DALL-E ni mfano wa Generative AI unaotegemea usanifu wa transformer na autoregressive transformer.

Autoregressive transformer hufafanua jinsi mfano unavyotoa picha kutoka kwa maelezo ya maandishi, inazalisha pikseli moja kwa wakati, na kisha kutumia pikseli zilizozalishwa kuzalisha pikseli inayofuata. Inapitia tabaka nyingi katika mtandao wa neva, hadi picha ikamilike.

Kwa mchakato huu, DALL-E, inadhibiti sifa, vitu, tabia, na zaidi katika picha inayozalishwa. Hata hivyo, DALL-E 2 na 3 zina udhibiti zaidi juu ya picha inayozalishwa.

Kujenga programu yako ya kwanza ya kuzalisha picha

Kwa hivyo, inachukua nini kujenga programu ya kuzalisha picha? Unahitaji maktaba zifuatazo:

  • python-dotenv, inashauriwa sana kutumia maktaba hii kuweka siri zako katika faili ya .env mbali na msimbo.
  • openai, maktaba hii ndiyo utatumia kuwasiliana na API ya OpenAI.
  • pillow, kufanya kazi na picha katika Python.
  • requests, kusaidia kufanya maombi ya HTTP.

Unda na peleka mfano wa Azure OpenAI

Ikiwa bado hujafanya, fuata maelekezo kwenye ukurasa wa Microsoft Learn kuunda rasilimali ya Azure OpenAI na mfano. Chagua DALL-E 3 kama mfano.

Unda programu

  1. Unda faili .env yenye maudhui yafuatayo:

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

    Tafuta taarifa hii katika Azure OpenAI Foundry Portal kwa rasilimali yako katika sehemu ya "Deployments".

  2. Kusanya maktaba zilizo hapo juu katika faili inayoitwa requirements.txt kama ifuatavyo:

    python-dotenv
    openai
    pillow
    requests
    
  3. Kisha, unda mazingira ya kawaida na usakinishe maktaba:

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

    Kwa Windows, tumia amri zifuatazo kuunda na kuamsha mazingira yako ya kawaida:

    python3 -m venv venv
    venv\Scripts\activate.bat
  4. Ongeza msimbo ufuatao katika faili inayoitwa 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)

Tueleze msimbo huu:

  • Kwanza, tunaleta maktaba tunazohitaji, ikiwa ni pamoja na maktaba ya OpenAI, maktaba ya dotenv, maktaba ya requests, na maktaba ya Pillow.

    import openai
    import os
    import requests
    from PIL import Image
    import dotenv
  • Kisha, tunapakia vigezo vya mazingira kutoka kwa faili ya .env.

    # import dotenv
    dotenv.load_dotenv()
  • Baada ya hapo, tunasanidi mteja wa huduma ya 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"
        )
  • Kisha, tunazalisha picha:

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

    Msimbo hapo juu unajibu na kitu cha JSON kinachojumuisha URL ya picha iliyozalishwa. Tunaweza kutumia URL kupakua picha na kuihifadhi kwenye faili.

  • Mwisho, tunafungua picha na kutumia kionyeshi cha picha cha kawaida kuionyesha:

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

Maelezo zaidi kuhusu kuzalisha picha

Hebu tuangalie msimbo unaozalisha picha kwa undani zaidi:

  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, ni prompt ya maandishi inayotumika kuzalisha picha. Katika kesi hii, tunatumia prompt "Sungura juu ya farasi, akiwa na lollipop, kwenye uwanda wenye ukungu ambapo maua ya daffodils yanamea".
  • size, ni ukubwa wa picha inayozalishwa. Katika kesi hii, tunazalisha picha yenye ukubwa wa pikseli 1024x1024.
  • n, ni idadi ya picha zinazozalishwa. Katika kesi hii, tunazalisha picha mbili.
  • temperature, ni parameter inayodhibiti nasibu ya matokeo ya mfano wa Generative AI. Temperature ni thamani kati ya 0 na 1 ambapo 0 inamaanisha matokeo ni ya uhakika na 1 inamaanisha matokeo ni ya nasibu. Thamani ya default ni 0.7.

Kuna mambo zaidi unayoweza kufanya na picha ambayo tutajadili katika sehemu inayofuata.

Uwezo wa ziada wa kuzalisha picha

Umeona hadi sasa jinsi tulivyoweza kuzalisha picha kwa mistari michache katika Python. Hata hivyo, kuna mambo zaidi unayoweza kufanya na picha.

Unaweza pia kufanya yafuatayo:

  • Kufanya uhariri. Kwa kutoa picha iliyopo, mask, na prompt, unaweza kubadilisha picha. Kwa mfano, unaweza kuongeza kitu kwenye sehemu ya picha. Fikiria picha yetu ya sungura, unaweza kuongeza kofia kwa sungura. Jinsi unavyoweza kufanya hivyo ni kwa kutoa picha, mask (kutambua sehemu ya eneo la mabadiliko) na prompt ya maandishi kusema nini kifanyike.

Kumbuka: hii haijaungwa mkono katika DALL-E 3.

Hapa kuna mfano wa kutumia 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

Picha ya msingi ingekuwa na lounge tu na bwawa lakini picha ya mwisho ingekuwa na flamingo:

  • Kuunda tofauti. Wazo ni kwamba unachukua picha iliyopo na kuomba kwamba tofauti zifanywe. Ili kuunda tofauti, unatoa picha na prompt ya maandishi na msimbo kama ifuatavyo:

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

    Kumbuka, hii inaungwa mkono tu kwenye OpenAI

Temperature

Temperature ni parameter inayodhibiti nasibu ya matokeo ya mfano wa Generative AI. Temperature ni thamani kati ya 0 na 1 ambapo 0 inamaanisha matokeo ni ya uhakika na 1 inamaanisha matokeo ni ya nasibu. Thamani ya default ni 0.7.

Hebu tuangalie mfano wa jinsi temperature inavyofanya kazi, kwa kuendesha prompt hii mara mbili:

Prompt : "Sungura juu ya farasi, akiwa na lollipop, kwenye uwanda wenye ukungu ambapo maua ya daffodils yanamea"

Sungura juu ya farasi akiwa na lollipop, toleo la 1

Sasa hebu tuendeshe prompt hiyo hiyo ili kuona kwamba hatutapata picha sawa mara mbili:

Picha iliyozalishwa ya sungura juu ya farasi

Kama unavyoona, picha zinafanana, lakini si sawa. Hebu jaribu kubadilisha thamani ya temperature hadi 0.1 na kuona kinachotokea:

 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
    )

Kubadilisha temperature

Kwa hivyo hebu jaribu kufanya majibu yawe ya uhakika zaidi. Tunaweza kuona kutoka kwa picha mbili tulizozalisha kwamba katika picha ya kwanza, kuna sungura na katika picha ya pili, kuna farasi, kwa hivyo picha zinatofautiana sana.

Hebu basi tubadilishe msimbo wetu na kuweka temperature hadi 0, kama ifuatavyo:

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
    )

Sasa unapoendesha msimbo huu, unapata picha hizi mbili:

  • Temperature 0, v1
  • Temperature 0 , v2

Hapa unaweza kuona wazi jinsi picha zinavyofanana zaidi.

Jinsi ya kufafanua mipaka ya programu yako kwa metaprompts

Kwa demo yetu, tunaweza tayari kuzalisha picha kwa wateja wetu. Hata hivyo, tunahitaji kuunda mipaka kwa programu yetu.

Kwa mfano, hatutaki kuzalisha picha ambazo si salama kwa kazi, au ambazo si sahihi kwa watoto.

Tunaweza kufanya hivi kwa metaprompts. Metaprompts ni prompts za maandishi zinazotumika kudhibiti matokeo ya mfano wa Generative AI. Kwa mfano, tunaweza kutumia metaprompts kudhibiti matokeo, na kuhakikisha kwamba picha zinazozalishwa ni salama kwa kazi, au sahihi kwa watoto.

Inafanyaje kazi?

Sasa, metaprompts zinafanyaje kazi?

Metaprompts ni prompts za maandishi zinazotumika kudhibiti matokeo ya mfano wa Generative AI, zinapangwa kabla ya prompt ya maandishi, na zinatumika kudhibiti matokeo ya mfano na kuingizwa katika programu kudhibiti matokeo ya mfano. Kuunganisha prompt ya pembejeo na prompt ya meta katika prompt moja ya maandishi.

Mfano mmoja wa metaprompt ungekuwa kama ifuatavyo:

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)

Sasa, hebu tuone jinsi tunavyoweza kutumia metaprompts katika demo yetu.

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

Kutoka kwa prompt hapo juu, unaweza kuona jinsi picha zote zinazozalishwa zinazingatia metaprompt.

Kazi - hebu tuwasaidie wanafunzi

Tulianzisha Edu4All mwanzoni mwa somo hili. Sasa ni wakati wa kuwawezesha wanafunzi kuzalisha picha kwa tathmini zao.

Wanafunzi wataunda picha kwa tathmini zao zinazohusiana na makaburi, ni makaburi gani ni juu yao. Wanafunzi wanahimizwa kutumia ubunifu wao katika kazi hii kuweka makaburi haya katika muktadha tofauti.

Suluhisho

Hapa kuna suluhisho moja linalowezekana:

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)

Kazi Nzuri! Endelea Kujifunza

Baada ya kumaliza somo hili, angalia Mkusanyiko wa Kujifunza kuhusu AI ya Kizazi ili kuendelea kukuza maarifa yako kuhusu AI ya Kizazi!

Nenda kwenye Somo la 10 ambapo tutachunguza jinsi ya kuunda programu za AI kwa kutumia low-code


Kanusho:
Hati hii imetafsiriwa kwa kutumia huduma ya tafsiri ya AI Co-op Translator. Ingawa tunajitahidi kuhakikisha usahihi, tafsiri za kiotomatiki zinaweza kuwa na makosa au kutokuwa sahihi. Hati ya asili katika lugha yake ya awali inapaswa kuchukuliwa kama chanzo cha mamlaka. Kwa taarifa muhimu, tafsiri ya kitaalamu ya binadamu inapendekezwa. Hatutawajibika kwa kutoelewana au tafsiri zisizo sahihi zinazotokana na matumizi ya tafsiri hii.