Skip to content

Latest commit

 

History

History
480 lines (325 loc) · 19.7 KB

File metadata and controls

480 lines (325 loc) · 19.7 KB

Kujenga Programu za Kutengeneza Picha

Kujenga Programu za Kutengeneza Picha

Kuna zaidi ya LLMs kuliko kutengeneza maandishi tu. Inawezekana pia kutengeneza picha kutoka kwa maelezo ya maandishi. Kuwa na picha kama njia ya mawasiliano kunaweza kuwa na manufaa makubwa katika maeneo mbalimbali kama MedTech, usanifu, utalii, ukuzaji wa michezo na zaidi. Katika sura hii, tutachunguza mifano miwili maarufu ya kutengeneza picha, DALL-E na Midjourney.

Utangulizi

Katika somo hili, tutajadili:

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

Malengo ya Kujifunza

Baada ya kukamilisha somo hili, utaweza:

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

Kwa nini kujenga programu ya kutengeneza picha?

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

  • Uhariri na muundo wa picha. Unaweza kutengeneza picha kwa matumizi mbalimbali, kama vile uhariri wa picha na muundo wa picha.

  • Kutumika katika sekta mbalimbali. Pia zinaweza kutumika kutengeneza 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, katika somo hili. Wanafunzi wataunda picha kwa ajili ya tathmini zao, ni picha gani hasa ni juu yao, lakini wanaweza kuwa ni michoro ya hadithi yao ya kufikirika au kuunda tabia mpya kwa hadithi yao au kuwasaidia kuona mawazo na dhana zao.

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

Kampuni ya Edu4All, darasa kuhusu makaburi, Mnara wa Eiffel

wakitumia prompt kama

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

DALL-E na Midjourney ni nini?

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

DALL-E

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

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

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

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

Midjourney

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

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

Jinsi DALL-E na Midjourney Zinavyofanya Kazi

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

Autoregressive transformer hufafanua jinsi mfano unavyotengeneza picha kutoka kwa maelezo ya maandishi, inatengeneza pixel moja kwa wakati, na kisha hutumia pixel zilizotengenezwa kutengeneza pixel inayofuata. Kupitia tabaka nyingi katika mtandao wa neva, hadi picha ikamilike.

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

Kujenga programu yako ya kwanza ya kutengeneza picha

Kwa hivyo inachukua nini kujenga programu ya kutengeneza 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 kuingiliana 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)

Hebu 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, tunatengeneza 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 iliyotengenezwa. 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 kutengeneza picha

Hebu tuangalie msimbo unaotengeneza 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 kutengeneza picha. Katika kesi hii, tunatumia prompt "Sungura juu ya farasi, ameshikilia lollipop, kwenye uwanja wa ukungu ambapo maua ya daffodils yanamea".
  • size, ni ukubwa wa picha inayotengenezwa. Katika kesi hii, tunatengeneza picha yenye ukubwa wa 1024x1024 pixels.
  • n, ni idadi ya picha zinazotengenezwa. Katika kesi hii, tunatengeneza picha mbili.
  • temperature, ni kipengele kinachodhibiti nasibu ya matokeo ya mfano wa AI ya Kizazi. Temperature ni thamani kati ya 0 na 1 ambapo 0 inamaanisha kuwa matokeo ni ya uhakika na 1 inamaanisha kuwa matokeo ni ya nasibu. Thamani ya kawaida ni 0.7.

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

Uwezo wa ziada wa kutengeneza picha

Umeona hadi sasa jinsi tulivyoweza kutengeneza 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 (inayotambua sehemu ya eneo la mabadiliko) na prompt ya maandishi kusema nini kinapaswa kufanyika.

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 chumba cha kupumzika na bwawa tu lakini picha ya mwisho ingekuwa na flamingo:

  • Unda tofauti. Wazo ni kwamba unachukua picha iliyopo na kuomba kwamba tofauti zitengezwe. 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 kipengele kinachodhibiti nasibu ya matokeo ya mfano wa AI ya Kizazi. Temperature ni thamani kati ya 0 na 1 ambapo 0 inamaanisha kuwa matokeo ni ya uhakika na 1 inamaanisha kuwa matokeo ni ya nasibu. Thamani ya kawaida ni 0.7.

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

Prompt : "Sungura juu ya farasi, ameshikilia lollipop, kwenye uwanja wa ukungu ambapo maua ya daffodils yanamea"

Sungura juu ya farasi ameshikilia lollipop, toleo la 1

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

Picha iliyotengenezwa ya sungura juu ya farasi

Kama unavyoona, picha zinafanana, lakini si sawa. Hebu jaribu kubadilisha thamani ya temperature kuwa 0.1 na tuone 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 tulizotengeneza kwamba katika picha ya kwanza, kuna sungura na katika picha ya pili, kuna farasi, kwa hivyo picha zinatofautiana sana.

Kwa hivyo hebu tubadilishe msimbo wetu na kuweka temperature kuwa 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 unapokimbia 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 kutengeneza picha kwa wateja wetu. Hata hivyo, tunahitaji kuunda mipaka kwa programu yetu.

Kwa mfano, hatutaki kutengeneza 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 AI ya Kizazi. Kwa mfano, tunaweza kutumia metaprompts kudhibiti matokeo, na kuhakikisha kwamba picha zinazotengenezwa 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 AI ya Kizazi, 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 zinazotengenezwa zinazingatia metaprompt.

Kazi - hebu tuwawezeshe wanafunzi

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

Wanafunzi wataunda picha kwa tathmini zao zinazohusiana na makaburi, ni makaburi gani hasa 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 kwa usahihi, tafadhali fahamu kuwa tafsiri za kiotomatiki zinaweza kuwa na makosa au kutokuwa sahihi. Hati ya asili katika lugha yake ya kiasili inapaswa kuzingatiwa 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.