जेन एआई - कीवर्ड से इमेज जनरेट करना

1. परिचय

पिछली बार अपडेट किए जाने की तारीख: 12-10-2023

इमेज जनरेट करने वाली इमेज जनरेट करना

Google Imagen, Google का एक बड़ा भाषा मॉडल है. यह टेक्स्ट में दी गई जानकारी से, असली और क्रिएटिव इमेज जनरेट कर सकता है. Vertex AI में मौजूद इमेज की मदद से, लोग अगली-पीढ़ी की टेक्नोलॉजी वाले एआई प्रॉडक्ट बना सकते हैं. ये प्रॉडक्ट, उनकी कल्पना को कुछ ही सेकंड में अच्छी क्वालिटी की विज़ुअल ऐसेट में बदल देते हैं. यह टेक्स्ट से इमेज जनरेट करने की सुविधा के अलावा, टेक्स्ट प्रॉम्प्ट, इमेज कैप्शन, विज़ुअल सवाल-जवाब, विषय और स्टाइल आधारित इमेज मॉडल ट्यूनिंग.

प्रॉम्प्ट जनरेट करना

Imagen का इस्तेमाल करके एक इमेज बनाने के लिए, आपको इमेज के बारे में टेक्स्ट में जानकारी देनी होगी. इस प्रॉम्प्ट को प्रॉम्प्ट कहते हैं, ताकि इमेज जनरेट की जा सके. हालांकि, अच्छी क्वालिटी की फ़ोटो-रीयल टाइम इमेज जनरेट करने के लिए, इस बारे में विशेषज्ञता ज़रूरी है. अगर आपको खुदरा, मैन्युफ़ैक्चरिंग वगैरह जैसे खास बिज़नेस डोमेन से जुड़ी इमेज जनरेट करनी है, तो यह डोमेन पर भी निर्भर हो सकता है. टेक्स्ट बाइसन मॉडल को कीवर्ड का एक सेट देना प्रॉम्प्ट को डिज़ाइन करने का आसान तरीका है.

कुल मिलाकर, यह तरीका अपनाया जाता है -

fbb3826592b2816d.png

ग्रेडियो यूआई

Gradio, एक ओपन सोर्स Python लाइब्रेरी है. इसकी मदद से अपने मशीन लर्निंग मॉडल, किसी भी एपीआई या यहां तक कि कुछ लाइनों का इस्तेमाल करके आर्बिट्रेरी Python फ़ंक्शन के लिए, आसानी से इस्तेमाल किए जा सकने वाले और पसंद के मुताबिक बनाए जा सकने वाले यूज़र इंटरफ़ेस (यूआई) कॉम्पोनेंट तुरंत बनाए जा सकते हैं. Gradio GUI को सीधे अपनी Jupyter notebook के साथ जोड़ा जा सकता है या इसे किसी के साथ भी लिंक के तौर पर शेयर किया जा सकता है. Gradio, टेक्स्ट, इमेज, वीडियो, और ऑडियो जैसे कई तरह के मीडिया के साथ काम करता है. यह पहले से बने कई यूज़र इंटरफ़ेस (यूआई) कॉम्पोनेंट भी उपलब्ध कराता है. जैसे, इनपुट फ़ील्ड, बटन, स्लाइडर, और ड्रॉप-डाउन मेन्यू.

आपको क्या बनाना होगा

इस कोडलैब में, Gradio ऐप्लिकेशन डिप्लॉय किया जा रहा है, जो:

  • कीवर्ड या वाक्यांशों का इस्तेमाल करके टेक्स्ट प्रॉम्प्ट जनरेट करें. जनरेट किए गए प्रॉम्प्ट में मैन्युअल तरीके से भी बदलाव किया जा सकता है.
  • यूज़र इंटरफ़ेस (यूआई) पर जनरेट किए गए प्रॉम्प्ट से इमेज जनरेट करें.

आपको इनके बारे में जानकारी मिलेगी

  • इमेज जनरेट करने के लिए, इमेजिंग से जुड़े खास प्रॉम्प्ट जनरेट करने के लिए, टेक्स्ट-बायसन मॉडल की मदद से, ज़ीरो-शॉट और कम-शॉट लर्निंग को प्रोग्राम की मदद से कैसे इस्तेमाल करें.
  • एपीआई और प्रॉम्प्ट की मदद से Imagen मॉडल का इस्तेमाल करके इमेज कैसे जनरेट करें.
  • Vertex AI वर्कबेंच नोटबुक की मदद से, Gradio ऐप्लिकेशन बनाने, उसे डिप्लॉय करने, और टेस्ट करने का तरीका.

आपको इन चीज़ों की ज़रूरत होगी

  • GCP प्रोजेक्ट का ऐक्सेस. उदाहरण के लिए - ‘Cloud-llm-preview4'
  • Vertex AI Workbench बनाने का ऐक्सेस
  • Vertex AI API चालू किया गया.
  • ग्रेडियो के लिए नेटवर्किंग से जुड़ी ज़रूरतें: नोटबुक इंस्टेंस ऐक्सेस सार्वजनिक यूआरएल

2. सेट अप किया जा रहा है

नोटबुक बनाएं

  • प्रोजेक्ट में लॉग इन करें
  • बाईं ओर मौजूद नेविगेशन मेन्यू में, वर्कबेंच पर जाएं
  • "उपयोगकर्ता की ओर से मैनेज की गई नोटबुक" में जाकर, डिफ़ॉल्ट विकल्पों के साथ एक नई नोटबुक बनाएं.
  • "JUPYTERLAB खोलें" पर क्लिक करें इंस्टेंस का प्रावधान हो जाने के बाद.

ध्यान दें: अगर नोटबुक रुकी हुई है, तो नोटबुक को चालू होने में कुछ मिनट लग सकते हैं.

कोड पाएं

हमने कोड फ़ाइल यहां रखी है. इस notebook को आपके एनवायरमेंट में इंपोर्ट किया जा सकता है और ऐसे ही चलाया जा सकता है. हालांकि, प्रोजेक्ट की जानकारी में बदलाव नहीं किया जा सकता.

3. कोड लागू करें

ज़रूरी डिपेंडेंसी और लाइब्रेरी इंस्टॉल/इंपोर्ट करना

  • Gradio ऐप्लिकेशन इंस्टॉल करें
  • टेक्स्ट-बाइसन और इमेज जनरेशन के लिए, Vertex AI API इंपोर्ट करें.
  • अन्य सभी ज़रूरी लाइब्रेरी इंपोर्ट करें.

टेक्स्ट-बायसन का इस्तेमाल करके प्रॉम्प्ट जनरेट करना

कीवर्ड और/या वाक्यांश, जैसे कि कीवर्ड या वाक्यांशों की कॉमा-सेपरेटेड लिस्ट शामिल करके, उपयोगकर्ता के इनपुट का इस्तेमाल किया जाता है. इस सूची का इस्तेमाल, जनरेट की जाने वाली ज़रूरी इमेज के बारे में बताने वाला वाक्य बनाने के लिए किया जा सकता है.

उदाहरण के लिए - पर्सोना, विषय, बैकग्राउंड, रोशनी, और अन्य ब्यौरे.

प्रॉम्प्ट जनरेट करने वाले फ़ंक्शन की जानकारी यहां दी गई है:

🰃defPrompt_generate(पर्सोना,सिग्नल,थीम, लाइटिंग, क्वालिटी, extra_desc):

model = TextGenerationModel.from_pretrained("text-bison")

Response_few_shot = Model.predict(

    few_shot_prompt,

    **parameters

)

response_single_shot = model.predict(

    prompt,

    **parameters

)

फ़्यू-शॉट और ज़ीरो-शॉट प्रॉम्प्ट

ज़ीरो-शॉट प्रॉम्प्ट, टेक्स्ट जनरेट करने की ऐसी तकनीक है जिसमें टेक्स्ट जनरेट करने के लिए मॉडल को कोई कॉन्टेक्स्ट या उदाहरण नहीं दिया जाता है. यह चुनौती भरा हो सकता है, क्योंकि मॉडल को सटीक और जानकारी देने वाला टेक्स्ट जनरेट करने के लिए, अपनी जानकारी पर भरोसा करना पड़ता है.

हालांकि, ज़ीरो-शॉट प्रॉम्प्ट बहुत क्रिएटिव भी हो सकता है, क्योंकि मॉडल पहले से मौजूद किसी उदाहरण से सीमित नहीं है.

कुछ शॉट प्रॉम्प्ट, टेक्स्ट जनरेट करने की तकनीक है. इसमें मॉडल को टेक्स्ट जनरेट करने के लिए कुछ उदाहरण दिए जाते हैं. ऐसा करना, ज़ीरो-शॉट प्रॉम्प्ट से ज़्यादा आसान हो सकता है, क्योंकि मॉडल के पास इसके बारे में कुछ जानकारी होती है. हालांकि, कुछ शॉट के लिए प्रॉम्प्ट दिखाने की प्रोसेस सीमित हो सकती है, क्योंकि इससे मॉडल सिर्फ़ ऐसा टेक्स्ट जनरेट कर सकता है जो दिए गए उदाहरणों से मिलता-जुलता हो.

कुछ शॉट और ज़ीरो-शॉट प्रॉम्प्ट के लिए सैंपल कोड यहां दिया गया है.

Ⰳ**# कोड में कुछ शॉट प्रॉम्प्ट इस्तेमाल किए गए**

कुछ_shot_prompt = f"""आपको इमेज जनरेट करने वाले मॉडल के लिए प्रॉम्प्ट लिखने में महारत हासिल है. दिए गए वाक्यांशों और कीवर्ड का इस्तेमाल करके, उन्हें एक सूची में जोड़ें. इसके बाद, सटीक और काम का प्रॉम्प्ट जनरेट करने के लिए, असल जानकारी जोड़ें. इस प्रॉम्प्ट का इस्तेमाल इमेज जनरेट करने के लिए किया जा सकता है.

input: people, gardening, house garden, colorful plants, Real, HD image, Photo.

output: A Photo of people gardening in a house garden landscape with few coloured flowering plants. Realistic FULL HD Images, Elegant and natural facial and eye features taken by professional photographer

input: plumber, faucet, kitchen, high quality, natural lighting, Photo

output: A Photo of a plumber fixing a faucet in the kitchen. High quality image with natural indoor lighting.

input: house and garden, halloween, warm lighting, high quality image, Sketch

output: A Sketch of Beautiful House and Garden with Halloween Decorations. Warm lighting, High Quality, 4K photograph taken by professional photographer from front.

input: nice living room, warm lighting,Professional Photographer from far, Photo

output: A photo of a Well designed Living Room. Warm lighting, High Quality, 4K photograph taken by Professional Photographer from far

input: {params_list_str}

output:

"""

# कोड में ज़ीरो शॉट प्रॉम्प्ट का इस्तेमाल किया गया

prompt = f"""आपको इमेज जनरेट करने वाले मॉडल के प्रॉम्प्ट लिखने में महारत हासिल है. इमेज जनरेट करने वाले मॉडल के लिए, काम के प्रॉम्प्ट की सूची लिखने में मेरी मदद करो. इसमें, खास तौर पर यह शब्द शामिल है: "{params_list_str}". प्रॉम्प्ट में इन शब्दों को शामिल करना न भूलें और प्रॉम्प्ट को काम का बनाएं."""

Imagen का इस्तेमाल करके इमेज जनरेट करना

इसमें उपयोगकर्ता के इनपुट और नेगेटिव प्रॉम्प्ट(ज़रूरी नहीं) का इस्तेमाल किया जाता है. साथ ही, यह मॉडल (imageImage@002) को फ़ीड करता है.

बिटरेट

input_prompt = input

model = ImageGenerationModel.from_pretrained("imagegeneration@002")

response = model.generate_images(

    prompt=input_prompt,

    number_of_images=4, #kept to static value of 4

    negative_prompt=negative_prompt

)

नीचे दिए गए कोड में, उपयोगकर्ता के इनपुट और नेगेटिव प्रॉम्प्ट से इमेज जनरेट की जाती हैं. फ़ाइनल कोड, टेक्स्ट-बायसन मॉडल से जनरेट किए गए प्रॉम्प्ट का इस्तेमाल करता है.

ఃfrom Verexai.preview.vision_models ने ImageGenerationModel को इंपोर्ट किया

defimage_ Generation(input, negative_prompt):

input_prompt = input

model = ImageGenerationModel.from_pretrained("imagegeneration@002")

response = model.generate_images(

    prompt=input_prompt,

    number_of_images=4, #kept to static value of 4.. can be a max value of 8

    negative_prompt=negative_prompt

)

images = response.images

return images

user_prompt = "Prompt: एक युवा महिला, पेड़ों के गुच्छे में रखे क्रिसमस ट्री को दिखा रही है और बेच रही है. कोल्ड लाइटिंग, अच्छी क्वालिटी, और पूरी जानकारी वाली इमेज, जिसे पेशेवर फ़ोटोग्राफ़र ने दूर से लिया है."

नकारात्मक_prompt = "विकृत और अनाकर्षक चेहरे"

created_images_list = image_ Generation(user_prompt,negative_prompt)

#जनरेट की गई इमेज में से कोई एक दिखाएं

generated_images_list[0].show()

आउटपुट -

db04a6bfdd78693b.jpeg

4. Gradio ऐप्लिकेशन को डिप्लॉय करना

Gradio का इस्तेमाल फ़्रंटएंड के लिए किया जाता है. इसमें उपयोगकर्ता, कीवर्ड इनपुट करके स्ट्रक्चर्ड प्रॉम्प्ट जनरेट कर सकते हैं. इन प्रॉम्प्ट को सीधे इस्तेमाल किया जा सकता है या उपयोगकर्ता इनमें बदलाव कर सकते हैं. इसके बाद, इनपुट के हिसाब से इमेज जनरेट करने के लिए इसे Imagen में फ़ीड किया जाता है. Gradio, एक Python लाइब्रेरी है जिसका इस्तेमाल मशीन लर्निंग मॉडल के लिए यूज़र इंटरफ़ेस बनाने में किया जा सकता है. इस ऐप्लिकेशन में, ब्लॉक का इस्तेमाल किया जाता है. इससे इस ऐप्लिकेशन में डेटा को अपने हिसाब से बनाने और मुश्किल डेटा को ट्रांसफ़र करने में मदद मिलती है. Blocks, लाइन और कॉलम का इस्तेमाल करके, ऐप्लिकेशन के लेआउट मैनेजमेंट की सुविधा देता है:

डेमो के तौर पर Ⰳwith gr.Blocks():

#Prompt Generation Part

with gr.Row():

    with gr.Column(scale=1):

        Persona = gr.Textbox(label="Persona", info = "Customer segment such as Plumber, Electrician etc.")

    with gr.Column(scale=1):

        Signals = gr.Textbox(label="Signals", info = "Main content of banner such as Faucet, Lamp etc.")

    with gr.Column(scale=1):

        Theme = gr.Textbox(label="Theme", info = "Context of the banner such as Halloween, Kitchen etc.")

with gr.Row():

    with gr.Column(scale=1):

        photo_modifiers = gr.Textbox(label="Photography Modifiers", info = "Photography specific modifiers and parameters such as Lighting(Dramatic/Natural/Warm/Cold), Camera Proximity etc.")

    with gr.Column(scale=1):

        quality_modifiers =  gr.Textbox(label="Image Quality Modifier", info = "Quality Modifiers like high-quality, beautiful, stylized. 4K, HDR, By a professional etc")

    with gr.Column(scale=1):

        other_desc =  gr.Textbox(label="Any Other Description", info = "Other Descriptions for Image such as Style (Painting/Photo/Sketch), Bakground/Foreground Context")

gr.Row() के साथ:

    btn = gr.Button("Submit")

gr.Row() के साथ:

    returned_prompts = gr.Textbox(label="Result Prompts", interactive = True)    

Beyond.click(fn=prompt_generate, Input=[पर्सोना, सिग्नल,थीम, photo_modifiers, quality_modifiers, other_desc], आउटपुट = Return_prompts)

उपयोगकर्ता के इनपुट और आउटपुट मैनेज करने के लिए, Gradio, इमेज, वीडियो, स्लाइडर, ड्रॉपडाउन, टेक्स्टबॉक्स, रेडियो जैसे कई कॉम्पोनेंट की सुविधा देता है. इन कॉम्पोनेंट से डेवलपर को यह कंट्रोल मिलता है कि वे उपयोगकर्ताओं से इनपुट कैसे स्वीकार करें और उसे टेस्ट-बायसन, इमेजन या किसी अन्य एमएल मॉडल में कैसे फ़ीड करें.

इस प्रोजेक्ट के लिए Blocks का इस्तेमाल करके ऐप्लिकेशन बनाया गया है, ताकि ज़रूरत के हिसाब से और जटिल काम किया जा सके

ऐप्लिकेशन में डेटा फ़्लो करता है. ब्लॉक के अतिरिक्त, एक से ज़्यादा ग्रेडियो कॉम्पोनेंट

इनके साथ इस्तेमाल किया गया:

नीचे एक कोड स्निपेट दिया गया है, जिसका इस्तेमाल इनपुट और नेगेटिव प्रॉम्प्ट से इमेज जनरेट करने के लिए किया जाता है:

🰃 #इमेज जनरेट करने की सुविधा का हिस्सा

with gr.Row():

    with gr.Column(scale=1):

        image_prompt = gr.Textbox(label="Image Generation Prompt")

with gr.Accordion("Advanced options", open=False): #Let's hide the advanced options!

    with gr.Row():

        negative_prompt = gr.Textbox(label="Negative prompt", info = "Specify What not to Include in Image ex. Bad Quality Image")

with gr.Row():

    with gr.Column(scale=1):    

        img_btn = gr.Button("Generate Images")

with gr.Row():

    with gr.Column():

        output_image_1 = gr.Image(label = "Result Image 1", visible = False)

    with gr.Column():

        output_image_2 = gr.Image(label = "Result Image 2", visible = False)

with gr.Row():

    with gr.Column():

        output_image_3 = gr.Image(label = "Result Image 3", visible = False)

    with gr.Column():

        output_image_4 = gr.Image(label = "Result Image 4", visible = False)

returned_prompts.select(populate_image_prompt, inputs = [returned_prompts], outputs = image_prompt)

img_btn.click(fn=image_generation_completion, inputs=[image_prompt,negative_prompt], outputs = [output_image_1,output_image_2,output_image_3,output_image_4])       

Gradio ऐप्लिकेशन चलाने और उसकी जांच करने के लिए, बस एक टेक्स्ट प्रॉम्प्ट टाइप करें और 'जनरेट करें' बटन पर क्लिक करें. Imagen आपके प्रॉम्प्ट के आधार पर एक इमेज जनरेट करेगा. यह देखने के लिए कि Imagen किस तरह की इमेज जनरेट कर सकता है, अलग-अलग प्रॉम्प्ट आज़माएं.

नीचे ग्रेडियो ऐप्लिकेशन पर प्रॉम्प्ट जनरेशन का स्क्रीनशॉट दिया गया है.

70331c9645b1e91b.png

नीचे Gradio ऐप्लिकेशन में इमेज जनरेट करने की प्रक्रिया का स्क्रीनशॉट दिया गया है.

a7261e8fafab7073.png

कुछ उदाहरण -

पहला उदाहरण -

[लेफ़्ट इमेज] प्रॉम्प्ट (प्रॉम्प्ट के तौर पर आसान कीवर्ड का इस्तेमाल करके) : बोटिंग करते हुए कुछ दोस्त.

[दाईं इमेज] प्रॉम्प्ट (Text-Bison की मदद से जनरेट किए गए प्रॉम्प्ट का इस्तेमाल करना) : जंगल में गहरे पेड़ों से घिरी नाव पर मछली पकड़ते दो जवानों की फ़ोटो. पुरुष शर्ट पहने हैं और नाव पर खड़े हैं. नैचुरल लाइटिंग, अच्छी क्वालिटी, और 4K रिज़ॉल्यूशन की फ़ोटो, एक पेशेवर फ़ोटोग्राफ़र ने ली है.

c2f5fabd10baf42.jpeg abc9b8204a9fdf7f.jpeg

दूसरा उदाहरण -

[लेफ़्ट इमेज] प्रॉम्प्ट ((प्रॉम्प्ट के तौर पर आसान कीवर्ड का इस्तेमाल करके)) : क्रिसमस ट्री

[दाईं इमेज] प्रॉम्प्ट (Text-Bison की मदद से जनरेट किए गए प्रॉम्प्ट का इस्तेमाल करना) : एक कमरे में मौजूद क्रिसमस ट्री जिसमें लैंप और फ़र्नीचर है. पेड़ को रोशनी और गहनों से सजाया गया है. इसे खिड़की के पास लगाया गया है और बैकग्राउंड में एक दीवार दिख रही है. हल्की रोशनी, अच्छी क्वालिटी, एचडीआर फ़ोटो जो पेशेवर फ़ोटोग्राफ़र ने दूर से ली है.

f10cf9f52ffd92c7.jpeg cce36df7a439b309.jpeg

5. मिटाना

अपने संसाधनों को खाली करने के लिए,

  • Gradio ऐप्लिकेशन बंद करो.
  • वर्कबेंच नोटबुक को रोकें/मिटाएं.

6. बधाई हो

बधाई हो, आपने Google Text-Bison API और Imagen API की मदद से प्रॉम्प्ट और इमेज बनाने के लिए, Gradio ऐप्लिकेशन को डिप्लॉय कर लिया है.