تخصيص الصور استنادًا إلى موضوع محدّد باستخدام Imagen


توضّح هذه الصفحة كيفية استخدام إمكانية التخصيص من Imagen إلى تعديل الصور أو إنشائها استنادًا إلى موضوع محدّد باستخدام حِزم تطوير البرامج (SDK) الخاصة بـ Firebase AI Logic.

طريقة العمل: يمكنك تقديم طلب نصي وصورة مرجعية واحدة على الأقل تعرض موضوعًا معيّنًا (مثل منتج أو شخص أو حيوان أليف). يستخدم النموذج هذه الإدخالات لإنشاء صورة جديدة استنادًا إلى الموضوع المحدّد في الصور المرجعية.

على سبيل المثال، يمكنك أن تطلب من النموذج تطبيق نمط رسوم متحركة على صورة طفل أو تغيير لون دراجة في صورة.

الانتقال إلى الرمز



قبل البدء

لا تتوفّر إلا عند استخدام Agent Platform Gemini API (formerly Vertex AI) كمزوّد لواجهة برمجة التطبيقات.

إذا لم يسبق لك إجراء ذلك، عليك إكمال دليل بدء الاستخدام الذي يوضّح كيفية إعداد مشروع 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 Agent Platform Gemini API backend service (formerly branded Vertex AI).
    // 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(
        referenceImages = listOf(subjectReference),
        prompt = prompt,
        config = ImagenEditingConfig(
            editSteps = 50 // Number of editing steps, a higher value can improve quality
        )
    )

    // Process the result
}

Java

// Initialize the Agent Platform Gemini API backend service (formerly branded Vertex AI).
// 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 = ((ImagenInlineImage) 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 Agent Platform Gemini API backend service (formerly branded Vertex AI).
// 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

لا تتوافق Unity مع تعديل الصور باستخدام نماذج Imagen. يُرجى التحقّق من جديد في وقت لاحق من هذا العام.

نماذج الطلبات

في الطلب، يمكنك تقديم صور مرجعية (بحد أقصى 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] بأسلوب رسوم متحركة ثلاثية الأبعاد مع خلفية مموّهة. شخصية لطيفة وجميلة، بوجه مبتسم، تنظر إلى الكاميرا، بألوان باستيل ...



أفضل الممارسات والقيود

إذا كنت تستخدم شخصًا كموضوع، ننصح بأن يتضمّن الوجه في الصورة المرجعية الخصائص التالية:

  • أن تكون في وسط الصورة وتشغل نصفها على الأقل
  • يتم تدويرها في العرض الأمامي في جميع الاتجاهات (الدوران والانحناء والانحراف)
  • ألا يكون محجوبًا بأشياء، مثل النظارات الشمسية أو الأقنعة

حالات الاستخدام

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

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

حالات الاستخدام المقصودة

في ما يلي حالات الاستخدام المقصودة للتخصيص استنادًا إلى موضوع:

  • تغيير أسلوب صورة شخص

  • تغيير نمط صورة شخص مع الحفاظ على تعابير وجهه

  • (مستوى نجاح منخفض) ضع منتجًا، مثل أريكة أو قطعة بسكويت، في مشاهد مختلفة بزوايا مختلفة.

  • إنشاء صيغ مختلفة لمنتج لا يحتفظ بالتفاصيل الدقيقة

  • تطبيق تأثيرات على صورة شخص مع الحفاظ على تعابير الوجه

أمثلة على حالات الاستخدام غير المقصودة

في ما يلي قائمة غير شاملة بحالات الاستخدام غير المقصودة للتخصيص استنادًا إلى موضوع. لم يتم تدريب النموذج على حالات الاستخدام هذه، ومن المرجّح أن يعرض نتائج غير دقيقة.

  • وضع شخصَين أو أكثر في مشاهد مختلفة مع الحفاظ على هويتهم

  • وضع شخصَين أو أكثر في مشاهد مختلفة مع الحفاظ على هويتهم وتحديد نمط الصورة الناتجة باستخدام صورة مثال كمدخل للنمط

  • تطبيق أسلوب معيّن على صورة لشخصَين أو أكثر مع الحفاظ على هويتهم

  • وضع حيوان أليف في مَشاهد مختلفة مع الحفاظ على هويته

  • تغيير تصميم صورة حيوان أليف وتحويلها إلى رسم

  • تطبيق أسلوب معيّن على صورة حيوان أليف وتحويلها إلى رسم مع الحفاظ على أسلوب الصورة أو تحديده (مثل الألوان المائية)

  • وضع حيوان أليف وشخص في مشهد مختلف مع الحفاظ على هويتيهما

  • يمكنك إضافة أسلوب مميز إلى صورة حيوان أليف وشخص واحد أو أكثر وتحويلها إلى رسم.

  • ضَع منتجَين في مشاهد مختلفة بزوايا مختلفة.

  • ضع منتجًا، مثل قطعة بسكويت أو أريكة، في مشاهد مختلفة مع زوايا مختلفة للمنتج، واتّبِع أسلوب صورة معيّنًا (مثل أسلوب واقعي جدًا مع ألوان أو أساليب إضاءة أو صور متحركة معيّنة).

  • وضع منتج في مشهد مختلف مع الحفاظ على التركيبة المحددة للمشهد كما هو موضح في صورة التحكّم

  • وضع منتجَين في مشاهد مختلفة بزوايا مختلفة، باستخدام صورة معيّنة كمدخل (مثل صورة واقعية بألوان أو أنماط إضاءة أو رسوم متحركة معيّنة)

  • وضع منتجَين في مشاهد مختلفة مع الحفاظ على التركيبة المحدّدة للمشهد كما هو موضّح في صورة التحكّم