1- مقدمة
تاريخ آخر تعديل: 2023-10-12
إنشاء الصور باستخدام Imagegen
Google Imagen هو نموذج لغوي كبير قوي من Google يمكنه إنشاء صور واقعية وإبداعية من الأوصاف النصية. Imagen على Vertex AI يتيح للمستخدمين إنشاء منتجات الجيل التالي من الذكاء الاصطناعي التي تحوّل خيال المستخدم إلى مواد عرض مرئية عالية الجودة في ثوانٍ. بالإضافة إلى إنشاء الصور من النص، يتيح أيضًا تعديل الصور من خلال الطلبات النصية، وإضافة تعليقات توضيحية للصور، والإجابة عن الأسئلة المرئية، وضبط نموذج الصور استنادًا إلى الموضوع والنمط.
إنشاء الطلبات
لإنشاء صورة باستخدام Imagen، عليك تقديم وصف نصي للصورة يُعرف باسم الطلب، ويتم إنشاء الصورة باستخدام هذا الوصف. ومع ذلك، لإنشاء صورة واقعية عالية الجودة، يجب أن تكون لديك خبرة في إنشاء الطلبات. قد يعتمد ذلك أيضًا على المجال إذا أردت إنشاء صورة ذات صلة بمجالات تجارية معيّنة، مثل البيع بالتجزئة أو التصنيع وما إلى ذلك. هناك طريقة أسهل لتصميم طلب وهي تقديم مجموعة من الكلمات الرئيسية إلى نموذج Text Bison.
النهج العام هو كما يلي:

واجهة مستخدم Gradio
Gradio هي مكتبة Python مفتوحة المصدر تتيح لك إنشاء مكوّنات واجهة مستخدم قابلة للتخصيص وسهلة الاستخدام بسرعة لنموذج تعلُّم الآلة أو أي واجهة برمجة تطبيقات أو حتى دالة Python عشوائية باستخدام بضعة أسطر من التعليمات البرمجية. يمكنك دمج واجهة المستخدم الرسومية في Gradio مباشرةً في دفتر ملاحظات Jupyter أو مشاركتها كرابط مع أي مستخدم. تتوافق Gradio مع مجموعة كبيرة من أنواع الوسائط، بما في ذلك النصوص والصور والفيديوهات والمقاطع الصوتية. كما توفّر عددًا من مكوّنات واجهة المستخدم الجاهزة، مثل حقول الإدخال والأزرار وأشرطة التمرير والقوائم المنسدلة.
ما ستنشئونه
في هذا الدرس التطبيقي حول الترميز، ستنشرون تطبيق Gradio الذي سيقوم بما يلي:
- إنشاء طلب نصي باستخدام كلمات رئيسية أو عبارات يمكن أيضًا تعديل الطلب الذي تم إنشاؤه يدويًا.
- إنشاء صور من الطلب الذي تم إنشاؤه على واجهة المستخدم
ما ستتعلمونه
- كيفية استخدام التعلُّم بدون أمثلة والتعلّم ببضع فُرَص مع نموذج Text-Bison برمجيًا لإنشاء طلبات خاصة بـ Imagen لإنشاء الصور
- كيفية إنشاء الصور باستخدام نموذج Imagen من خلال واجهة برمجة التطبيقات والطلب
- كيفية إنشاء تطبيق Gradio ونشره واختباره من دفتر ملاحظات Vertex AI Workbench
المتطلبات
- الوصول إلى مشروع على Google Cloud، مثل "Cloud-llm-preview4"
- إذن إنشاء Vertex AI Workbench
- تفعيل واجهة برمجة التطبيقات Vertex AI API
- متطلبات الشبكة لـ Gradio: عنوان URL علني للوصول إلى مثيل دفتر الملاحظات
2. الإعداد
إنشاء دفتر الملاحظات
- تسجيل الدخول إلى المشروع
- الانتقال إلى Workbench من قائمة التنقّل اليمنى
- ضمن "USER-MANAGED NOTEBOOKS"، إنشاء دفتر ملاحظات جديد باستخدام الخيارات التلقائية
- النقر على OPEN JUPYTERLAB بعد توفير المثيل
ملاحظة: قد يستغرق بدء دفتر الملاحظات بضع دقائق إذا كان في حالة متوقفة.
الحصول على التعليمات البرمجية
وضعنا ملف التعليمات البرمجية هنا. يمكن استيراد دفتر الملاحظات هذا في بيئتكم وتشغيله كما هو (باستثناء تغيير تفاصيل مشروعكم).
3- تشغيل التعليمات البرمجية
تثبيت التبعيات والمكتبات المطلوبة أو استيرادها
- تثبيت تطبيق Gradio
- استيراد واجهات برمجة التطبيقات Vertex AI API لـ Text-Bison وإنشاء الصور
- استيراد جميع المكتبات المطلوبة الأخرى
إنشاء الطلبات باستخدام 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_prompt = f"""You are an expert in writing prompts for Image Generation Models. Using the provided phrases and keywords, concatenate them and add on some realistic details to generate logical and Meaningful prompt that can be used for image generation.
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:
"""
# الطلب بدون أمثلة المستخدَم في التعليمات البرمجية
prompt = f"""You are an expert in writing prompts for Image Generation Models. ساعدني في كتابة قائمة من الطلبات الهادفة لنموذج إنشاء الصور، مع تضمين الكلمات التالية على وجه التحديد: "{params_list_str}". Remember to include these words in the prompt and make the prompt meaningful."""
إنشاء الصور باستخدام 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. Cold Lighting, High Quality and detailed Image Taken By Professional Photographer from far."
negative_prompt = "Distorted and unattractive faces"
generated_images_list = image_generation(user_prompt,negative_prompt)
#show one of the generated image
generated_images_list[0].show()
الناتج -

4- نشر تطبيق Gradio
يتم استخدام Gradio للواجهة الأمامية حيث يمكن للمستخدمين إدخال الكلمات الرئيسية وإنشاء طلبات منظَّمة، ويمكن استخدام هذه الطلبات مباشرةً أو تعديلها أكثر من قِبل المستخدم ثم تقديمها إلى Imagen لإنشاء الصور وفقًا للبيانات التي تم إدخالها. Gradio هي مكتبة Python يمكن استخدامها لإنشاء واجهات مستخدم لنماذج تعلُّم الآلة. بالنسبة إلى هذا التطبيق، يتم استخدام Blocks لإضافة المرونة وتدفقات البيانات المعقدة إلى هذا التطبيق. توفّر Blocks إدارة تخطيط التطبيق باستخدام الصفوف والأعمدة:
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 مكوّنات متعددة، مثل الصورة والفيديو وشريط التمرير والقائمة المنسدلة ومربّع النص والزر الدائري وخيارات أخرى. تمنح هذه المكوّنات المطوّرين المرونة والتحكّم في كيفية قبول الإدخالات من المستخدمين وتقديمها إلى Test-Bison أو Imagen أو أي نموذج آخر لتعلُّم الآلة.
بالنسبة إلى هذا المشروع، تم إنشاء التطبيق باستخدام Blocks لإضافة المرونة والتعامل مع البيانات المعقدة
تدفقات البيانات إلى التطبيق. بالإضافة إلى Blocks، يتم استخدام مكوّنات Gradio متعددة
بما في ذلك:
- الصفوف والأعمدة للتخطيطات المناسبة
- الزر، مربّع النص، القائمة المنسدلة وشريط التمرير لتحقيق الوظائف المطلوبة وسهولة الاستخدام
- مكوّن الصورة لعرض النتائج
- أدوات مساعدة أخرى، مثل EventData وتعديل لدعم التغييرات الديناميكية في واجهة المستخدم
في ما يلي مقتطف من التعليمات البرمجية المستخدَمة لإنشاء الصور من الإدخال والطلب السلبي:
#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.

بعض الأمثلة -
المثال 1 -
[الصورة اليمنى] الطلب (باستخدام كلمات رئيسية بسيطة كطلبات) : A couple of friends boating.
[الصورة اليسرى] الطلب (باستخدام الطلبات التي تم إنشاؤها بواسطة Text-Bison) : A photo of 2 young men fishing on a boat surrounded by dark trees in the woods. Men are wearing a shirt and are standing on a boat. Natural Lighting, High Quality, 4K Photo photographed by Professional Photographer.

المثال 2 -
[الصورة اليمنى] الطلب ((باستخدام كلمات رئيسية بسيطة كطلبات)) : A Christmas tree
[الصورة اليسرى] الطلب (باستخدام الطلبات التي تم إنشاؤها بواسطة Text-Bison) : A Christmas tree in a room with a lamp and furniture. The tree is decorated with lights and ornaments. It is placed near a window, and there is a wall visible in the background. Warm Lighting, High Quality, HDR Photo photographed by Professional Photographer taken from far.

5- الإزالة
لإزالة مواردكم،
- أوقفوا تطبيق Gradio.
- أوقفوا دفتر ملاحظات Workbench أو احذفوه.
6- تهانينا
تهانينا، لقد نشرتم بنجاح تطبيق Gradio لإنشاء الطلبات والصور باستخدام Google Text-Bison API وImagen API.