GenAI - কীওয়ার্ড থেকে ইমেজ জেনারেশন

১. ভূমিকা

সর্বশেষ হালনাগাদ: ২০২৩-১০-১২

ইমেজজেন ইমেজ জেনারেশন

গুগল ইমেজেন হলো গুগলের একটি শক্তিশালী বৃহৎ ল্যাঙ্গুয়েজ মডেল, যা টেক্সট বর্ণনা থেকে বাস্তবসম্মত ও সৃজনশীল ছবি তৈরি করতে পারে। ভার্টেক্স এআই-এর ইমেজেন ব্যবহারকারীদের এমন অত্যাধুনিক এআই প্রোডাক্ট তৈরি করতে সাহায্য করে, যা ব্যবহারকারীর কল্পনাকে কয়েক সেকেন্ডের মধ্যে উচ্চ মানের ভিজ্যুয়াল অ্যাসেটে রূপান্তরিত করে। টেক্সট থেকে ছবি তৈরির পাশাপাশি, এটি টেক্সট প্রম্পটের মাধ্যমে ছবি সম্পাদনা, ছবির ক্যাপশনিং, ভিজ্যুয়াল প্রশ্নোত্তর এবং বিষয় ও স্টাইল ভিত্তিক ইমেজ মডেল টিউনিং-কেও সমর্থন করে।

প্রম্পট জেনারেশন

Imagen ব্যবহার করে একটি ছবি তৈরি করতে, আপনাকে ছবিটির একটি টেক্সট বিবরণ দিতে হবে যা প্রম্পট নামে পরিচিত, এবং এর উপর ভিত্তি করে একটি ছবি তৈরি করা হয়। তবে, একটি উচ্চ মানের ফটো-রিয়ালিস্টিক ছবি তৈরি করার জন্য প্রম্পটিং-এ দক্ষতার প্রয়োজন হয়। এটি ডোমেন-নির্ভরও হতে পারে, যদি আপনি খুচরা, উৎপাদন ইত্যাদির মতো নির্দিষ্ট ব্যবসায়িক ডোমেন সম্পর্কিত ছবি তৈরি করতে চান। একটি প্রম্পট ডিজাইন করার একটি সহজ উপায় হলো Text Bison মডেলে এক সেট কীওয়ার্ড দেওয়া।

সামগ্রিক পদ্ধতিটি নিম্নরূপ -

fbb3826592b2816d.png

গ্র্যাডিও ইউআই

গ্র্যাডিও একটি ওপেন-সোর্স পাইথন লাইব্রেরি যা আপনাকে মাত্র কয়েকটি কোডের লাইনের মাধ্যমে আপনার মেশিন লার্নিং মডেল, যেকোনো এপিআই, বা এমনকি যেকোনো পাইথন ফাংশনের জন্য দ্রুত সহজে ব্যবহারযোগ্য ও কাস্টমাইজযোগ্য ইউআই কম্পোনেন্ট তৈরি করতে দেয়। আপনি গ্র্যাডিও জিইউআই সরাসরি আপনার জুপিটার নোটবুকে যুক্ত করতে পারেন অথবা যেকোনো ব্যক্তির সাথে লিঙ্ক হিসেবে শেয়ার করতে পারেন। গ্র্যাডিও টেক্সট, ছবি, ভিডিও এবং অডিও সহ বিভিন্ন ধরনের মিডিয়া সমর্থন করে। এটি ইনপুট ফিল্ড, বাটন, স্লাইডার এবং ড্রপ-ডাউন মেনুর মতো বেশ কিছু আগে থেকে তৈরি ইউআই কম্পোনেন্টও সরবরাহ করে।

আপনি যা তৈরি করবেন

এই কোডল্যাবে, আপনি একটি Gradio অ্যাপ ডেপ্লয় করবেন যা নিম্নলিখিত কাজগুলো করবে:

  • কীওয়ার্ড বা শব্দগুচ্ছ ব্যবহার করে একটি টেক্সট প্রম্পট তৈরি করুন। তৈরি করা প্রম্পটটি ম্যানুয়ালিও সম্পাদনা করা যাবে।
  • UI-তে তৈরি হওয়া প্রম্পট থেকে ছবি তৈরি করুন।

আপনি যা শিখবেন

  • ইমেজ জেনারেশনের জন্য ইমেজ-নির্দিষ্ট প্রম্পট তৈরি করতে টেক্সট-বাইসন মডেলের সাথে প্রোগ্রাম্যাটিকভাবে কীভাবে জিরো-শট এবং ফিউ-শট লার্নিং ব্যবহার করা যায়।
  • এপিআই এবং প্রম্পট ব্যবহার করে Imagen মডেলের সাহায্যে কীভাবে ছবি তৈরি করা যায়।
  • Vertex AI ওয়ার্কবেঞ্চ নোটবুক থেকে কীভাবে Gradio অ্যাপ্লিকেশন বিল্ড, ডেপ্লয় এবং টেস্ট করবেন।

আপনার যা যা লাগবে

  • উদাহরণস্বরূপ একটি GCP প্রজেক্টে অ্যাক্সেস - 'Cloud-llm-preview4'
  • ভার্টেক্স এআই ওয়ার্কবেঞ্চ তৈরি করার অ্যাক্সেস
  • ভার্টেক্স এআই এপিআই সক্রিয় করা হয়েছে।
  • Gradio-এর জন্য নেটওয়ার্কিং প্রয়োজনীয়তা: নোটবুক ইনস্ট্যান্স অ্যাক্সেস পাবলিক ইউআরএল

২. প্রস্তুতি গ্রহণ

নোটবুক তৈরি করুন

  • প্রকল্পে লগ ইন করুন
  • বাম দিকের নেভিগেশন মেনু থেকে ওয়ার্কবেঞ্চে যান।
  • " ব্যবহারকারী-পরিচালিত নোটবুক "-এর অধীনে, ডিফল্ট অপশনগুলো ব্যবহার করে একটি নতুন নোটবুক তৈরি করুন।
  • ইনস্ট্যান্সটি প্রোভিশন হয়ে গেলে " ওপেন জুপিটারল্যাব "-এ ক্লিক করুন।

দ্রষ্টব্য: নোটবুকটি বন্ধ অবস্থায় থাকলে এটি চালু হতে কয়েক মিনিট সময় লাগতে পারে।

কোডটি নিন

আমরা কোড ফাইলটি এখানে রেখেছি। এই নোটবুকটি আপনার পরিবেশে ইম্পোর্ট করে সরাসরি চালানো যাবে (তবে আপনার প্রোজেক্টের বিবরণ পরিবর্তন করা যাবে না)।

৩. কোডটি চালান।

প্রয়োজনীয় ডিপেন্ডেন্সি এবং লাইব্রেরিগুলো ইনস্টল/ইম্পোর্ট করুন

  • Gradio অ্যাপটি ইনস্টল করুন
  • টেক্সট-বাইসন এবং ইমেজ জেনারেশনের জন্য ভার্টেক্স এআই এপিআইগুলো ইম্পোর্ট করুন।
  • অন্যান্য প্রয়োজনীয় সকল লাইব্রেরি ইম্পোর্ট করুন।

টেক্সট-বাইসন ব্যবহার করে প্রম্পট তৈরি

ব্যবহারকারীর দেওয়া ইনপুটে কীওয়ার্ড এবং/অথবা বাক্যাংশ থাকে, অর্থাৎ কমা দিয়ে আলাদা করা কীওয়ার্ড বা বাক্যাংশের একটি তালিকা যা ব্যবহার করে কাঙ্ক্ষিত ছবিটি বর্ণনা করে একটি বাক্য তৈরি করা যায়।

উদাহরণস্বরূপ - চরিত্র, বিষয়বস্তু, প্রেক্ষাপট, আলো এবং অন্যান্য বর্ণনা।

প্রম্পট তৈরি করার ফাংশনটি নিচে দেওয়া হলো:

def prompt_generation(persona,signal,theme, lighting, quality, extra_desc):

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

প্রতিক্রিয়া_কয়েক_শট = মডেল.পূর্বাভাস(

    few_shot_prompt,

    **parameters

)

response_single_shot = model.predict(

    prompt,

    **parameters

)

ফিউ-শট এবং জিরো-শট প্রম্পট

জিরো-শট প্রম্পটিং হলো একটি টেক্সট জেনারেশন কৌশল, যেখানে মডেলকে টেক্সট তৈরি করার জন্য কোনো প্রেক্ষাপট বা উদাহরণ দেওয়া হয় না। এটি বেশ কঠিন হতে পারে, কারণ সামঞ্জস্যপূর্ণ ও তথ্যপূর্ণ টেক্সট তৈরি করার জন্য মডেলকে তার নিজস্ব জ্ঞানের উপর নির্ভর করতে হয়।

তবে, জিরো-শট প্রম্পটিং বেশ সৃজনশীলও হতে পারে, কারণ মডেলটি কোনো পূর্ব-বিদ্যমান উদাহরণ দ্বারা সীমাবদ্ধ থাকে না।

ফিউ-শট প্রম্পটিং হলো একটি টেক্সট জেনারেশন কৌশল, যেখানে মডেলকে টেক্সট তৈরি করার জন্য অল্প কিছু উদাহরণ দেওয়া হয়। এটি জিরো-শট প্রম্পটিং-এর চেয়ে সহজ হতে পারে, কারণ কী তৈরি করতে হবে সে সম্পর্কে মডেল কিছু নির্দেশনা পায়। তবে, ফিউ-শট প্রম্পটিং সীমাবদ্ধও হতে পারে, কারণ মডেলটি হয়তো কেবল তাকে দেওয়া উদাহরণগুলোর অনুরূপ টেক্সটই তৈরি করতে পারে।

নিচে ফিউ-শট এবং জিরো-শট প্রম্পটগুলোর জন্য নমুনা কোড দেওয়া হলো।

**# কোডে ব্যবহৃত কয়েকটি শট প্রম্পট**

আপনি ইমেজ জেনারেশন মডেলের জন্য প্রম্পট লেখায় একজন বিশেষজ্ঞ। প্রদত্ত বাক্যাংশ এবং কীওয়ার্ডগুলো ব্যবহার করে, সেগুলোকে সংযুক্ত করুন এবং কিছু বাস্তবসম্মত বিবরণ যোগ করে একটি যৌক্তিক ও অর্থপূর্ণ প্রম্পট তৈরি করুন যা ইমেজ জেনারেশনের জন্য ব্যবহার করা যেতে পারে।

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:

"""

# কোডে ব্যবহৃত জিরো শট প্রম্পট

আপনি ইমেজ জেনারেশন মডেলের জন্য প্রম্পট লেখায় একজন বিশেষজ্ঞ। আমাকে ইমেজ জেনারেশন মডেলের জন্য অর্থপূর্ণ প্রম্পটের একটি তালিকা তৈরি করতে সাহায্য করুন, যেখানে বিশেষভাবে "{params_list_str}" শব্দগুলো অন্তর্ভুক্ত থাকবে। মনে রাখবেন, প্রম্পটে এই শব্দগুলো অবশ্যই অন্তর্ভুক্ত করতে হবে এবং প্রম্পটটিকে অর্থপূর্ণ করে তুলতে হবে।

ইমেজেন ব্যবহার করে চিত্র তৈরি

ব্যবহারকারীর ইনপুট প্রম্পট এবং নেতিবাচক প্রম্পট (ঐচ্ছিক) ব্যবহার করে এবং তা মডেলে ফিড করে (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

)

ব্যবহারকারীর ইনপুট প্রম্পট এবং নেগেটিভ প্রম্পট থেকে ছবি তৈরি করার জন্য নিম্নলিখিত কোডটি অন্তর্ভুক্ত করা হয়েছে। চূড়ান্ত কোডটি টেক্সট-বাইসন মডেল দ্বারা তৈরি প্রম্পটটি ব্যবহার করে।

vertexai.preview.vision_models থেকে 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 = " বিষয়বস্তু : একগুচ্ছ গাছের মধ্য থেকে একজন তরুণী একটি অলঙ্করণবিহীন তাজা ক্রিসমাস ট্রি প্রদর্শন ও বিক্রি করছেন। শীতল আলোয়, একজন পেশাদার ফটোগ্রাফারের দূর থেকে তোলা উচ্চ মানের ও বিস্তারিত ছবি।"

negative_prompt = "বিকৃত এবং অনাকর্ষণীয় মুখমণ্ডল"

generated_images_list = image_generation(user_prompt,negative_prompt)

#তৈরি করা ছবিগুলোর মধ্যে একটি দেখান

generated_images_list[0].show()

আউটপুট -

db04a6bfdd78693b.jpeg

৪. Gradio অ্যাপটি স্থাপন করুন

গ্র্যাডিও ফ্রন্টএন্ডের জন্য ব্যবহৃত হয়, যেখানে ব্যবহারকারীরা কীওয়ার্ড ইনপুট করে স্ট্রাকচার্ড প্রম্পট তৈরি করতে পারেন। এই প্রম্পটগুলো সরাসরি ব্যবহার করা যায় অথবা ব্যবহারকারী সেগুলোকে আরও সম্পাদনা করে ইনপুট অনুযায়ী ছবি তৈরি করার জন্য ইমেজেন-এ ফিড করতে পারেন। গ্র্যাডিও একটি পাইথন লাইব্রেরি যা মেশিন লার্নিং মডেলের জন্য ইউজার ইন্টারফেস তৈরি করতে ব্যবহার করা যায়। এই অ্যাপ্লিকেশনটিতে নমনীয়তা এবং জটিল ডেটা ফ্লো যোগ করার জন্য ব্লক ব্যবহার করা হয়েছে। ব্লক সারি এবং কলাম ব্যবহার করে অ্যাপ্লিকেশন লেআউট ম্যানেজমেন্ট প্রদান করে।

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)    

btn.click(fn=prompt_generation, inputs=[Persona, Signals,Theme, photo_modifiers, quality_modifiers, other_desc], outputs = returned_prompts)

ব্যবহারকারীর ইনপুট এবং আউটপুট পরিচালনা করার জন্য, গ্র্যাডিও ইমেজ, ভিডিও, স্লাইডার, ড্রপডাউন, টেক্সটবক্স, রেডিও এবং অন্যান্য বিকল্পের মতো একাধিক কম্পোনেন্ট সরবরাহ করে। এই কম্পোনেন্টগুলো ডেভেলপারদেরকে ব্যবহারকারীদের কাছ থেকে ইনপুট গ্রহণ করে তা টেস্ট-বাইসন, ইমেজেন বা অন্য কোনো এমএল মডেলে পাঠানোর ক্ষেত্রে নমনীয়তা এবং নিয়ন্ত্রণ প্রদান করে।

এই প্রজেক্টে, নমনীয়তা এবং জটিলতা যোগ করার জন্য অ্যাপ্লিকেশনটি ব্লক ব্যবহার করে তৈরি করা হয়েছে।

ডেটা অ্যাপ্লিকেশনে প্রবাহিত হয়। ব্লক ছাড়াও একাধিক গ্র্যাডিও কম্পোনেন্ট রয়েছে।

ব্যবহৃত অন্তর্ভুক্ত:

ইনপুট এবং নেগেটিভ প্রম্পট থেকে ছবি তৈরি করতে ব্যবহৃত একটি কোড স্নিপেট নিচে দেওয়া হলো:

 #ছবি তৈরির অংশ

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 অ্যাপ্লিকেশনটি চালানো ও পরীক্ষা করার জন্য, কেবল একটি টেক্সট প্রম্পট টাইপ করুন এবং Generate বোতামে ক্লিক করুন। Imagen আপনার প্রম্পটের উপর ভিত্তি করে একটি ছবি তৈরি করবে। Imagen কী ধরনের ছবি তৈরি করতে পারে তা দেখার জন্য আপনি বিভিন্ন প্রম্পট চেষ্টা করে দেখতে পারেন।

নিচে গ্র্যাডিও অ্যাপে প্রম্পট তৈরির স্ক্রিনশটটি দেওয়া হলো।

70331c9645b1e91b.png

নিচে Gradio অ্যাপে ছবি তৈরির স্ক্রিনশটটি দেওয়া হলো।

a7261e8fafab7073.png

কিছু উদাহরণ -

উদাহরণ ১ -

[বাম দিকের ছবি] প্রম্পট (সহজ কীওয়ার্ড ব্যবহার করে): একজোড়া বন্ধু নৌকাবিহার করছে।

[ডানদিকের ছবি] প্রম্পট (টেক্সট-বাইসন দ্বারা তৈরি প্রম্পট ব্যবহার করে): জঙ্গলের মধ্যে ঘন জঙ্গলে ঘেরা একটি নৌকায় মাছ ধরছেন এমন দুজন যুবকের ছবি। যুবকেরা শার্ট পরা এবং নৌকার উপর দাঁড়িয়ে আছেন। প্রাকৃতিক আলোতে তোলা, উচ্চ মানের, ৪কে ছবি, যা একজন পেশাদার ফটোগ্রাফার তুলেছেন।

c2f5fabd10baf42.jpegabc9b8204a9fdf7f.jpeg

উদাহরণ ২ -

[বাম দিকের ছবি] প্রম্পট ((প্রম্পট হিসেবে সহজ কীওয়ার্ড ব্যবহার করে)) : একটি ক্রিসমাস ট্রি

[ডানদিকের ছবি] প্রম্পট (টেক্সট-বাইসন দ্বারা তৈরি প্রম্পট ব্যবহার করে): একটি ঘরে বাতি ও আসবাবপত্রসহ একটি ক্রিসমাস ট্রি। গাছটি আলো ও অলঙ্কার দিয়ে সাজানো। এটি একটি জানালার কাছে রাখা, এবং পটভূমিতে একটি দেয়াল দেখা যাচ্ছে। উষ্ণ আলো, উচ্চ গুণমান, HDR। ছবিটি একজন পেশাদার ফটোগ্রাফার দূর থেকে তুলেছেন।

f10cf9f52ffd92c7.jpegcce36df7a439b309.jpeg

৫. পরিষ্কার-পরিচ্ছন্নতা

আপনার সম্পদ পরিষ্কার করতে,

  • গ্রেডিও অ্যাপটি বন্ধ করুন।
  • ওয়ার্কবেঞ্চ নোটবুকটি বন্ধ করুন/মুছে ফেলুন।

৬. অভিনন্দন

অভিনন্দন, আপনি Google Text-Bison API এবং Imagen API ব্যবহার করে প্রম্পট ও ছবি তৈরির জন্য একটি Gradio অ্যাপ্লিকেশন সফলভাবে ডেপ্লয় করেছেন।