الذكاء الاصطناعي التوليدي - إنشاء الصور من الكلمات الرئيسية

1. مقدمة

تاريخ آخر تعديل: 12-10-2023

Imagegen Image Generation

‫Google Imagen هو نموذج لغوي كبير قوي من Google يمكنه إنشاء صور واقعية وإبداعية من أوصاف نصية. تتيح أداة Imagen على Vertex AI للمستخدمين إنشاء منتجات الجيل التالي من الذكاء الاصطناعي التي تحوّل أفكارهم إلى مواد عرض مرئية عالية الجودة في ثوانٍ. بالإضافة إلى إنشاء الصور من النصوص، يتيح أيضًا تعديل الصور من خلال الطلبات النصية، وإضافة تعليقات توضيحية إلى الصور، وطرح الأسئلة المرئية والإجابة عنها، وتعديل نموذج الصور استنادًا إلى الموضوع والنمط.

إنشاء الطلبات

لإنشاء صورة باستخدام Imagen، عليك تقديم وصف نصي للصورة يُعرف باسم الطلب، ويتم إنشاء الصورة باستخدام هذا الوصف. ومع ذلك، لإنشاء صورة واقعية عالية الجودة، يجب أن تكون لديك خبرة في كتابة الطلبات. يمكن أن يكون ذلك أيضًا مرتبطًا بالنطاق إذا أردت إنشاء صورة ذات صلة بمجالات أعمال معيّنة، مثل البيع بالتجزئة والتصنيع وما إلى ذلك. ويمكنك تصميم طلب بسهولة أكبر من خلال تقديم مجموعة من الكلمات الرئيسية إلى نموذج Text Bison.

النهج العام هو كما يلي:

fbb3826592b2816d.png

واجهة مستخدم Gradio

Gradio هي مكتبة Python مفتوحة المصدر تتيح لك إنشاء مكوّنات واجهة مستخدم قابلة للتخصيص وسهلة الاستخدام بسرعة لنموذج تعلّم الآلة أو أي واجهة برمجة تطبيقات أو حتى دالة Python عشوائية باستخدام بضعة أسطر من الرمز. يمكنك دمج واجهة المستخدم الرسومية في Gradio مباشرةً في دفتر ملاحظات Jupyter أو مشاركتها كرابط مع أي مستخدم. يتوافق Gradio مع مجموعة كبيرة من أنواع الوسائط، بما في ذلك النصوص والصور والفيديوهات والمقاطع الصوتية. ويوفّر أيضًا عددًا من مكوّنات واجهة المستخدم المُعدّة مسبقًا، مثل حقول الإدخال والأزرار وأشرطة التمرير والقوائم المنسدلة.

ما ستنشئه

في هذا الدرس التطبيقي حول الترميز، ستفعّل تطبيق Gradio الذي سيؤدي ما يلي:

  • إنشاء طلب نصي باستخدام كلمات رئيسية أو عبارات يمكن أيضًا تعديل الطلب الذي تم إنشاؤه يدويًا.
  • أنشئ صورًا من الطلب الذي تم إنشاؤه في واجهة المستخدم.

ما ستتعلمه

  • كيفية استخدام التعلّم بدون أمثلة والتعلّم ببضع فُرَص مع نموذج text-bison بشكل آلي لإنشاء طلبات خاصة بـ Imagen لإنشاء الصور
  • كيفية إنشاء صور باستخدام نموذج Imagen من خلال واجهة برمجة التطبيقات والطلب
  • كيفية إنشاء تطبيق Gradio ونشره واختباره من دفتر ملاحظات Vertex AI Workbench

المتطلبات

  • الوصول إلى مشروع على Google Cloud Platform، مثل Cloud-llm-preview4
  • إذن إنشاء Vertex AI Workbench
  • تم تفعيل Vertex AI API.
  • متطلبات الاتصال بالشبكة في Gradio: عنوان URL علني للوصول إلى مثيل دفتر الملاحظات

2. الإعداد

إنشاء دفتر الملاحظات

  • تسجيل الدخول إلى المشروع
  • انتقِل إلى مساحة العمل من قائمة التنقّل اليمنى
  • ضِمن دفاتر الملاحظات التي يديرها المستخدم، أنشئ دفتر ملاحظات جديدًا باستخدام الخيارات التلقائية.
  • انقر على فتح JupyterLab بعد توفير الجهاز الظاهري.

ملاحظة: قد يستغرق بدء تشغيل دفتر الملاحظات بضع دقائق إذا كان في حالة متوقّفة.

الحصول على الرمز

وضعنا ملف الرمز هنا. يمكن استيراد دفتر الملاحظات هذا إلى بيئتك وتشغيله كما هو (باستثناء تغيير تفاصيل مشروعك).

3- تشغيل الرمز البرمجي

تثبيت/استيراد الموارد التابعة والمكتبات المطلوبة

  • تثبيت تطبيق Gradio
  • استورِد واجهات برمجة التطبيقات الخاصة بـ Vertex AI من أجل Text-Bison وImage Generation.
  • استورِد جميع المكتبات الأخرى المطلوبة.

إنشاء الطلبات باستخدام Text-Bison

تستخدِم هذه السمة بيانات أدخلها المستخدم تحتوي على كلمات رئيسية و/أو عبارات، أي قائمة قيم مفصولة بفاصلة من الكلمات الرئيسية أو العبارات التي يمكن استخدامها لإنشاء جملة تصف الصورة المطلوبة.

على سبيل المثال، الشخصية والموضوع والخلفية والإضاءة والأوصاف الأخرى

في ما يلي الدالة التي تنشئ الطلب:

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 وZero-shot.

**# Few Shot Prompt used in the code**

few_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:

"""

# Zero Shot Prompt used in the code

prompt = f"""أنت خبير في كتابة الطلبات لنماذج إنشاء الصور. ساعِدني في كتابة قائمة بطلبات ذات صلة بنموذج إنشاء الصور، مع تضمين الكلمات التالية تحديدًا: "{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 = "الطلب: شابة تعرض وتبيع شجرة عيد الميلاد طازجة وغير مزيّنة من مجموعة أشجار. إضاءة باردة، صورة عالية الجودة ومفصّلة التقطها مصوّر محترف من بعيد".

negative_prompt = "وجوه مشوّهة وغير جذابة"

generated_images_list = image_generation(user_prompt,negative_prompt)

#عرض إحدى الصور التي تم إنشاؤها

generated_images_list[0].show()

الناتج -

db04a6bfdd78693b.jpeg

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

with gr.Row():‎

    btn = gr.Button("Submit")

with 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 عدة مكوّنات، مثل Image وVideo وSlider وDropdown وTextbox وRadio وخيارات أخرى. تمنح هذه المكوّنات المطوّرين المرونة والتحكّم في كيفية قبول المدخلات من المستخدمين وإدخالها إلى Test-bison أو Imagen أو أي نموذج آخر من نماذج تعلُّم الآلة.

في هذا المشروع، يتم إنشاء التطبيق باستخدام الكتل لإضافة المرونة والتعقيد

تنتقل البيانات إلى التطبيق. بالإضافة إلى Blocks، تتوفّر عدة مكوّنات Gradio

المستخدمة، بما في ذلك:

في ما يلي مقتطف الرمز المستخدَم لإنشاء صور من طلب إدخال وطلب سلبي:

 #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.

70331c9645b1e91b.png

في ما يلي لقطة شاشة لـ "إنشاء الصور" على تطبيق Gradio.

a7261e8fafab7073.png

بعض الأمثلة:

المثال 1 -

[الصورة على اليمين] الطلب (باستخدام كلمات رئيسية بسيطة كطلبات) : صديقان يستمتعان برحلة بحرية.

[الصورة على اليسار] الطلب (باستخدام الطلبات التي أنشأها Text-Bison) : صورة لشابَين يصطادان السمك على متن قارب محاط بأشجار داكنة في الغابة. رجال يرتدون قمصانًا ويقفون على متن قارب إضاءة طبيعية، جودة عالية، صورة بدقة 4K تم التقاطها بواسطة مصوّر محترف

c2f5fabd10baf42.jpeg abc9b8204a9fdf7f.jpeg

المثال 2 -

[الصورة على اليمين] الطلب ((باستخدام كلمات رئيسية بسيطة كطلبات)) : شجرة عيد الميلاد

[الصورة على اليسار] الطلب (باستخدام الطلبات التي أنشأها Text-Bison) : شجرة عيد الميلاد في غرفة تحتوي على مصباح وأثاث الشجرة مزيّنة بالأضواء والزخارف. تم وضعها بالقرب من نافذة، ويظهر جدار في الخلفية. إضاءة دافئة، جودة عالية، صورة بنطاق عالي الديناميكية التقطها مصوّر محترف من بعيد

f10cf9f52ffd92c7.jpeg cce36df7a439b309.jpeg

5- الإزالة

لتنظيف الموارد، اتّبِع الخطوات التالية:

  • أوقِف تطبيق Gradio.
  • إيقاف دفتر ملاحظات Workbench أو حذفه

6. تهانينا

تهانينا، لقد نشرت تطبيق Gradio بنجاح لإنشاء الطلبات والصور باستخدام Google Text-Bison API وImagen API.