با Imagen و Mesop در Cloud Shell یک برنامه تولید تصویر بسازید

۱. مقدمه

تصور کنید که یک متن ساده را در عرض چند ثانیه به یک تصویر پر جنب و جوش و دقیق تبدیل کنید. این قدرت رسانه‌های مولد است، حوزه‌ای که به سرعت در حال تحول است و نحوه ایجاد و تعامل شما با محتوای بصری را تغییر می‌دهد. مدل‌هایی مانند Imagen 3 گوگل روی Vertex AI، قابلیت‌های پیشرفته هوش مصنوعی مولد را برای توسعه‌دهندگان برنامه به ارمغان می‌آورند.

Imagen 3 با کیفیت‌ترین مدل تبدیل متن به تصویر گوگل تا به امروز است. این مدل قادر به ایجاد تصاویر با جزئیات شگفت‌انگیز است. بنابراین، توسعه‌دهندگان هنگام ساخت محصولات هوش مصنوعی نسل بعدی که تخیل آنها را به دارایی‌های بصری با کیفیت بالا تبدیل می‌کنند، کنترل بیشتری دارند. برای اطلاعات بیشتر در مورد Imagen به Vertex AI مراجعه کنید.

این آزمایشگاه کد شما را در استفاده از قدرت Imagen با استفاده از Google Gen AI SDK راهنمایی می‌کند. شما نه تنها نحوه تولید تصاویر خیره‌کننده از پیام‌های متنی را بررسی خواهید کرد، بلکه این قابلیت را با استفاده از Mesop ، یک چارچوب رابط کاربری پایتون، در یک برنامه وب ادغام خواهید کرد.

پیش‌نیازها

آنچه یاد خواهید گرفت

  • نحوه استفاده از Google Gen AI SDK برای پایتون برای تعامل با Imagen 3
  • نحوه تولید تصاویر از متن‌های پیشنهادی
  • نحوه ساخت یک برنامه Mesop و اجرای آن از Cloud Shell

آنچه نیاز دارید

  • درک اولیه از پایتون
  • تجربه اجرای دستورات در ترمینال Cloud Shell
  • رایانه‌ای با دسترسی به Cloud Shell

۲. راه‌اندازی محیط و نصب وابستگی‌ها

  1. ویرایشگر Cloud Shell را باز کنید
  2. روی دکمه Open Terminal در گوشه بالا سمت راست کلیک کنید
  3. با وارد کردن دستور زیر در ترمینال، یک پوشه جدید ایجاد کنید:
mkdir my-imagen-app
  1. دایرکتوری‌ها را به پوشه جدید خود تغییر دهید:
cd my-imagen-app
  1. ایجاد یک محیط مجازی در پایتون ۳:
python3 -m venv myenv
  1. فعال کردن محیط مجازی:
source myenv/bin/activate
  1. نصب Mesop:
pip3 install mesop
  1. نصب کیت توسعه نرم‌افزاری هوش مصنوعی گوگل (Google Gen AI SDK) برای پایتون:
pip install google-genai
  1. ایجاد یک فایل پایتون:
touch main.py

۳. تنظیمات برنامه

تمام کدهای مورد نیاز برای اجرای برنامه Mesop در main.py وجود دارد. در هر یک از مراحل بعدی، آنها را به ترتیب در این فایل در ویرایشگر Cloud Shell کپی و جایگذاری کنید.

کتابخانه‌ها را وارد کنید

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

اطلاعات پروژه Google Cloud را تنظیم کنید و کلاینت ایجاد کنید

  1. شناسه پروژه خود را تنظیم کنید:
PROJECT_ID = "[your-project-id]"

هنگام کپی کردن این خط کد، [your-project-id] را با نام پروژه Google Cloud خود جایگزین کنید.

  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")

عملکرد تاری

این تابع ورودی کاربر را در متغیر state شما ذخیره می‌کند.

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 : اجازه_ندادن، اجازه_بزرگسالان، اجازه_همه

توجه: تنها گزینه‌ای که بدون لیست مجوزهای اضافی کار می‌کند، 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 را فراخوانی می‌کند.
  • یک تصویر تولید شده توسط Imagen
  • دستور بهبود یافته به همراه تصویر برگردانده شد

۷. اجرای برنامه در Cloud Shell

  1. وقتی تمام قطعه کدها را در main.py کپی کردید، می‌توانید برنامه Mesop را از ترمینال Cloud Shell خود اجرا کنید.
    mesop main.py
    
  2. حالا، روی دکمه پیش‌نمایش وب در گوشه بالا سمت راست کلیک کنید و سپس روی تغییر پورت کلیک کنید. در کادر شماره پورت، عدد ۳۲۱۲۳ را تایپ کنید و سپس روی تغییر و پیش‌نمایش کلیک کنید. یک پنجره جدید باید باز شود که در آن می‌توانید برنامه بارگذاری شده را مشاهده کنید. باید چیزی شبیه به این باشد: اسکرین‌شات برنامه

۸. تصویر آزمایشی ۳

اینجا جایی است که می‌توانید Imagen را با متن‌های پیشنهادی خودتان امتحان کنید. می‌توانید تصاویر را در طیف وسیعی از سبک‌ها از فوتورئالیسم گرفته تا انیمیشن و سبک‌های هنری مختلف تولید کنید. همچنین می‌توانید زوایای دوربین، لنزها و موارد دیگر را مشخص کنید. متن پیشنهادی اصلی شما نیز از طریق یک ویژگی مبتنی بر LLM بازنویسی می‌شود که هدف آن تولید تصاویر با کیفیت بالاتر است که هدف اصلی پیشنهاد را بهتر منعکس می‌کنند.

توجه: تولید تصاویر افراد نیاز به دسترسی اضافی دارد. در عین حال، اگر درخواست شما شامل تولید تصویر فرد یا چهره باشد، با خطا مواجه خواهید شد.

در اینجا چند نمونه از دستوراتی که می‌توانید امتحان کنید، آورده شده است:

  1. یک کلاه بیسبال بژ که روی آن با حروف سفید حباب‌دار دوخته شده و دور تا دور آن با رنگ سبز نئونی نوشته شده «حس خوب».
  2. یک فروشگاه شیرینی‌فروشی عجیب و غریب.
  3. یک کارت پستال کارتونی از لاس وگاس با نام شهر که به صورت املایی نوشته شده و یک تمبر پستی در گوشه سمت راست آن قرار دارد.
  4. یک توله سگ و یک بچه گربه در حال بازی با یک توپ کاموا.

۹. پاکسازی

برنامه را متوقف کنید

به ترمینالی که برنامه را در آن اجرا کرده‌اید برگردید و با Ctrl C از آن خارج شوید.

غیرفعال کردن محیط مجازی

در همان ترمینال دستور زیر را تایپ کنید:

deactivate

۱۰. نتیجه‌گیری

تبریک! شما با ساخت یک برنامه با Imagen و تولید چند تصویر، این آزمایشگاه کد را با موفقیت به پایان رساندید.

نظرسنجی

با پر کردن این نظرسنجی کوتاه، نظر خود را در مورد این آزمایشگاه کد به ما اطلاع دهید.

مراحل بعدی