Skip to content

Latest commit

 

History

History
489 lines (334 loc) · 34.8 KB

File metadata and controls

489 lines (334 loc) · 34.8 KB

इमेज जनरेशन एप्लिकेशन बनाना

इमेज जनरेशन एप्लिकेशन बनाना

LLMs केवल टेक्स्ट जनरेशन तक सीमित नहीं हैं। टेक्स्ट विवरणों से इमेज बनाना भी संभव है। इमेज को एक माध्यम के रूप में उपयोग करना कई क्षेत्रों में अत्यधिक उपयोगी हो सकता है जैसे मेडटेक, वास्तुकला, पर्यटन, गेम डेवलपमेंट और अन्य। इस अध्याय में, हम दो सबसे लोकप्रिय इमेज जनरेशन मॉडल, DALL-E और Midjourney के बारे में जानेंगे।

परिचय

इस पाठ में, हम निम्नलिखित विषयों को कवर करेंगे:

  • इमेज जनरेशन और यह क्यों उपयोगी है।
  • DALL-E और Midjourney, ये क्या हैं और कैसे काम करते हैं।
  • आप इमेज जनरेशन ऐप कैसे बना सकते हैं।

सीखने के लक्ष्य

इस पाठ को पूरा करने के बाद, आप सक्षम होंगे:

  • एक इमेज जनरेशन एप्लिकेशन बनाना।
  • अपने एप्लिकेशन के लिए मेटा प्रॉम्प्ट्स के साथ सीमाएं निर्धारित करना।
  • DALL-E और Midjourney के साथ काम करना।

इमेज जनरेशन एप्लिकेशन क्यों बनाएं?

इमेज जनरेशन एप्लिकेशन जनरेटिव एआई की क्षमताओं का पता लगाने का एक शानदार तरीका है। इन्हें निम्नलिखित उद्देश्यों के लिए उपयोग किया जा सकता है:

  • इमेज एडिटिंग और सिंथेसिस। आप विभिन्न उपयोग मामलों के लिए इमेज जनरेट कर सकते हैं, जैसे इमेज एडिटिंग और इमेज सिंथेसिस।

  • विभिन्न उद्योगों में लागू। इन्हें मेडटेक, पर्यटन, गेम डेवलपमेंट और अन्य जैसे विभिन्न उद्योगों के लिए इमेज जनरेट करने के लिए भी उपयोग किया जा सकता है।

परिदृश्य: Edu4All

इस पाठ के हिस्से के रूप में, हम अपने स्टार्टअप, Edu4All के साथ काम करना जारी रखेंगे। छात्र अपनी असाइनमेंट्स के लिए इमेज बनाएंगे, कौन सी इमेज बनानी है यह छात्रों पर निर्भर है, लेकिन वे अपनी परियों की कहानी के लिए चित्र बना सकते हैं, अपनी कहानी के लिए एक नया पात्र बना सकते हैं या अपने विचारों और अवधारणाओं को विज़ुअलाइज़ करने में मदद कर सकते हैं।

यहां Edu4All के छात्र उदाहरण के लिए क्या जनरेट कर सकते हैं यदि वे कक्षा में स्मारकों पर काम कर रहे हैं:

Edu4All स्टार्टअप, स्मारकों पर कक्षा, एफिल टॉवर

एक प्रॉम्प्ट का उपयोग करते हुए जैसे:

"सुबह की धूप में एफिल टॉवर के पास कुत्ता"

DALL-E और Midjourney क्या हैं?

DALL-E और Midjourney दो सबसे लोकप्रिय इमेज जनरेशन मॉडल हैं, जो आपको प्रॉम्प्ट्स का उपयोग करके इमेज जनरेट करने की अनुमति देते हैं।

DALL-E

चलो DALL-E से शुरू करते हैं, जो एक जनरेटिव एआई मॉडल है जो टेक्स्ट विवरणों से इमेज जनरेट करता है।

DALL-E दो मॉडलों, CLIP और diffused attention का संयोजन है

  • CLIP, एक मॉडल है जो इमेज और टेक्स्ट से एम्बेडिंग्स जनरेट करता है, जो डेटा के संख्यात्मक प्रतिनिधित्व हैं।

  • Diffused attention, एक मॉडल है जो एम्बेडिंग्स से इमेज जनरेट करता है। DALL-E को इमेज और टेक्स्ट के डेटासेट पर प्रशिक्षित किया गया है और इसे टेक्स्ट विवरणों से इमेज जनरेट करने के लिए उपयोग किया जा सकता है। उदाहरण के लिए, DALL-E का उपयोग टोपी में बिल्ली या मोहॉक वाले कुत्ते की इमेज जनरेट करने के लिए किया जा सकता है।

Midjourney

Midjourney DALL-E के समान तरीके से काम करता है, यह टेक्स्ट प्रॉम्प्ट्स से इमेज जनरेट करता है। Midjourney का उपयोग "टोपी में बिल्ली" या "मोहॉक वाले कुत्ते" जैसे प्रॉम्प्ट्स का उपयोग करके इमेज जनरेट करने के लिए भी किया जा सकता है।

Midjourney द्वारा जनरेट की गई इमेज, मैकेनिकल कबूतर इमेज क्रेडिट विकिपीडिया, Midjourney द्वारा जनरेट की गई इमेज

DALL-E और Midjourney कैसे काम करते हैं

पहले, DALL-E। DALL-E एक जनरेटिव एआई मॉडल है जो ट्रांसफॉर्मर आर्किटेक्चर पर आधारित है और इसमें ऑटोरेग्रेसिव ट्रांसफॉर्मर है।

एक ऑटोरेग्रेसिव ट्रांसफॉर्मर परिभाषित करता है कि मॉडल टेक्स्ट विवरणों से इमेज कैसे जनरेट करता है, यह एक समय में एक पिक्सेल जनरेट करता है, और फिर जनरेट किए गए पिक्सेल का उपयोग अगले पिक्सेल को जनरेट करने के लिए करता है। यह प्रक्रिया तब तक चलती है जब तक इमेज पूरी नहीं हो जाती।

इस प्रक्रिया के साथ, DALL-E इमेज में जनरेट किए गए विशेषताओं, वस्तुओं, गुणों और अन्य चीजों को नियंत्रित करता है। हालांकि, DALL-E 2 और 3 को जनरेट की गई इमेज पर अधिक नियंत्रण है।

अपना पहला इमेज जनरेशन एप्लिकेशन बनाना

तो इमेज जनरेशन एप्लिकेशन बनाने के लिए आपको क्या चाहिए? आपको निम्नलिखित लाइब्रेरीज़ की आवश्यकता होगी:

  • python-dotenv, यह लाइब्रेरी आपके सीक्रेट्स को कोड से दूर .env फाइल में रखने के लिए अत्यधिक अनुशंसित है।
  • openai, यह लाइब्रेरी OpenAI API के साथ इंटरैक्ट करने के लिए उपयोग की जाती है।
  • pillow, Python में इमेज के साथ काम करने के लिए।
  • requests, HTTP अनुरोध करने में मदद करने के लिए।

Azure OpenAI मॉडल बनाएं और डिप्लॉय करें

यदि पहले से नहीं किया गया है, तो Microsoft Learn पेज पर दिए गए निर्देशों का पालन करें Azure OpenAI संसाधन और मॉडल बनाने के लिए। मॉडल के रूप में DALL-E 3 का चयन करें।

ऐप बनाएं

  1. .env नामक फाइल बनाएं जिसमें निम्नलिखित सामग्री हो:

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

    Azure OpenAI Foundry Portal में अपने संसाधन के "Deployments" सेक्शन में इस जानकारी को ढूंढें।

  2. ऊपर दी गई लाइब्रेरीज़ को requirements.txt नामक फाइल में इस प्रकार इकट्ठा करें:

    python-dotenv
    openai
    pillow
    requests
    
  3. इसके बाद, वर्चुअल एनवायरनमेंट बनाएं और लाइब्रेरीज़ इंस्टॉल करें:

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

    Windows के लिए, वर्चुअल एनवायरनमेंट बनाने और सक्रिय करने के लिए निम्नलिखित कमांड का उपयोग करें:

    python3 -m venv venv
    venv\Scripts\activate.bat
  4. 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)

इस कोड को समझते हैं:

  • सबसे पहले, हम उन लाइब्रेरीज़ को इम्पोर्ट करते हैं जिनकी हमें आवश्यकता है, जिसमें OpenAI लाइब्रेरी, dotenv लाइब्रेरी, requests लाइब्रेरी और Pillow लाइब्रेरी शामिल हैं।

    import openai
    import os
    import requests
    from PIL import Image
    import dotenv
  • इसके बाद, हम .env फाइल से एनवायरनमेंट वेरिएबल्स लोड करते हैं।

    # import dotenv
    dotenv.load_dotenv()
  • उसके बाद, हम 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"
        )
  • फिर, हम इमेज जनरेट करते हैं:

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

    ऊपर दिया गया कोड एक JSON ऑब्जेक्ट के साथ प्रतिक्रिया करता है जिसमें जनरेट की गई इमेज का URL होता है। हम इस URL का उपयोग इमेज डाउनलोड करने और इसे फाइल में सेव करने के लिए कर सकते हैं।

  • अंत में, हम इमेज को खोलते हैं और इसे मानक इमेज व्यूअर का उपयोग करके प्रदर्शित करते हैं:

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

इमेज जनरेट करने पर अधिक विवरण

आइए उस कोड को देखें जो इमेज जनरेट करता है:

  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, वह टेक्स्ट प्रॉम्प्ट है जिसका उपयोग इमेज जनरेट करने के लिए किया जाता है। इस मामले में, हम "घोड़े पर खरगोश, लॉलीपॉप पकड़े हुए, कोहरे वाले मैदान में जहां डैफोडिल्स उगते हैं" प्रॉम्प्ट का उपयोग कर रहे हैं।
  • size, जनरेट की गई इमेज का आकार है। इस मामले में, हम 1024x1024 पिक्सल की इमेज जनरेट कर रहे हैं।
  • n, जनरेट की गई इमेज की संख्या है। इस मामले में, हम दो इमेज जनरेट कर रहे हैं।
  • temperature, एक पैरामीटर है जो जनरेटिव एआई मॉडल के आउटपुट की रैंडमनेस को नियंत्रित करता है। तापमान 0 और 1 के बीच का मान है जहां 0 का मतलब है कि आउटपुट निश्चित है और 1 का मतलब है कि आउटपुट रैंडम है। डिफ़ॉल्ट मान 0.7 है।

इमेज के साथ और भी चीजें की जा सकती हैं जिन्हें हम अगले सेक्शन में कवर करेंगे।

इमेज जनरेशन की अतिरिक्त क्षमताएं

अब तक आपने देखा कि हम कुछ लाइनों के कोड का उपयोग करके इमेज जनरेट करने में सक्षम थे। हालांकि, इमेज के साथ और भी चीजें की जा सकती हैं।

आप निम्नलिखित भी कर सकते हैं:

  • एडिट्स करें। एक मौजूदा इमेज, मास्क और प्रॉम्प्ट प्रदान करके, आप इमेज को बदल सकते हैं। उदाहरण के लिए, आप इमेज के एक हिस्से में कुछ जोड़ सकते हैं। कल्पना करें कि हमारे खरगोश की इमेज है, आप खरगोश को टोपी जोड़ सकते हैं। ऐसा करने के लिए, आपको इमेज, मास्क (परिवर्तन के लिए क्षेत्र की पहचान करना) और टेक्स्ट प्रॉम्प्ट प्रदान करना होगा।

नोट: यह DALL-E 3 में समर्थित नहीं है।

यहां GPT इमेज का उपयोग करने का एक उदाहरण है:

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

बेस इमेज में केवल पूल के साथ लाउंज होगा लेकिन अंतिम इमेज में एक फ्लेमिंगो होगा:

  • वेरिएशन बनाएं। विचार यह है कि आप एक मौजूदा इमेज लें और पूछें कि वेरिएशन बनाए जाएं। वेरिएशन बनाने के लिए, आप एक इमेज और टेक्स्ट प्रॉम्प्ट प्रदान करते हैं और इस प्रकार कोड लिखते हैं:

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

    नोट, यह केवल OpenAI पर समर्थित है।

तापमान

तापमान एक पैरामीटर है जो जनरेटिव एआई मॉडल के आउटपुट की रैंडमनेस को नियंत्रित करता है। तापमान 0 और 1 के बीच का मान है जहां 0 का मतलब है कि आउटपुट निश्चित है और 1 का मतलब है कि आउटपुट रैंडम है। डिफ़ॉल्ट मान 0.7 है।

आइए देखें कि तापमान कैसे काम करता है, इस प्रॉम्प्ट को दो बार चलाकर:

प्रॉम्प्ट : "घोड़े पर खरगोश, लॉलीपॉप पकड़े हुए, कोहरे वाले मैदान में जहां डैफोडिल्स उगते हैं"

घोड़े पर खरगोश लॉलीपॉप पकड़े हुए, संस्करण 1

अब उसी प्रॉम्प्ट को फिर से चलाते हैं ताकि देखें कि हमें एक ही इमेज दो बार नहीं मिलती:

घोड़े पर खरगोश की जनरेट की गई इमेज

जैसा कि आप देख सकते हैं, इमेज समान हैं, लेकिन बिल्कुल एक जैसी नहीं। अब तापमान मान को 0.1 पर बदलने की कोशिश करते हैं और देखते हैं कि क्या होता है:

 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
    )

तापमान बदलना

तो चलिए प्रतिक्रिया को अधिक निश्चित बनाने की कोशिश करते हैं। हम जनरेट की गई दो इमेज से देख सकते हैं कि पहली इमेज में एक खरगोश है और दूसरी इमेज में एक घोड़ा है, इसलिए इमेज काफी भिन्न हैं।

इसलिए, चलिए अपना कोड बदलते हैं और तापमान को 0 पर सेट करते हैं, इस प्रकार:

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
    )

अब जब आप इस कोड को चलाते हैं, तो आपको ये दो इमेज मिलती हैं:

  • तापमान 0, v1
  • तापमान 0, v2

यहां आप स्पष्ट रूप से देख सकते हैं कि इमेज एक-दूसरे से अधिक मिलती-जुलती हैं।

मेटाप्रॉम्प्ट्स के साथ अपने एप्लिकेशन के लिए सीमाएं कैसे निर्धारित करें

हमारे डेमो के साथ, हम पहले ही अपने क्लाइंट्स के लिए इमेज जनरेट कर सकते हैं। हालांकि, हमें अपने एप्लिकेशन के लिए कुछ सीमाएं बनानी होंगी।

उदाहरण के लिए, हम ऐसी इमेज जनरेट नहीं करना चाहते जो कार्यस्थल के लिए सुरक्षित न हों, या जो बच्चों के लिए उपयुक्त न हों।

हम इसे मेटाप्रॉम्प्ट्स के साथ कर सकते हैं। मेटाप्रॉम्प्ट्स टेक्स्ट प्रॉम्प्ट्स होते हैं जो जनरेटिव एआई मॉडल के आउटपुट को नियंत्रित करने के लिए उपयोग किए जाते हैं। उदाहरण के लिए, हम मेटाप्रॉम्प्ट्स का उपयोग आउटपुट को नियंत्रित करने और सुनिश्चित करने के लिए कर सकते हैं कि जनरेट की गई इमेज कार्यस्थल के लिए सुरक्षित हों, या बच्चों के लिए उपयुक्त हों।

यह कैसे काम करता है?

अब, मेटाप्रॉम्प्ट्स कैसे काम करते हैं?

मेटाप्रॉम्प्ट्स टेक्स्ट प्रॉम्प्ट्स होते हैं जो जनरेटिव एआई मॉडल के आउटपुट को नियंत्रित करने के लिए उपयोग किए जाते हैं, वे टेक्स्ट प्रॉम्प्ट से पहले स्थित होते हैं, और मॉडल के आउटपुट को नियंत्रित करने के लिए उपयोग किए जाते हैं और एप्लिकेशन में एम्बेड किए जाते हैं ताकि मॉडल के आउटपुट को नियंत्रित किया जा सके। प्रॉम्प्ट इनपुट और मेटाप्रॉम्प्ट इनपुट को एक ही टेक्स्ट प्रॉम्प्ट में समाहित करना।

मेटाप्रॉम्प्ट का एक उदाहरण निम्नलिखित होगा:

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)

अब, देखते हैं कि हम अपने डेमो में मेटाप्रॉम्प्ट्स का उपयोग कैसे कर सकते हैं।

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

ऊपर दिए गए प्रॉम्प्ट से, आप देख सकते हैं कि सभी जनरेट की गई इमेज मेटाप्रॉम्प्ट को ध्यान में रखती हैं।

असाइनमेंट - चलिए छात्रों को सक्षम बनाते हैं

हमने इस पाठ की शुरुआत में Edu4All का परिचय दिया। अब समय है कि छात्रों को उनकी असाइनमेंट्स के लिए इमेज जनरेट करने में सक्षम बनाएं।

छात्र अपनी असाइनमेंट्स के लिए स्मारकों वाली इमेज बनाएंगे, कौन से स्मारक होंगे यह छात्रों पर निर्भर है। छात्रों से इस कार्य में अपनी रचनात्मकता का उपयोग करने के लिए कहा गया है ताकि वे इन स्मारकों को विभिन्न संदर्भों में रख सकें।

समाधान

यहां एक संभावित समाधान है:

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)

शानदार काम! अपनी सीख जारी रखें

इस पाठ को पूरा करने के बाद, हमारे Generative AI Learning संग्रह को देखें ताकि आप अपनी Generative AI की जानकारी को और बढ़ा सकें!

पाठ 10 पर जाएं, जहां हम देखेंगे कि कम-कोड के साथ AI एप्लिकेशन कैसे बनाएं


अस्वीकरण:
यह दस्तावेज़ AI अनुवाद सेवा Co-op Translator का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं।