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

Gradio UI
Gradio एक ओपन-सोर्स Python लाइब्रेरी है. इसकी मदद से, मशीन लर्निंग मॉडल, किसी एपीआई या किसी भी Python फ़ंक्शन के लिए, आसानी से इस्तेमाल किए जा सकने वाले और पसंद के मुताबिक बनाए जा सकने वाले यूज़र इंटरफ़ेस (यूआई) कॉम्पोनेंट बनाए जा सकते हैं. इसके लिए, आपको सिर्फ़ कुछ लाइनें कोड लिखनी होती हैं. Gradio GUI को सीधे तौर पर अपनी Jupyter नोटबुक में इंटिग्रेट किया जा सकता है. इसके अलावा, इसे किसी के साथ भी लिंक के तौर पर शेयर किया जा सकता है. Gradio, कई तरह के मीडिया टाइप के साथ काम करता है. जैसे, टेक्स्ट, इमेज, वीडियो, और ऑडियो. यह पहले से बने कई यूज़र इंटरफ़ेस (यूआई) कॉम्पोनेंट भी उपलब्ध कराता है. जैसे, इनपुट फ़ील्ड, बटन, स्लाइडर, और ड्रॉप-डाउन मेन्यू.
आपको क्या बनाने को मिलेगा
इस कोडलैब में, आपको एक Gradio ऐप्लिकेशन डिप्लॉय करना है. यह ऐप्लिकेशन ये काम करेगा:
- कीवर्ड या वाक्यांशों का इस्तेमाल करके, टेक्स्ट प्रॉम्प्ट जनरेट करें. जनरेट किए गए प्रॉम्प्ट में मैन्युअल तरीके से भी बदलाव किया जा सकता है.
- यूज़र इंटरफ़ेस (यूआई) पर जनरेट किए गए प्रॉम्प्ट से इमेज जनरेट करें.
आपको क्या सीखने को मिलेगा
- टेक्स्ट-बिसन मॉडल के साथ ज़ीरो-शॉट और फ़्यू-शॉट लर्निंग का प्रोग्राम के हिसाब से इस्तेमाल करके, इमेज जनरेट करने के लिए इमेज से जुड़े प्रॉम्प्ट जनरेट करने का तरीका.
- एपीआई और प्रॉम्प्ट के ज़रिए, Imagen मॉडल का इस्तेमाल करके इमेज जनरेट करने का तरीका.
- Vertex AI Workbench Notebook से Gradio ऐप्लिकेशन को बनाने, डिप्लॉय करने, और टेस्ट करने का तरीका.
आपको इन चीज़ों की ज़रूरत होगी
- GCP प्रोजेक्ट का ऐक्सेस, जैसे कि ‘Cloud-llm-preview4'
- Vertex AI Workbench बनाने की सुविधा
- Vertex AI API चालू हो.
- Gradio के लिए नेटवर्किंग से जुड़ी ज़रूरी शर्तें: नोटबुक इंस्टेंस के ऐक्सेस का सार्वजनिक यूआरएल
2. सेट अप करना
नोटबुक बनाना
- प्रोजेक्ट में लॉग इन करें
- बाईं ओर मौजूद नेविगेशन मेन्यू में, वर्कबेंच पर जाएं
- "उपयोगकर्ता के मैनेज की गई नोटबुक" में जाकर, डिफ़ॉल्ट विकल्पों के साथ नई नोटबुक बनाएं.
- इंस्टेंस उपलब्ध हो जाने के बाद, "OPEN JUPYTERLAB" पर क्लिक करें.
ध्यान दें: अगर नोटबुक बंद है, तो उसे शुरू होने में कुछ मिनट लग सकते हैं.
कोड पाएं
हमने कोड फ़ाइल यहां डाल दी है. इस नोटबुक को अपने एनवायरमेंट में इंपोर्ट किया जा सकता है. साथ ही, इसे वैसे ही चलाया जा सकता है जैसे यह है. हालांकि, आपको अपनी प्रोजेक्ट की जानकारी बदलनी होगी.
3. कोड चलाना
ज़रूरी डिपेंडेंसी और लाइब्रेरी इंस्टॉल/इंपोर्ट करना
- Gradio ऐप्लिकेशन इंस्टॉल करना
- Text-Bison और इमेज जनरेशन के लिए, Vertex AI API इंपोर्ट करें.
- अन्य सभी ज़रूरी लाइब्रेरी इंपोर्ट करें.
टेक्स्ट-बिसन मॉडल का इस्तेमाल करके प्रॉम्प्ट जनरेट करना
यह उपयोगकर्ता के इनपुट का इस्तेमाल करता है. इसमें कीवर्ड और/या वाक्यांश शामिल होते हैं. जैसे, कॉमा लगाकर अलग किए गए कीवर्ड या वाक्यांशों की सूची. इसका इस्तेमाल, जनरेट की जाने वाली इमेज के बारे में बताने वाले वाक्य को बनाने के लिए किया जा सकता है.
उदाहरण के लिए - पर्सोना, विषय, बैकग्राउंड, रोशनी, और अन्य जानकारी.
प्रॉम्प्ट जनरेट करने वाले फ़ंक्शन को यहां दिया गया है:
def prompt_generation(persona,signal,theme, lighting, quality, extra_desc):
model = TextGenerationModel.from_pretrained("text-bison")
response_few_shot = model.predict(
few_shot_prompt,
**parameters
)
response_single_shot = model.predict(
prompt,
**parameters
)
फ़्यू-शॉट और ज़ीरो-शॉट प्रॉम्प्ट
ज़ीरो-शॉट प्रॉम्प्टिंग, टेक्स्ट जनरेट करने की एक ऐसी तकनीक है जिसमें मॉडल को टेक्स्ट जनरेट करने के लिए कोई कॉन्टेक्स्ट या उदाहरण नहीं दिया जाता है. यह मुश्किल हो सकता है, क्योंकि मॉडल को ऐसा टेक्स्ट जनरेट करने के लिए अपनी जानकारी पर भरोसा करना पड़ता है जो सुसंगत और जानकारी देने वाला हो.
हालांकि, ज़ीरो-शॉट प्रॉम्प्टिंग का इस्तेमाल करके, बहुत क्रिएटिव कॉन्टेंट भी बनाया जा सकता है. ऐसा इसलिए, क्योंकि मॉडल पर पहले से मौजूद किसी भी उदाहरण का कोई असर नहीं पड़ता.
फ़्यू-शॉट प्रॉम्प्टिंग, टेक्स्ट जनरेट करने की एक ऐसी तकनीक है जिसमें मॉडल को टेक्स्ट जनरेट करने के लिए, कुछ उदाहरण दिए जाते हैं. यह ज़ीरो-शॉट प्रॉम्प्टिंग से ज़्यादा आसान हो सकता है, क्योंकि मॉडल को यह पता होता है कि उसे क्या जनरेट करना है. हालांकि, कुछ उदाहरणों के साथ प्रॉम्प्ट देने की सुविधा सीमित हो सकती है. ऐसा इसलिए, क्योंकि मॉडल सिर्फ़ ऐसे टेक्स्ट जनरेट कर सकता है जो उसे दिए गए उदाहरणों से मिलता-जुलता हो.
यहां कुछ उदाहरणों और बिना उदाहरण वाले प्रॉम्प्ट के लिए सैंपल कोड दिया गया है.
**# Few Shot Prompt used in the code**
few_shot_prompt = f"""You are an expert in writing prompts for Image Generation Models. दिए गए वाक्यांशों और कीवर्ड का इस्तेमाल करके, उन्हें एक साथ जोड़ें. साथ ही, कुछ ऐसी जानकारी जोड़ें जो इमेज जनरेट करने के लिए लॉजिकल और काम का प्रॉम्प्ट जनरेट करने में मदद करे.
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:
"""
# Zero Shot Prompt used in the code
prompt = f"""You are an expert in writing prompts for Image Generation Models. इमेज जनरेशन मॉडल के लिए, मुझे काम के प्रॉम्प्ट की एक सूची बनाने में मदद करो. इसमें खास तौर पर ये शब्द शामिल होने चाहिए: "{params_list_str}". प्रॉम्प्ट में इन शब्दों को शामिल करना न भूलें. साथ ही, प्रॉम्प्ट को काम का बनाएं."""
Imagen का इस्तेमाल करके इमेज जनरेट करना
यह नोड, उपयोगकर्ता के इनपुट प्रॉम्प्ट और नेगेटिव प्रॉम्प्ट(ज़रूरी नहीं) का इस्तेमाल करता है. साथ ही, इसे मॉडल (imagegeneration@002) को भेजता है.
def image_generation_completion(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
negative_prompt=negative_prompt
)
उपयोगकर्ता के इनपुट प्रॉम्प्ट और नेगेटिव प्रॉम्प्ट से इमेज जनरेट करने के लिए, यहां दिया गया कोड शामिल किया गया है. फ़ाइनल कोड में, text-bison मॉडल से जनरेट किए गए प्रॉम्प्ट का इस्तेमाल किया गया है.
from vertexai.preview.vision_models import ImageGenerationModel
def image_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: A Young Woman Showcasing and selling an undecorated Fresh Christmas Tree from A bunch of trees. कोल्ड लाइटिंग, हाई क्वालिटी और ज़्यादा जानकारी वाली इमेज, जिसे किसी प्रोफ़ेशनल फ़ोटोग्राफ़र ने दूर से लिया है."
negative_prompt = "Distorted and unattractive faces"
generated_images_list = image_generation(user_prompt,negative_prompt)
#जनरेट की गई इमेज में से कोई एक दिखाओ
generated_images_list[0].show()
आउटपुट -

4. Gradio ऐप्लिकेशन को डिप्लॉय करना
Gradio का इस्तेमाल फ़्रंटएंड के लिए किया जाता है. यहाँ उपयोगकर्ता कीवर्ड डाल सकते हैं और स्ट्रक्चर्ड प्रॉम्प्ट जनरेट कर सकते हैं. इन प्रॉम्प्ट का इस्तेमाल सीधे तौर पर किया जा सकता है. इसके अलावा, उपयोगकर्ता इनमें बदलाव करके, इन्हें Imagen में डाल सकते हैं, ताकि इनपुट के हिसाब से इमेज जनरेट की जा सकें. Gradio, Python लाइब्रेरी है. इसका इस्तेमाल मशीन लर्निंग मॉडल के लिए यूज़र इंटरफ़ेस बनाने के लिए किया जा सकता है. इस ऐप्लिकेशन के लिए, ब्लॉक का इस्तेमाल किया जाता है. इससे ऐप्लिकेशन में फ़्लेक्सिबिलिटी और जटिल डेटा फ़्लो को जोड़ा जा सकता है. ब्लॉक, पंक्तियों और कॉलम का इस्तेमाल करके ऐप्लिकेशन के लेआउट को मैनेज करने की सुविधा देता है:
with gr.Blocks() as demo:
#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)
btn.click(fn=prompt_generation, inputs=[Persona, Signals,Theme, photo_modifiers, quality_modifiers, other_desc], outputs = returned_prompts)
Gradio, उपयोगकर्ता के इनपुट और आउटपुट को मैनेज करने के लिए कई कॉम्पोनेंट उपलब्ध कराता है. जैसे, इमेज, वीडियो, स्लाइडर, ड्रॉपडाउन, टेक्स्टबॉक्स, रेडियो, और अन्य विकल्प. इन कॉम्पोनेंट की मदद से, डेवलपर को यह तय करने की सुविधा मिलती है कि उपयोगकर्ताओं से इनपुट कैसे स्वीकार किए जाएं और उन्हें Test-bison, Imagen या किसी अन्य एमएल मॉडल को कैसे दिया जाए.
इस प्रोजेक्ट के लिए, ऐप्लिकेशन को ब्लॉक का इस्तेमाल करके बनाया गया है, ताकि इसमें आसानी से बदलाव किया जा सके और इसे जटिल बनाया जा सके
ऐप्लिकेशन में डेटा फ़्लो होता है. ब्लॉक के अलावा, कई Gradio कॉम्पोनेंट
इस्तेमाल किया गया. जैसे:
- सही लेआउट के लिए, पंक्तियां, कॉलम.
- ज़रूरत के मुताबिक काम करने और इस्तेमाल करने में आसानी के लिए, बटन, टेक्स्टबॉक्स, ड्रॉपडाउन, और स्लाइडर
- नतीजे दिखाने के लिए, इमेज कॉम्पोनेंट.
- यूज़र इंटरफ़ेस (यूआई) में डाइनैमिक बदलावों के लिए, EventData और update जैसे अन्य हेल्पर.
यहां एक कोड स्निपेट दिया गया है. इसका इस्तेमाल, इनपुट और नेगेटिव प्रॉम्प्ट से इमेज जनरेट करने के लिए किया जाता है:
#Image Generation part
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 किस तरह की इमेज जनरेट कर सकता है.
नीचे, Gradio ऐप्लिकेशन पर प्रॉम्प्ट जनरेट करने का स्क्रीनशॉट दिया गया है.

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

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

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

5. मिटाना
अपने संसाधनों को मिटाने के लिए,
- Gradio ऐप्लिकेशन को बंद करें.
- Workbench नोटबुक को बंद करें या मिटाएं.
6. बधाई हो
बधाई हो, आपने Google Text-Bison API और Imagen API की मदद से प्रॉम्प्ट और इमेज बनाने के लिए, Gradio ऐप्लिकेशन को सफलतापूर्वक डिप्लॉय कर लिया है.