1. مقدمة
تاريخ التعديل الأخير: 12/10/2023
إنشاء صور لإنشاء الصور
Google Imagen هو نموذج لغوي كبير فعّال من Google يمكنه إنشاء صور واقعية ومبتكرة من أوصاف النصوص. تتيح أداة Imagen على Vertex AI للمستخدمين إنشاء منتجات من الجيل التالي للذكاء الاصطناعي (AI) تحوِّل خيال المستخدمين إلى مواد عرض مرئية عالية الجودة في ثوانٍ. بالإضافة إلى ميزة "إنشاء الصور" من خلال النص، تتيح هذه الميزة أيضًا تعديل الصور من خلال الطلبات النصية و"النسخ النصي التلقائي" و"الأسئلة والأجوبة المرئية" و"الموضوعات" ضبط نموذج الصور المستند إلى النمط
إنشاء طلبات
لإنشاء صورة باستخدام Imagen، عليك تقديم وصف نصي للصورة المعروفة باسم الطلب، والذي يتم من خلاله إنشاء الصورة. ومع ذلك، لإنشاء صورة واقعية عالية الجودة، يجب طلب الخبرة. ويمكن أن يعتمد ذلك أيضًا على النطاق إذا كنت تريد إنشاء صورة مرتبطة بمجالات أنشطة تجارية محدّدة، مثل البيع بالتجزئة والتصنيع وما إلى ذلك. ولتصميم الطلبات، يمكنك بسهولة إضافة مجموعة من الكلمات الرئيسية إلى نموذج Text Bison.
ويكون النهج العام على النحو التالي -
واجهة مستخدم G الاسم
Gراديو هو مكتبة مفتوحة المصدر في Python تتيح لك إنشاء مكونات واجهة مستخدم سهلة الاستخدام وقابلة للتخصيص لنموذج تعلُّم الآلة الخاص بك أو أي واجهة برمجة تطبيقات أو حتى دالة بايثون عشوائية باستخدام بضعة أسطر من الرموز. يمكنك دمج واجهة المستخدم الرسومية Gراديو مباشرة في دفتر ملاحظات Jupyter أو مشاركتها كرابط مع أي شخص. يتوافق GRadio مع مجموعة كبيرة من أنواع الوسائط، بما في ذلك النصوص والصور والفيديوهات والصوت. كما توفر عددًا من مكونات واجهة المستخدم المنشأة مسبقًا، مثل حقول الإدخال والأزرار وأشرطة التمرير والقوائم المنسدلة.
ما الذي ستنشئه
في هذا الدرس التطبيقي حول الترميز، ستنشر تطبيق Gaوري الذي سينفّذ ما يلي:
- إنشاء طلب نصي باستخدام كلمات رئيسية أو عبارات يمكن أيضًا تعديل الطلب الذي تم إنشاؤه يدويًا.
- يمكنك إنشاء صور من الطلب الذي تم إنشاؤه على واجهة المستخدم.
المعلومات التي ستطّلع عليها
- طريقة استخدام تقنيات التعلّم المستندة إلى اللقطات الخالية من اللقطات أو اللقطات القصيرة باستخدام نموذج نص بيسون آليًا لإنشاء طلبات خاصة بالصور من أجل إنشاء الصور
- كيفية إنشاء صور باستخدام نموذج Imagen عبر واجهة برمجة التطبيقات وموجّه الطلب.
- طريقة إنشاء تطبيق Gvideo ونشره واختباره من خلال ورقة الملاحظات على منصة Vertex AI
المتطلبات
- الوصول إلى مشروع Google Cloud Platform، مثل "Cloud-llm-preview4"
- الوصول إلى منصة Vertex AI Workbench
- تم تفعيل Vertex AI API.
- متطلبات الاتصال بالشبكات في Gراديو: عنوان URL عام للدخول إلى مثيل ورقة الملاحظات
2. بدء الإعداد
إنشاء ورقة الملاحظات
- تسجيل الدخول إلى المشروع
- انتقِل إلى workbench (طاولة العمل) من قائمة التنقّل اليمنى.
- ضمن "المفكرات التي يديرها المستخدم"، أنشئ ورقة ملاحظات جديدة باستخدام الخيارات التلقائية.
- انقر على "OPEN JUPYTERLAB" بعد توفير المثيل.
ملاحظة: قد يستغرق بدء تشغيل ورقة الملاحظات بضع دقائق إذا كانت في حالة توقف.
الحصول على الرمز
لقد وضعنا ملف التعليمات البرمجية هنا. يمكن استيراد ورقة الملاحظات هذه في بيئتك وتشغيلها كما هي (باستثناء تغيير تفاصيل مشروعك).
3- تشغيل الرمز البرمجي
تثبيت/استيراد التبعيات والمكتبات المطلوبة
- تثبيت تطبيق Gراديو
- يمكنك استيراد واجهات برمجة تطبيقات Vertex AI لكل من Text-Bison وImage Generation.
- استيراد جميع المكتبات الأخرى المطلوبة
إنشاء الطلبات باستخدام Text-Bison
تستخدم إدخال المستخدم يحتوي على كلمات رئيسية و/أو عبارة، أي قائمة مفصولة بفواصل من الكلمات الرئيسية أو العبارات التي يمكن استخدامها لإنشاء جملة تصف الصورة المطلوبة المراد إنشاؤها.
على سبيل المثال - الشخصية، والموضوع، والخلفية، والإضاءة، وغيرها من الأوصاف.
يتم تقديم الدالة التي تنشئ الطلب على النحو التالي:
ⰃdefPrompt_generation(الشخصية،الإشارة، والمظهر، والإضاءة، والجودة، plus_desc):
model = TextGenerationModel.from_pretrained("text-bison")
Reply_few_shot = model.predict()
few_shot_prompt,
**parameters
)
response_single_shot = model.predict(
prompt,
**parameters
)
طلب باستخدام ميزة "لقطات سريعة" و"بدون لقطة"
إنّ المطالبة بدون لقطة هي أسلوب لإنشاء النصوص حيث لا يتم توفير أي سياق أو أمثلة للنموذج لإنشاء نص منها. وقد يكون هذا أمرًا صعبًا، إذ يجب أن يعتمد النموذج على معرفته الخاصة لإنتاج نص متماسك وغني بالمعلومات.
ومع ذلك، يمكن أن تكون المطالبة المستندة إلى لقطة صفرية أيضًا إبداعية للغاية، حيث لا يتقيد النموذج بأي أمثلة موجودة مسبقًا.
طرح عدد قليل من اللقطات هو أسلوب لإنشاء النصوص حيث يتم إعطاء النموذج عددًا صغيرًا من الأمثلة لإنشاء نص منها. وقد يكون ذلك أسهل من تقديم الطلبات بدون لقطة، لأنّ النموذج يتضمّن بعض الإرشادات حول ما يجب إنشاؤه. مع ذلك، يمكن أن يكون تقديم الطلبات باستخدام لقطات قليلة أمرًا محدودًا أيضًا، لأنّ النموذج قد يتمكّن فقط من إنشاء نص مشابه للأمثلة التي تمّ تقديمها له.
في ما يلي رمز نموذجي لمطالبات "اللقطات القليلة" و"اللقطة الصفرية".
**# استخدام طلب بضع لقطات في الرمز**
بضع_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:
"""
# استخدام طلب "بدون لقطة" في الرمز البرمجي
prompt = f"""أنت خبير في كتابة الطلبات الخاصة بنماذج إنشاء الصور. ساعِدني في كتابة قائمة بالطلبات المفيدة لنموذج إنشاء الصور، بما في ذلك الكلمات التالية تحديدًا: "{params_list_str}". تذكَّر تضمين هذه الكلمات في الطلب وجعل الطلب مفيدًا."""
إنشاء الصور باستخدام Imagen
يتم استخدام طلب من إدخال المستخدم وطلب إدخال سالب(اختياري) مع تقديم الخلاصات نفسها للنموذج (imagegeneration@002).
def image_generation_complete(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 استيراد ImageGenerationModels
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: امرأة شابة تعرض شجرة عيد ميلاد طازجة غير مزخرفة من مجموعة من الأشجار. إضاءة باردة، وصورة عالية الجودة ومفصّلة، تم التقاطها من قبل مصور محترف من بعيد".
negative_prompt = "الوجوه المشوهة وغير الجذابة"
export_images_list = image_generation(user_prompt,negative_prompt)
#show إحدى الصور التي تم إنشاؤها
generated_images_list[0].show()
الإخراج -
4. نشر تطبيق Gراديو
يتم استخدام Gراديو الواجهة الأمامية حيث يمكن للمستخدمين إدخال الكلمات الرئيسية وإنشاء طلبات منظَّمة ويمكن استخدام هذه الطلبات مباشرةً أو تعديلها بشكل أكبر بواسطة المستخدم ثم إدخالها في Imagen لإنشاء صور وفقًا للإدخالات. تُعد Gراديو مكتبة بايثون يمكن استخدامها لإنشاء واجهات مستخدم لنماذج التعلم الآلي. في هذا التطبيق، يتم استخدام عناصر Blocks لإضافة المرونة وتدفقات البيانات المعقّدة إلى هذا التطبيق. يوفر القوالب إدارة تنسيق التطبيق باستخدام الصفوف والأعمدة:
with 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)
r.click(fn=prompt_generation, enters=[شخصية، إشارات، مظهر، صورة_modifiers، جودة_تعديل
للتعامل مع إدخالات المستخدم ومخرجاته، يوفر Gراديو مكونات متعددة مثل الصورة والفيديو وشريط التمرير والقائمة المنسدلة ومربع النص والراديو وخيارات أخرى. وتمنح هذه المكوّنات المطوّرين المرونة والتحكم في طريقة قبول المدخلات من المستخدمين وإدخالها إلى Test-bison أو imagen أو أي نموذج آخر من نماذج تعلُّم الآلة.
بالنسبة إلى هذا المشروع، يتم إنشاء التطبيق باستخدام Blocks لإضافة المرونة والتعقيد.
وتدفق البيانات إلى التطبيق. بالإضافة إلى الكتل، يتم إنشاء عدة مكونات Gراديو
المستخدمة، بما في ذلك:
- الصفوف والأعمدة للتنسيقات المناسبة:
- Button وTextbox وقائمة منسدلة وشريط التمرير لتحقيق الوظائف المطلوبة وسهولة الاستخدام
- مكوّن الصور لعرض النتائج.
- أدوات مساعدة أخرى مثل EventData وتحديث لإتاحة التغييرات الديناميكية على واجهة المستخدم
في ما يلي مقتطف رمز يتم استخدامه لإنشاء صور من مصادر الإدخال والطلبات السلبية:
#Image Generation الجزء
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.
في ما يلي لقطة شاشة من "إنشاء الطلب" في تطبيق Gراديو.
في ما يلي لقطة شاشة لميزة "إنشاء الصور" في تطبيق Gراديو.
في ما يلي بعض الأمثلة:
المثال 1 -
[الصورة اليسرى] طلب (استخدام كلمات رئيسية بسيطة كمطالبات) : صديقان يركبان القوارب.
[الصورة على اليمين] طلب (باستخدام طلبات من إنشاء Text-Bison) : صورة لشابَين يصطادان على قارب تحيط به أشجار داكنة في الغابة. يرتدي الرجال قميصًا ويقفون على متن قارب. إضاءة طبيعية، جودة عالية، صورة بدقة 4K تم التقاطها من قِبل مصوّر محترف.
المثال 2 -
[الصورة اليسرى] رسالة مطالبة ((استخدام كلمات رئيسية بسيطة كطلبات) : شجرة عيد الميلاد
[الصورة اليمنى] طلب (باستخدام طلبات من إنشاء Text-Bison) : شجرة عيد الميلاد في غرفة فيها مصباح وأثاث. تُزين الشجرة بالأضواء والزينة. يتم وضعه بالقرب من نافذة، ويظهر جدار في الخلفية. صورة إضاءة دافئة، وجودة عالية، وصورة HDR تم التقاطها من قِبل مصوّر محترف تم التقاطه من مسافة بعيدة.
5- الإزالة
لتنظيف مواردك،
- أوقِف تطبيق gراديو.
- قم بإيقاف/حذف دفتر ملاحظات Workbench.
6- تهانينا
تهانينا، لقد نجحت في نشر تطبيق Gراديو لإنشاء الطلبات والصور باستخدام واجهة برمجة تطبيقات Google Text-Bison وImagen API.