توضّح هذه الصفحة كيفية استخدام إمكانية التخصيص من Imagen إلى تعديل الصور أو إنشائها استنادًا إلى عنصر تحكّم محدّد باستخدام حِزم تطوير البرامج (SDK) الخاصة بـ Firebase AI Logic.
طريقة العمل: يمكنك تقديم طلب نصي وصورة مرجعية واحدة على الأقل للتحكّم (مثل رسم أو صورة حواف Canny). يستخدم النموذج هذه المدخلات لإنشاء صورة جديدة استنادًا إلى صور التحكّم.
على سبيل المثال، يمكنك تزويد النموذج برسم لمركبة فضائية والقمر مع طلب نصي لإنشاء لوحة ألوان مائية استنادًا إلى الرسم.
أنواع الصور المرجعية لعناصر التحكّم
يمكن أن تكون الصورة المرجعية للتخصيص المنظَّم خربشة أو صورة حواف Canny أو شبكة وجه.
قبل البدء
لا تتوفّر هذه الميزة إلا عند استخدام Vertex AI Gemini API كموفّر لواجهة برمجة التطبيقات. |
إذا لم يسبق لك إجراء ذلك، أكمل دليل بدء الاستخدام الذي يوضّح كيفية إعداد مشروعك على Firebase وربط تطبيقك بـ Firebase وإضافة حزمة تطوير البرامج (SDK) وتهيئة خدمة الخلفية لمزوّد واجهة برمجة التطبيقات الذي اخترته وإنشاء مثيل ImagenModel
.
الطُرز التي تتيح هذه الإمكانية
توفّر Imagen إمكانية تعديل الصور من خلال نموذج capability
:
imagen-3.0-capability-001
يُرجى العِلم أنّه بالنسبة إلى طُرز Imagen، لا يتوفّر الموقع الجغرافي global
.
إرسال طلب تخصيص محدود
يعرض المثال التالي طلب تخصيص خاضعًا للرقابة يطلب من النموذج إنشاء صورة جديدة استنادًا إلى الصورة المرجعية المقدَّمة (في هذا المثال، رسم للفضاء، مثل صاروخ والقمر). بما أنّ الصورة المرجعية هي رسم تخطيطي أو مخطط تفصيلي تقريبي مرسوم باليد، فإنّها تستخدم نوع عنصر التحكّم CONTROL_TYPE_SCRIBBLE
.
إذا كانت الصورة المرجعية صورة Canny edge أو شبكة وجه، يمكنك أيضًا استخدام هذا المثال مع إجراء التغييرات التالية:
إذا كانت الصورة المرجعية صورة حواف Canny، استخدِم نوع عنصر التحكّم
CONTROL_TYPE_CANNY
.إذا كانت الصورة المرجعية عبارة عن شبكة وجه، استخدِم نوع عنصر التحكّم
CONTROL_TYPE_FACE_MESH
. لا يمكن استخدام عنصر التحكّم هذا إلا مع تخصيص مواضيع الأشخاص.
يمكنك الاطّلاع على نماذج الطلبات لاحقًا في هذه الصفحة للتعرّف على كيفية كتابة الطلبات وكيفية استخدام الصور المرجعية فيها.
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 controlReference = ImagenControlReference(
image = referenceImage,
referenceID = 1,
controlType = CONTROL_TYPE_SCRIBBLE
)
// Provide a prompt that describes the final image.
// The "[1]" links the prompt to the subject reference with ID 1.
val prompt = "A cat flying through outer space arranged like the space scribble[1]"
// Use the editImage API to perform the controlled customization.
// Pass the list of references, the prompt, and an editing configuration.
val editedImage = model.editImage(
references = listOf(controlReference),
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.
ImagenControlReference controlReference = new ImagenControlReference.Builder()
.setImage(referenceImage)
.setReferenceID(1)
.setControlType(CONTROL_TYPE_SCRIBBLE)
.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 flying through outer space arranged like the space scribble[1]";
// 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 controlled customization.
// Pass the list of references, the prompt, and an editing configuration.
Futures.addCallback(model.editImage(Collections.singletonList(controlReference), 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 control reference using the reference image.
final controlReference = ImagenControlReference(
image: referenceImage,
referenceId: 1,
controlType: ImagenControlType.scribble,
);
// Provide a prompt that describes the final image.
// The "[1]" links the prompt to the subject reference with ID 1.
final prompt = "A cat flying through outer space arranged like the space scribble[1]";
try {
// Use the editImage API to perform the controlled customization.
// Pass the list of references, the prompt, and an editing configuration.
final response = await model.editImage(
[controlReference],
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 صور) من خلال تحديد ImagenControlReference
تحدّد فيه معرّفًا مرجعيًا لصورة.
يُرجى العِلم أنّه يمكن أن تتضمّن صور متعددة معرّف مرجع واحدًا (على سبيل المثال، عدة رسومات تخطيطية للفكرة نفسها).
بعد ذلك، عند كتابة الطلب، يمكنك الرجوع إلى أرقام التعريف هذه. على سبيل المثال، يمكنك استخدام
[1]
في الطلب للإشارة إلى الصور التي تحمل رقم التعريف المرجعي 1
.
يوفّر الجدول التالي نماذج طلبات يمكن أن تكون نقطة بداية لكتابة طلبات مخصّصة استنادًا إلى عنصر تحكّم.
حالة الاستخدام | الصور المرجعية | نموذج الطلب | مثال |
---|---|---|---|
التخصيص الخاضع للرقابة | خريطة Scribble (1) | أنشئ صورة تتوافق مع scribble map [1] لمطابقة الوصف: ${STYLE_PROMPT} ${PROMPT}. | أنشِئ صورة تتوافق مع scribble map [1] لتطابق الوصف التالي: يجب أن تكون الصورة بأسلوب لوحة زيتية انطباعية مع ضربات فرشاة هادئة. تتميّز هذه اللوحة بأجواء مضاءة بشكل طبيعي وبضربات فرشاة واضحة. صورة من الجانب لسيارة السيارة متوقفة على سطح طريق مبلّل وعاكس، وتنعكس أضواء المدينة في البرك. |
التخصيص الخاضع للرقابة | صورة التحكّم الذكي (1) | إنشاء صورة تتوافق مع edge map [1] لمطابقة الوصف: ${STYLE_PROMPT} ${PROMPT} | أنشِئ صورة تتوافق مع edge map [1] لتطابق الوصف التالي: يجب أن تكون الصورة بأسلوب لوحة زيتية انطباعية، مع ضربات فرشاة هادئة. وتتميّز هذه اللوحة بأجواء مضاءة بشكل طبيعي وبضربات فرشاة واضحة. صورة جانبية لسيارة السيارة مركونة على سطح طريق مبلّل وعاكس، مع انعكاس أضواء المدينة في البرك. |
تعديل أسلوب صورة شخص باستخدام بيانات FaceMesh |
صورة العنصر الأساسي (من 1 إلى 3) صورة التحكّم في FaceMesh (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] بأسلوب رسوم متحركة ثلاثية الأبعاد مع خلفية مموّهة. شخصية لطيفة وجميلة، بوجه مبتسم، تنظر إلى الكاميرا، بألوان الباستيل ... |
تعديل أسلوب صورة شخص باستخدام بيانات FaceMesh |
صورة العنصر الأساسي (من 1 إلى 3) صورة التحكّم في FaceMesh (1) |
أنشئ صورة ${STYLE_PROMPT} حول 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] بنمط رسم كرتوني ثلاثي الأبعاد مع خلفية مموّهة. شخصية لطيفة وجميلة بوجه مبتسم تنظر إلى الكاميرا، مع ألوان باستيل ... |
أفضل الممارسات والقيود
حالات الاستخدام
تتيح ميزة التخصيص إدخال طلبات بأي أسلوب، ما قد يعطي انطباعًا بأنّ النموذج يمكنه تنفيذ مهام أكثر من تلك التي تم تدريبه عليها. توضّح الأقسام التالية حالات الاستخدام المقصودة لميزة التخصيص، بالإضافة إلى أمثلة غير شاملة على حالات الاستخدام غير المقصودة.
ننصحك باستخدام هذه الإمكانية لحالات الاستخدام المقصودة، لأنّنا درّبنا النموذج على حالات الاستخدام هذه ونتوقّع أن يحقّق نتائج جيدة فيها. في المقابل، إذا دفعت النموذج إلى تنفيذ مهام خارج نطاق حالات الاستخدام المقصودة، من المتوقّع أن تحصل على نتائج غير مرضية.
حالات الاستخدام المقصودة
في ما يلي حالات الاستخدام المقصودة للتخصيص استنادًا إلى عنصر تحكّم:
أنشئ صورة تتوافق مع الطلب وصور التحكّم في الحواف الواضحة.
إنشاء صورة تتوافق مع الطلب والصور المرسومة
تطبيق أسلوب معيّن على صورة شخص مع الحفاظ على تعابير الوجه
أمثلة على حالات الاستخدام غير المقصودة
في ما يلي قائمة غير شاملة بحالات الاستخدام غير المقصودة للتخصيص استنادًا إلى عنصر تحكّم. لم يتم تدريب النموذج على حالات الاستخدام هذه، ومن المرجّح أن يعرض نتائج غير دقيقة.
إنشاء صورة باستخدام نمط محدّد في الطلب
يمكنك إنشاء صورة من نص يتبع نمطًا محدّدًا توفّره صورة مرجعية، مع إمكانية التحكّم إلى حد ما في تركيبة الصورة باستخدام صورة التحكّم.
إنشاء صورة من نص يتبع نمطًا محدّدًا تقدّمه صورة مرجعية، مع إمكانية التحكّم إلى حدّ ما في تركيبة الصورة باستخدام رسم تخطيطي للتحكّم
إنشاء صورة من نص يتبع نمطًا محدّدًا توفّره الصورة المرجعية، مع إمكانية التحكّم إلى حدّ ما في تركيبة الصورة باستخدام صورة التحكّم يظهر على وجه الشخص في الصورة تعبير محدّد.
تطبيق أسلوب معيّن على صورة لشخصَين أو أكثر مع الحفاظ على تعابير وجوههم
تغيير تصميم صورة حيوان أليف وتحويلها إلى رسم الحفاظ على تركيبة الصورة أو تحديدها (على سبيل المثال، ألوان مائية)