ক্লাউড শেলে ইমেজেন এবং মেসপ দিয়ে একটি ইমেজ জেনারেশন অ্যাপ তৈরি করুন

১. ভূমিকা

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

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

এই কোডল্যাবটি আপনাকে গুগল জেন এআই এসডিকে (Google Gen AI SDK) ব্যবহার করে ইমেজেন (Imagen)-এর শক্তিকে কাজে লাগানোর পদ্ধতি শেখাবে। আপনি শুধু টেক্সট প্রম্পট থেকে কীভাবে চমৎকার ছবি তৈরি করতে হয় তা-ই শিখবেন না, বরং পাইথন ইউআই ফ্রেমওয়ার্ক মেসোপ (Mesop) ব্যবহার করে এই সক্ষমতাকে একটি ওয়েব অ্যাপ্লিকেশনে একীভূত করতেও শিখবেন।

পূর্বশর্ত

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

  • পাইথনের জন্য গুগল জেন এআই এসডিকে ব্যবহার করে কীভাবে ইমেজেন ৩-এর সাথে ইন্টারঅ্যাক্ট করবেন
  • টেক্সট প্রম্পট থেকে কীভাবে ছবি তৈরি করবেন
  • কীভাবে একটি মেসোপ অ্যাপ তৈরি করবেন এবং ক্লাউড শেল থেকে তা চালাবেন

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

  • পাইথন সম্পর্কে প্রাথমিক ধারণা
  • ক্লাউড শেল টার্মিনালে কমান্ড চালানোর অভিজ্ঞতা
  • ক্লাউড শেল- এ প্রবেশাধিকার সহ একটি কম্পিউটার

২. পরিবেশ সেটআপ করুন এবং প্রয়োজনীয় জিনিসপত্র ইনস্টল করুন

  1. ক্লাউড শেল এডিটর খুলুন
  2. উপরের ডানদিকের কোণায় থাকা ওপেন টার্মিনাল বাটনে ক্লিক করুন।
  3. টার্মিনালে নিম্নলিখিত কমান্ডটি লিখে একটি নতুন ফোল্ডার তৈরি করুন:
mkdir my-imagen-app
  1. আপনার নতুন ফোল্ডারে ডিরেক্টরি পরিবর্তন করুন:
cd my-imagen-app
  1. পাইথন ৩-এ ভার্চুয়াল এনভায়রনমেন্ট তৈরি করুন:
python3 -m venv myenv
  1. ভার্চুয়াল পরিবেশ সক্রিয় করুন:
source myenv/bin/activate
  1. মেসোপ ইনস্টল করুন:
pip3 install mesop
  1. পাইথনের জন্য গুগল জেন এআই এসডিকে ইনস্টল করুন:
pip install google-genai
  1. একটি পাইথন ফাইল তৈরি করুন:
touch main.py

৩. অ্যাপ সেটআপ

মেসোপ অ্যাপটি চালানোর জন্য প্রয়োজনীয় সমস্ত কোড main.py ফাইলে থাকবে। পরবর্তী প্রতিটি ধাপে, ক্লাউড শেল এডিটরের এই ফাইলটিতে ক্রমানুসারে কোডটি কপি ও পেস্ট করুন।

লাইব্রেরি আমদানি করুন

import base64
import mesop as me
from google import genai
from google.genai import types

গুগল ক্লাউড প্রকল্পের তথ্য সেট করুন এবং ক্লায়েন্ট তৈরি করুন

  1. আপনার প্রজেক্ট আইডি সেট করুন:
PROJECT_ID = "[your-project-id]"

এই কোড লাইনটি কপি করার সময় [your-project-id] এর জায়গায় আপনার গুগল ক্লাউড প্রজেক্টের নামটি লিখুন।

  1. ক্লায়েন্ট তৈরি করুন:
client = genai.Client(vertexai=True, project=PROJECT_ID, location="us-central1")

ইমেজ জেনারেশন মডেল লোড করুন

imagen_model = "imagen-3.0-generate-002"

রাষ্ট্রীয় ব্যবস্থাপনা

স্টেট ম্যানেজমেন্ট নির্ধারণ করার মাধ্যমে আপনি ব্যবহারকারীর পুরো পরিক্রমা জুড়ে তথ্য সংরক্ষণ করতে পারেন।

@me.stateclass
class State:
   input: str = ""
   enhanced_prompt: str = ""
   img_data: str = "https://storage.googleapis.com/cloud-samples-data/generative-ai/image/flowers.png"
  • input : ব্যবহারকারীর দেওয়া ইনপুট যা ছবি তৈরির জন্য ব্যবহার করা হবে।
  • enhanced_prompt : imagen-3.0-generate-002 মডেলটি আপনার দেওয়া প্রম্পটকে উন্নত করার বিকল্প প্রদান করে। উচ্চতর মানের ছবি তৈরিতে সাহায্য করার জন্য আপনার মূল প্রম্পট থেকে একটি নতুন, বিস্তারিত প্রম্পট তৈরি করা হবে এবং সেটি এই ভেরিয়েবলে ফেরত দেওয়া হবে।
  • img_data : Imagen 3 দিয়ে তৈরি করা কোনো ছবির ক্লাউড স্টোরেজের অবস্থান বা ইমেজ বাইট।

৪. সহায়ক ফাংশনগুলো সংজ্ঞায়িত করুন

লোড ফাংশন

অ্যাপ্লিকেশন লোড হওয়ার সময় এই কোডটি কার্যকর হবে। এটি অ্যাপটির মোডকে সিস্টেম কালারে সেট করে।

def load(e: me.LoadEvent):
  me.set_theme_mode("system")

ব্লার ফাংশন

এই ফাংশনটি ব্যবহারকারীর ইনপুট আপনার স্টেট ভেরিয়েবলে সংরক্ষণ করে।

def on_blur(e: me.InputBlurEvent):
    state = me.state(State)
    state.input = e.value

৫. Imagen দিয়ে ছবি তৈরি করুন

যখন কোনো ব্যবহারকারী ছবি তৈরির জন্য একটি টেক্সট প্রম্পট জমা দিতে কোনো বাটনে ক্লিক করেন, তখন এই ফাংশনটি চালু হয়।

def generate_image(e: me.ClickEvent):
    state = me.state(State)
    image = client.models.generate_images(
        model=imagen_model,
        prompt=state.input,
        config=types.GenerateImagesConfig(
            number_of_images=1,
            aspect_ratio="1:1",
            enhance_prompt=True,
            safety_filter_level="BLOCK_MEDIUM_AND_ABOVE",
            person_generation="DONT_ALLOW",
        )
    )
    img = image.generated_images[0].image.image_bytes
    # Encode image in Base64 to display in web app
    img64 = base64.b64encode(img).decode('utf-8')
    state.enhanced_prompt = image.generated_images[0].enhanced_prompt
    state.img_data = f"data:image/png;base64,{img64}"

আপনি GenerateImagesConfig এ অবস্থিত সেটিংস কনফিগার করতে পারেন:

  • number_of_images : ১, ২, ৩, ৪
  • aspect_ratio : ১:১, ৯:১৬, ১৬:৯, ৩:৪, ৪:৩
  • safety_filter_level : BLOCK_LOW_AND_ABOVE, BLOCK_MEDIUM_AND_ABOVE, BLOCK_ONLY_HIGH, BLOCK_NONE
  • person_generation : অনুমতি_দেওয়া_নেই, প্রাপ্তবয়স্কদের_অনুমতি_দেওয়া_যায়, সবাইকে_অনুমতি_দেওয়া_যায়

দ্রষ্টব্য: অতিরিক্ত allowlisting ছাড়াই একমাত্র যে অপশনটি কাজ করবে তা হলো DONT_ALLOW।

৬. অ্যাপের লেআউট কাঠামো

@me.page(
  on_load=load,
  path="/",
  title="Imagen 3",
)
def app():
   s = me.state(State)
   with me.box(
        style=me.Style(
            display="grid",
            width="100%",
            place_items="center",
            margin=me.Margin(top=100),
         )
    ):
        me.text(text="Imagen 3: Image Generation", type="headline-3", style=me.Style(font_family="Google Sans"))
        with me.box(
           style=me.Style(
              border_radius=16,
              padding=me.Padding.all(8),
              display="flex",
           )
        ):
            with me.box(
               style=me.Style(flex_grow=1)
            ):
                me.native_textarea(
                autosize=True,
                on_blur=on_blur,
                min_rows=8,
                placeholder="Enter your image prompt",
                style=me.Style(
                    padding=me.Padding(top=16, left=16),
                    width="700px",
                    border_radius=16,
                    outline="none",
                    overflow_y="auto",
                    border=me.Border.all(
                        me.BorderSide(style="none"),
                    ),
                    font_family="Google Sans",
                  ),
                )
            with me.content_button(
                type="icon",
                on_click=generate_image,
            ):
                me.icon("send")
        with me.box(style=me.Style(margin=me.Margin.all(8),
            width="700px",
            display="flex",
            align_items="center")
        ):
            me.image(
              src=s.img_data,
              style=me.Style(width="350px", padding=me.Padding.all(16), border_radius=36)
            )
            with me.box(
               style=me.Style(
                  padding=me.Padding.all(8),
                  background="white",
                  height="400px",
                  width="400px",
                  border_radius=16,
               )
            ):
                me.text(text="Enhanced Prompt:", style=me.Style(font_family="Google Sans", font_weight="bold"))
                me.text(text=s.enhanced_prompt, style=me.Style(padding=me.Padding.all(10), font_family="Google Sans"),
            )

এই কোডটি একটি একক পৃষ্ঠার অ্যাপ্লিকেশন তৈরি করে, যাতে নিম্নলিখিত উপাদানগুলো অন্তর্ভুক্ত রয়েছে:

  • শিরোনাম
  • ছবি প্রবেশ করানোর জন্য টেক্সট এরিয়া
  • যে প্রেরক বোতামটি generate_image ফাংশনটিকে কল করে
  • একটি ইমেজ দ্বারা তৈরি ছবি
  • উন্নত প্রম্পটটি ছবিটি সহ ফিরে এসেছে।

৭. ক্লাউড শেলে অ্যাপ্লিকেশনটি চালান

  1. main.py তে সমস্ত কোড স্নিপেট কপি করার পরে, আপনি আপনার ক্লাউড শেল টার্মিনাল থেকে মেসোপ অ্যাপ্লিকেশনটি চালাতে পারবেন।
    mesop main.py
    
  2. এখন, উপরের ডানদিকের কোণায় থাকা ওয়েব প্রিভিউ বাটনে ক্লিক করুন এবং তারপরে চেঞ্জ পোর্ট-এ ক্লিক করুন। পোর্ট নাম্বার বক্সে 32123 টাইপ করুন এবং তারপরে চেঞ্জ অ্যান্ড প্রিভিউ-তে ক্লিক করুন। একটি নতুন উইন্ডো খুলবে যেখানে আপনি লোড হওয়া অ্যাপটি দেখতে পারবেন। এটি দেখতে অনেকটা এইরকম হবে: অ্যাপ স্ক্রিনশট

৮. টেস্ট ইমেজেন ৩

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

দ্রষ্টব্য: মানুষের ছবি তৈরি করতে অতিরিক্ত অ্যাক্সেসের প্রয়োজন। এই সময়ের মধ্যে, আপনার প্রম্পটে ব্যক্তি বা মুখমণ্ডল তৈরির অপশন থাকলে আপনি একটি এরর পাবেন।

এখানে কিছু নমুনা প্রম্পট দেওয়া হলো যা আপনি চেষ্টা করতে পারেন:

  1. একটি বেইজ রঙের বেসবল ক্যাপ, যার উপরে সাদা বুদবুদের মতো সেলাই করা অক্ষরে 'good vibes' লেখা এবং অক্ষরগুলোর চারপাশে নিওন সবুজ রঙের আউটলাইন দেওয়া।
  2. একটি খেয়ালি মিষ্টির দোকান।
  3. লাস ভেগাসের একটি কার্টুন পোস্টকার্ড, যেখানে শহরটির নাম বানান করে লেখা এবং ডান কোণায় একটি ডাকটিকিট রয়েছে।
  4. একটি কুকুরছানা ও একটি বিড়ালছানা উলের বল নিয়ে খেলছে।

৯. পরিচ্ছন্নতা

অ্যাপ্লিকেশনটি বন্ধ করুন

যে টার্মিনাল থেকে অ্যাপ্লিকেশনটি চালু করেছিলেন সেখানে ফিরে যান এবং Ctrl C চেপে বন্ধ করুন।

ভার্চুয়াল পরিবেশ নিষ্ক্রিয় করুন

একই টার্মিনালে নিম্নলিখিত কমান্ডটি টাইপ করুন:

deactivate

১০. উপসংহার

অভিনন্দন! আপনি Imagen ব্যবহার করে একটি অ্যাপ্লিকেশন তৈরি করে এবং কিছু ছবি জেনারেট করার মাধ্যমে এই কোডল্যাবটি সফলভাবে সম্পন্ন করেছেন।

জরিপ

এই সংক্ষিপ্ত সমীক্ষাটি পূরণ করে এই কোডল্যাবটি সম্পর্কে আপনার মতামত জানান।

পরবর্তী পদক্ষেপ