توضّح هذه الصفحة كيفية استخدام ميزة التخصيص من Imagen إلى تعديل الصور أو إنشائها استنادًا إلى موضوع محدّد باستخدام حِزم تطوير البرامج (SDK) الخاصة بـ Firebase AI Logic.
طريقة العمل: يمكنك تقديم طلب نصي وصورة مرجعية واحدة على الأقل تعرض موضوعًا معيّنًا (مثل منتج أو شخص أو حيوان أليف). يستخدم النموذج هذه المدخلات لإنشاء صورة جديدة استنادًا إلى العنصر المحدّد في الصور المرجعية.
على سبيل المثال، يمكنك أن تطلب من النموذج تطبيق نمط رسوم متحركة على صورة طفل أو تغيير لون دراجة في صورة.
قبل البدء
لا تتوفّر هذه الميزة إلا عند استخدام Vertex AI Gemini API كموفّر لواجهة برمجة التطبيقات. |
إذا لم يسبق لك إجراء ذلك، أكمل دليل بدء الاستخدام الذي يوضّح كيفية إعداد مشروعك على Firebase وربط تطبيقك بـ Firebase وإضافة حزمة تطوير البرامج (SDK) وتهيئة خدمة الخلفية لمزوّد واجهة برمجة التطبيقات الذي اخترته وإنشاء مثيل ImagenModel
.
الطُرز التي تتيح هذه الإمكانية
توفّر Imagen إمكانية تعديل الصور من خلال نموذج capability
:
imagen-3.0-capability-001
يُرجى العِلم أنّه بالنسبة إلى طُرز Imagen، لا يتوفّر الموقع الجغرافي global
.
إرسال طلب تخصيص الموضوع
يعرض المثال التالي طلب تخصيص موضوع يطلب من النموذج إنشاء صورة جديدة استنادًا إلى الصورة المرجعية المقدَّمة (في هذا المثال، قطة). بما أنّ القطة هي حيوان، فإنّها تستخدم نوع الموضوع ImagenSubjectReferenceType.ANIMAL
.
إذا كان موضوعك شخصًا أو منتجًا، يمكنك أيضًا استخدام هذا المثال ولكن مع إجراء التغييرات التالية:
إذا كان موضوعك شخصًا، استخدِم نوع الموضوع
ImagenSubjectReferenceType.PERSON
. يمكنك إرسال هذا النوع من الطلبات مع صورة تحكّم في شبكة الوجوه أو بدونها لتوجيه عملية إنشاء الصور بشكل أكبر.إذا كان موضوعك منتجًا، استخدِم نوع الموضوع
ImagenSubjectReferenceType.PRODUCT
.
يمكنك الاطّلاع على نماذج الطلبات لاحقًا في هذه الصفحة للتعرّف على كيفية كتابة الطلبات وكيفية استخدام الصور المرجعية فيها.
Swift
لا تتوافق لغة Swift مع تعديل الصور باستخدام نماذج Imagen. يُرجى التحقّق مجددًا في وقت لاحق من هذا العام.
Kotlin
// Using this SDK to access Imagen models is a Preview release and requires opt-in
@OptIn(PublicPreviewAPI::class)
suspend fun customizeImage() {
// Initialize the Vertex AI Gemini API backend service
// Optionally specify the location to access the model (for example, `us-central1`)
val ai = Firebase.ai(backend = GenerativeBackend.vertexAI(location = "us-central1"))
// Create an `ImagenModel` instance with an Imagen "capability" model
val model = ai.imagenModel("imagen-3.0-capability-001")
// This example assumes 'referenceImage' is a pre-loaded Bitmap.
// In a real app, this might come from the user's device or a URL.
val referenceImage: Bitmap = TODO("Load your reference image Bitmap here")
// Define the subject reference using the reference image.
val subjectReference = ImagenSubjectReference(
image = referenceImage,
referenceID = 1,
description = "cat",
subjectType = ImagenSubjectReferenceType.ANIMAL
)
// Provide a prompt that describes the final image.
// The "[1]" links the prompt to the subject reference with ID 1.
val prompt = "A cat[1] flying through outer space"
// Use the editImage API to perform the subject customization.
// Pass the list of references, the prompt, and an editing configuration.
val editedImage = model.editImage(
references = listOf(subjectReference),
prompt = prompt,
config = ImagenEditingConfig(
editSteps = 50 // Number of editing steps, a higher value can improve quality
)
)
// Process the result
}
Java
// Initialize the Vertex AI Gemini API backend service
// Optionally specify the location to access the model (for example, `us-central1`)
// Create an `ImagenModel` instance with an Imagen "capability" model
ImagenModel imagenModel = FirebaseAI.getInstance(GenerativeBackend.vertexAI("us-central1"))
.imagenModel(
/* modelName */ "imagen-3.0-capability-001");
ImagenModelFutures model = ImagenModelFutures.from(imagenModel);
// This example assumes 'referenceImage' is a pre-loaded Bitmap.
// In a real app, this might come from the user's device or a URL.
Bitmap referenceImage = null; // TODO("Load your image Bitmap here");
// Define the subject reference using the reference image.
ImagenSubjectReference subjectReference = new ImagenSubjectReference.Builder()
.setImage(referenceImage)
.setReferenceID(1)
.setDescription("cat")
.setSubjectType(ImagenSubjectReferenceType.ANIMAL)
.build();
// Provide a prompt that describes the final image.
// The "[1]" links the prompt to the subject reference with ID 1.
String prompt = "A cat[1] flying through outer space";
// Define the editing configuration.
ImagenEditingConfig imagenEditingConfig = new ImagenEditingConfig.Builder()
.setEditSteps(50) // Number of editing steps, a higher value can improve quality
.build();
// Use the editImage API to perform the subject customization.
// Pass the list of references, the prompt, and an editing configuration.
Futures.addCallback(model.editImage(Collections.singletonList(subjectReference), prompt, imagenEditingConfig), new FutureCallback<ImagenGenerationResponse>() {
@Override
public void onSuccess(ImagenGenerationResponse result) {
if (result.getImages().isEmpty()) {
Log.d("TAG", "No images generated");
}
Bitmap bitmap = result.getImages().get(0).asBitmap();
// Use the bitmap to display the image in your UI
}
@Override
public void onFailure(Throwable t) {
// ...
}
}, Executors.newSingleThreadExecutor());
Web
لا يمكن تعديل الصور باستخدام نماذج Imagen في تطبيقات الويب. يُرجى التحقّق مجددًا في وقت لاحق من هذا العام.
Dart
import 'dart:typed_data';
import 'package:firebase_ai/firebase_ai.dart';
import 'package:firebase_core/firebase_core.dart';
import 'firebase_options.dart';
// Initialize FirebaseApp
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform,
);
// Initialize the Vertex AI Gemini API backend service
// Optionally specify a location to access the model (for example, `us-central1`)
final ai = FirebaseAI.vertexAI(location: 'us-central1');
// Create an `ImagenModel` instance with an Imagen "capability" model
final model = ai.imagenModel(model: 'imagen-3.0-capability-001');
// This example assumes 'referenceImage' is a pre-loaded Uint8List.
// In a real app, this might come from the user's device or a URL.
final Uint8List referenceImage = Uint8List(0); // TODO: Load your reference image data here
// Define the subject reference using the reference image.
final subjectReference = ImagenSubjectReference(
image: referenceImage,
referenceId: 1,
description: 'cat',
subjectType: ImagenSubjectReferenceType.animal,
);
// Provide a prompt that describes the final image.
// The "[1]" links the prompt to the subject reference with ID 1.
final prompt = "A cat[1] flying through outer space.";
try {
// Use the editImage API to perform the subject customization.
// Pass the list of references, the prompt, and an editing configuration.
final response = await model.editImage(
[subjectReference],
prompt,
config: ImagenEditingConfig(
editSteps: 50, // Number of editing steps, a higher value can improve quality
),
);
// Process the result.
if (response.images.isNotEmpty) {
final editedImage = response.images.first.bytes;
// Use the editedImage (a Uint8List) to display the image, save it, etc.
print('Image successfully generated!');
} else {
// Handle the case where no images were generated.
print('Error: No images were generated.');
}
} catch (e) {
// Handle any potential errors during the API call.
print('An error occurred: $e');
}
Unity
لا تتوافق نماذج Imagen مع Unity عند تعديل الصور. يُرجى التحقّق مجددًا في وقت لاحق من هذا العام.
نماذج الطلبات
في الطلب، يمكنك تقديم صور مرجعية (بحد أقصى 4 صور) من خلال تحديد
ImagenSubjectReference
حيث تحدّد معرّفًا مرجعيًا لصورة
(ويمكنك اختياريًا تقديم وصف للعنصر أيضًا). يُرجى العِلم أنّه يمكن أن تتشارك صور متعددة رقم التعريف المرجعي نفسه (على سبيل المثال، صور متعددة للقطة نفسها).
بعد ذلك، عند كتابة الطلب، يمكنك الرجوع إلى أرقام التعريف هذه. على سبيل المثال، يمكنك استخدام
[1]
في الطلب للإشارة إلى الصور التي تحمل رقم التعريف المرجعي 1
. إذا قدّمت وصفًا للموضوع، يمكنك أيضًا تضمينه في الطلب لتسهيل قراءته.
يوضّح الجدول التالي نماذج الطلبات التي يمكن أن تكون نقطة بداية لكتابة طلبات مخصّصة استنادًا إلى موضوع معيّن (مثل منتج أو شخص أو حيوان أليف).
حالة الاستخدام | الصور المرجعية | نموذج الطلب | مثال |
---|---|---|---|
تعديل أسلوب صورة المنتج - إعلان | صورة العنصر الأساسي (ما يصل إلى 4) | أنشئ صورة حول SUBJECT_DESCRIPTION [1] لتتطابق مع الوصف: ${PROMPT} |
أنشئ صورة حول Luxe Elixir hair oil, golden liquid in glass bottle [1] لتتطابق مع الوصف التالي: صورة مقرّبة بإضاءة عالية ليد امرأة تحمل Luxe Elixir hair oil, golden liquid in glass bottle [1] على خلفية بيضاء سادة. يد المرأة مضاءة بشكل جيد، والتركيز دقيق على الزجاجة، مع عمق مجال ضحل يموّه الخلفية ويبرز المنتج. الإضاءة ناعمة ومنتشرة، ما يخلق توهجًا خفيفًا حول الزجاجة واليد. التصميم العام بسيط وأنيق، ما يبرز المظهر الفاخر للمنتج. |
تغيير سمة أسلوب صورة المنتج | صورة العنصر الأساسي (ما يصل إلى 4) | أنشئ صورة SUBJECT_DESCRIPTION ولكن ${PROMPT} |
أنشئ صورة Seiko watch [1] باللون الأزرق. |
تطبيق أسلوب على صورة شخص بدون إدخال شبكة الوجه | صورة العنصر الأساسي (ما يصل إلى 4) | أنشئ صورة عن SUBJECT_DESCRIPTION [1] لتتطابق مع الوصف: صورة شخصية لـ SUBJECT_DESCRIPTION [1] ${PROMPT} | أنشئ صورة عن a woman with short hair[1] تتطابق مع الوصف: صورة بورتريه لـ a woman with short hair[1] بنمط رسم كرتوني ثلاثي الأبعاد مع خلفية مموّهة. شخصية لطيفة وجميلة، بوجه مبتسم، تنظر إلى الكاميرا، بألوان الباستيل ... |
تطبيق أسلوب على صورة شخص بدون إدخال شبكة الوجه | صورة العنصر الأساسي (ما يصل إلى 4) | أنشئ صورة STYLE_DESCRIPTION [2] حول SUBJECT_DESCRIPTION [1] لتتطابق مع الوصف: صورة شخصية لـ SUBJECT_DESCRIPTION [1] STYLE_PROMPT | أنشئ صورة 3d-cartoon style [2] حول a woman with short hair [1] لتتطابق مع الوصف: صورة بورتريه لـ a woman with short hair [1] بنمط رسم كرتوني ثلاثي الأبعاد مع خلفية مموّهة. شخصية لطيفة وجميلة، بوجه مبتسم، تنظر إلى الكاميرا، بألوان الباستيل ... |
تعديل نمط صورة شخص باستخدام بيانات شبكة الوجه |
صورة العنصر الأساسي (حتى 3 صور) صورة التحكّم في شبكة الوجه (1) |
أنشئ صورة SUBJECT_DESCRIPTION [1] باستخدام Face mesh from the control image [2]. ${PROMPT} | أريد إنشاء صورة the person [1] باستخدام face mesh from the control image [2]. يجب أن ينظر الشخص إلى الأمام مباشرةً بتعبير محايد. يجب أن تكون الخلفية ... |
تعديل نمط صورة شخص باستخدام بيانات شبكة الوجه |
صورة العنصر الأساسي (حتى 3 صور) صورة التحكّم في شبكة الوجه (1) |
أنشئ صورة عن SUBJECT_DESCRIPTION [1] بوضعية CONTROL_IMAGE [2] لتتطابق مع الوصف: صورة شخصية SUBJECT_DESCRIPTION [1] ${PROMPT} | أنشئ صورة عن a woman with short hair [1] في وضعية control image [2] لتتطابق مع الوصف: صورة بورتريه لـ a woman with short hair [1] بأسلوب رسوم متحركة ثلاثية الأبعاد مع خلفية مموّهة. شخصية لطيفة وجميلة، بوجه مبتسم، تنظر إلى الكاميرا، بألوان الباستيل ... |
تعديل نمط صورة شخص باستخدام بيانات شبكة الوجه |
صورة العنصر الأساسي (حتى 3 صور) صورة التحكّم في شبكة الوجه (1) |
أنشئ صورة STYLE_DESCRIPTION [3] حول SUBJECT_DESCRIPTION [1] في وضع CONTROL_IMAGE [2] لتتطابق مع الوصف: صورة SUBJECT_DESCRIPTION [1] ${PROMPT} | أنشئ صورة 3d-cartoon style [3] حول a woman with short hair [1] بوضعية control image [2] لتتطابق مع الوصف: صورة بورتريه لـ a woman with short hair [1] بأسلوب رسوم متحركة ثلاثية الأبعاد مع خلفية مموّهة. شخصية لطيفة وجميلة، بوجه مبتسم، تنظر إلى الكاميرا، بألوان باستيل ... |
أفضل الممارسات والقيود
إذا كنت تستخدم شخصًا كموضوع لصورتك، ننصح بأن يتضمّن الوجه في الصورة المرجعية الخصائص التالية:
- أن تكون في وسط الصورة وتشغل نصفها على الأقل
- يتم تدويرها في العرض الأمامي في جميع الاتجاهات (الدوران والانحناء والانحراف)
- ألا يكون محجوبًا بعناصر، مثل النظارات الشمسية أو الأقنعة
حالات الاستخدام
تتيح ميزة التخصيص إدخال طلبات بأي أسلوب، ما قد يعطي انطباعًا بأنّ النموذج يمكنه تنفيذ مهام أكثر من تلك التي تم تدريبه عليها. توضّح الأقسام التالية حالات الاستخدام المقصودة لميزة التخصيص، بالإضافة إلى أمثلة غير شاملة على حالات الاستخدام غير المقصودة.
ننصحك باستخدام هذه الإمكانية لحالات الاستخدام المقصودة، لأنّنا درّبنا النموذج على حالات الاستخدام هذه ونتوقّع أن يحقّق نتائج جيدة فيها. في المقابل، إذا دفعت النموذج إلى تنفيذ مهام خارج نطاق حالات الاستخدام المقصودة، من المتوقّع أن تحصل على نتائج غير مرضية.
حالات الاستخدام المقصودة
في ما يلي حالات الاستخدام المقصودة للتخصيص استنادًا إلى موضوع:
تغيير أسلوب صورة شخص
تطبيق أسلوب معيّن على صورة شخص مع الحفاظ على تعابير وجهه
(مستوى نجاح منخفض) ضع منتجًا، مثل أريكة أو قطعة بسكويت، في مشاهد مختلفة بزوايا مختلفة.
إنشاء صيغ مختلفة لمنتج لا يحتفظ بالتفاصيل الدقيقة
تطبيق أسلوب معيّن على صورة شخص مع الحفاظ على تعابير الوجه
أمثلة على حالات الاستخدام غير المقصودة
في ما يلي قائمة غير شاملة بحالات الاستخدام غير المقصودة للتخصيص استنادًا إلى موضوع. لم يتم تدريب النموذج على حالات الاستخدام هذه، ومن المرجّح أن يعرض نتائج غير دقيقة.
وضع شخصَين أو أكثر في مشاهد مختلفة مع الحفاظ على هويتهم
وضع شخصَين أو أكثر في مشاهد مختلفة مع الحفاظ على هويتهم وتحديد نمط الصورة الناتجة باستخدام صورة مثال كمدخل للنمط
تطبيق أسلوب معيّن على صورة لشخصَين أو أكثر مع الحفاظ على هويتهم
وضع حيوان أليف في مشاهد مختلفة مع الحفاظ على هويته
تغيير تصميم صورة حيوان أليف وتحويلها إلى رسم
تغيير نمط صورة حيوان أليف وتحويلها إلى رسم مع الحفاظ على نمط الصورة أو تحديده (مثل الألوان المائية)
وضع حيوان أليف وشخص في مشهد مختلف مع الحفاظ على هويتيهما
يمكنك إضافة أسلوب إلى صورة حيوان أليف وشخص واحد أو أكثر وتحويلها إلى رسم.
ضَع منتجَين في مشاهد مختلفة بزوايا مختلفة.
ضَع منتجًا، مثل قطعة بسكويت أو أريكة، في مشاهد مختلفة بزوايا مختلفة للمنتج، واتّبِع أسلوب صورة معيّنًا (مثل أسلوب واقعي جدًا بألوان أو أساليب إضاءة أو صور متحركة معيّنة).
وضع منتج في مشهد مختلف مع الحفاظ على التركيبة المحدّدة للمشهد كما هو موضّح في صورة التحكّم
وضع منتجَين في مشاهد مختلفة بزوايا مختلفة، باستخدام صورة معيّنة كمدخل (مثل صورة واقعية بألوان أو أنماط إضاءة أو رسوم متحركة معيّنة)
وضع منتجَين في مشاهد مختلفة مع الحفاظ على التركيبة المحدّدة للمشهد كما هو موضّح في صورة التحكّم