سفارشی کردن تصاویر بر اساس یک کنترل با استفاده از Imagen


این صفحه نحوه استفاده از قابلیت سفارشی سازی Imagen را برای ویرایش یا تولید تصاویر بر اساس کنترل مشخص شده با استفاده از Firebase AI Logic SDK توضیح می دهد.

چگونه کار می کند : شما یک پیام متنی و حداقل یک تصویر مرجع کنترلی (مانند یک طراحی یا یک تصویر لبه Canny) ارائه می دهید. مدل از این ورودی ها برای تولید یک تصویر جدید بر اساس تصاویر کنترلی استفاده می کند.

به عنوان مثال، می توانید طرحی از کشتی موشکی و ماه را به همراه یک پیام متنی برای ایجاد یک نقاشی آبرنگ بر اساس طرح ارائه دهید.

پرش به کد

انواع تصاویر مرجع کنترل

تصویر مرجع برای سفارشی‌سازی کنترل‌شده می‌تواند یک خط خطی ، یک تصویر لبه Canny یا یک مش چهره باشد.



قبل از شروع

فقط در صورت استفاده از Vertex AI Gemini API به عنوان ارائه‌دهنده API در دسترس است.

اگر قبلاً این کار را نکرده‌اید، راهنمای شروع را تکمیل کنید، که نحوه راه‌اندازی پروژه Firebase را توضیح می‌دهد، برنامه خود را به Firebase متصل کنید، SDK را اضافه کنید، سرویس Backend را برای ارائه‌دهنده API انتخابی خود مقداردهی اولیه کنید و یک نمونه ImagenModel ایجاد کنید.

مدل هایی که از این قابلیت پشتیبانی می کنند

Imagen ویرایش تصویر را از طریق مدل capability خود ارائه می دهد:

  • imagen-3.0-capability-001

توجه داشته باشید که برای مدل های Imagen ، موقعیت global پشتیبانی نمی شود.

یک درخواست سفارشی سازی کنترل شده ارسال کنید

نمونه زیر یک درخواست سفارشی‌سازی کنترل‌شده را نشان می‌دهد که از مدل می‌خواهد بر اساس تصویر مرجع ارائه‌شده یک تصویر جدید تولید کند (در این مثال، نقاشی فضا، مانند موشک و ماه). از آنجایی که تصویر مرجع یک طرح یا طرح کلی با دست است، از نوع کنترل CONTROL_TYPE_SCRIBBLE استفاده می کند.

اگر تصویر مرجع شما یک تصویر Canny edge یا یک فیس مش است، می توانید از این مثال نیز استفاده کنید اما با تغییرات زیر:

الگوهای درخواست را در ادامه این صفحه مرور کنید تا در مورد دستورات نوشتن و نحوه استفاده از تصاویر مرجع در آنها بیاموزید.

سویفت

ویرایش تصویر با مدل های Imagen برای Swift پشتیبانی نمی شود. اواخر امسال دوباره بررسی کنید!

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');
}

وحدت

ویرایش تصویر با مدل های Imagen برای Unity پشتیبانی نمی شود. اواخر امسال دوباره بررسی کنید!

الگوهای سریع

در درخواست، تصاویر مرجع (حداکثر 4 تصویر) را با تعریف ImagenControlReference که در آن شناسه مرجع برای یک تصویر مشخص می کنید، ارائه می دهید. توجه داشته باشید که چندین تصویر می توانند شناسه مرجع یکسانی داشته باشند (مثلاً چندین خط خطی از یک ایده).

سپس هنگام نوشتن دستور به این شناسه ها مراجعه می کنید. به عنوان مثال، شما از [1] در اعلان برای ارجاع به تصاویر با شناسه مرجع 1 استفاده می کنید.

جدول زیر الگوهای درخواستی را ارائه می دهد که می تواند نقطه شروعی برای نوشتن دستورات برای سفارشی سازی بر اساس یک کنترل باشد.

مورد استفاده تصاویر مرجع الگوی درخواستی مثال
سفارشی سازی کنترل شده نقشه خط خطی (1) تصویری را ایجاد کنید که با scribble map [1] مطابقت داشته باشد تا با توضیحات مطابقت داشته باشد: ${STYLE_PROMPT} ${PROMPT} . تصویری ایجاد کنید که با scribble map [1] مطابقت داشته باشد تا با توضیحات مطابقت داشته باشد: تصویر باید به سبک نقاشی رنگ روغن امپرسیونیستی با ضربه های قلم آرام باشد. دارای محیطی با نور طبیعی و ضربه های قلم موی قابل توجه است. نمای جانبی ماشین ماشین روی سطح جاده خیس و منعکس کننده ای پارک شده است و چراغ های شهر در گودال ها منعکس می شوند.
سفارشی سازی کنترل شده تصویر کنترل Canny (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] به سبک کارتونی سه بعدی با پس زمینه تار. شخصیتی بامزه و دوست داشتنی، با چهره ای خندان، نگاه به دوربین، رنگ پاستلی ...



بهترین شیوه ها و محدودیت ها

موارد استفاده کنید

قابلیت سفارشی‌سازی، درخواست‌هایی به سبک آزاد ارائه می‌کند که می‌تواند این تصور را ایجاد کند که مدل می‌تواند بیش از آنچه برای انجام آن آموزش دیده است انجام دهد. بخش‌های زیر موارد استفاده مورد نظر برای سفارشی‌سازی و نمونه‌های غیر جامع از موارد استفاده ناخواسته را شرح می‌دهند.

ما استفاده از این قابلیت را برای موارد استفاده مورد نظر توصیه می کنیم، زیرا ما این مدل را روی آن موارد استفاده آموزش داده ایم و انتظار نتایج خوبی برای آنها داریم. برعکس، اگر مدل را به انجام کارهایی خارج از موارد استفاده مورد نظر سوق دهید، باید انتظار نتایج ضعیفی را داشته باشید.

موارد استفاده مورد نظر

موارد زیر موارد استفاده در نظر گرفته شده برای سفارشی سازی بر اساس یک کنترل هستند:

  • تصویری را ایجاد کنید که از دستورات و تصاویر کنترل لبه‌های ساده پیروی می‌کند.

  • تصویری را ایجاد کنید که از دستورات و تصاویر خط خطی پیروی کند.

  • با حفظ حالت چهره، عکس یک شخص را سبک کنید.

نمونه هایی از موارد استفاده ناخواسته

در زیر لیستی غیر جامع از موارد استفاده ناخواسته برای سفارشی سازی بر اساس یک کنترل آمده است. این مدل برای این موارد استفاده آموزش ندیده است و احتمالاً نتایج ضعیفی خواهد داشت.

  • یک تصویر با استفاده از سبک مشخص شده در اعلان ایجاد کنید.

  • تصویری از متن ایجاد کنید که از سبک خاصی پیروی می کند که توسط یک تصویر مرجع ارائه شده است، با سطحی از کنترل بر روی ترکیب تصویر با استفاده از تصویر کنترل.

  • تصویری از متن ایجاد کنید که از سبک خاصی پیروی می کند که توسط یک تصویر مرجع ارائه شده است، با سطحی از کنترل بر روی ترکیب تصویر با استفاده از یک خط خطی کنترلی.

  • با استفاده از یک تصویر کنترلی، تصویری از متن ایجاد کنید که از سبک خاصی که توسط تصویر مرجع ارائه شده است، پیروی می کند. شخص در تصویر حالت چهره خاصی دارد.

  • عکس دو یا چند نفر را سبک کنید و حالات چهره آنها را حفظ کنید.

  • عکس یک حیوان خانگی را سبک کنید و آن را به نقاشی تبدیل کنید. ترکیب تصویر را حفظ یا مشخص کنید (مثلاً آبرنگ).