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


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

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

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

پرش به کد



قبل از شروع

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

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

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

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

  • imagen-3.0-capability-001

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

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

نمونه زیر یک درخواست سفارشی سازی سبک را نشان می دهد که از مدل می خواهد یک تصویر جدید با سبک تصویر مرجع ارائه شده ایجاد کند (در این مثال، "شب پرستاره" ون گوگ).

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

سویفت

ویرایش تصویر با مدل های 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 style reference using the reference image.
    val styleReference = ImagenStyleReference(
        image = referenceImage,
        referenceID = 1,
        description = "Van Gogh style"
    )

    // Provide a prompt that describes the final image.
    // The "[1]" links the prompt to the style reference with ID 1.
    val prompt = "A cat flying through outer space, in the Van Gogh style[1]"

    // Use the editImage API to perform the style customization.
    // Pass the list of references, the prompt, and an editing configuration.
    val editedImage = model.editImage(
        references = listOf(styleReference),
        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 style reference using the reference image.
ImagenStyleReference subjectReference = new ImagenStyleReference.Builder()
        .setImage(referenceImage)
        .setReferenceID(1)
        .setDescription("Van Gogh style")
        .build();

// Provide a prompt that describes the final image.
// The "[1]" links the prompt to the style reference with ID 1.
String prompt = "A cat flying through outer space, in the Van Gogh style[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 style customization.
// Pass the list of references, the prompt, and the editing configuration.
Futures.addCallback(model.editImage(Collections.singletonList(styleReference), 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 style reference using the reference image.
final styleReference = ImagenStyleReference(
  image: referenceImage,
  referenceId: 1,
  description: 'Van Gogh style',
);

// Provide a prompt that describes the final image.
// The "[1]" links the prompt to the style reference with ID 1.
final prompt = "A cat flying through outer space, in the Van Gogh style[1]";

try {
  // Use the editImage API to perform the style customization.
  // Pass the list of references, the prompt, and an editing configuration.
  final response = await model.editImage(
    [styleReference],
    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 تصویر) را با تعریف یک ImagenStyleReference که در آن یک شناسه مرجع برای یک تصویر مشخص می‌کنید (و همچنین به صورت اختیاری شرح سبک) ارائه می‌کنید. توجه داشته باشید که چندین تصویر می توانند شناسه مرجع یکسانی داشته باشند (مثلاً چندین عکس از یک الگو).

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

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

مورد استفاده تصاویر مرجع الگوی درخواستی مثال
سبک شی تصویر موضوع (1-4) یک تصویر در STYLE_DESCRIPTION [1] بر اساس شرح زیر ایجاد کنید: IMAGE_DESCRIPTION . تصویری به neon sign style [1] بر اساس شرح زیر ایجاد کنید: a sign saying have a great day .
سبک سازی تصویر شخص بدون ورودی مش چهره تصویر موضوع (1-4) تصویری درباره SUBJECT_DESCRIPTION [1] ایجاد کنید تا با توضیحات مطابقت داشته باشد: پرتره ای از SUBJECT_DESCRIPTION [1] ${PROMPT} تصویری درباره a woman with short hair[1] ایجاد کنید تا با توضیحات مطابقت داشته باشد: پرتره a woman with short hair[1] به سبک کارتونی سه بعدی با پس زمینه تار. شخصیتی بامزه و دوست داشتنی، با چهره ای خندان، نگاه به دوربین، رنگ پاستلی ...
سبک سازی تصویر شخص با ورودی مش چهره تصویر موضوع (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] به سبک کارتونی سه بعدی با پس زمینه تار. شخصیتی بامزه و دوست داشتنی، با چهره ای خندان، نگاه به دوربین، رنگ پاستلی ...



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

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

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

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

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

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

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

  • عکس یک شخص را تغییر دهید

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

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

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

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

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

  • دو نفر را در یک صحنه متفاوت قرار دهید، هویت آنها را حفظ کنید و در حین مشخص کردن سبک تصویر خروجی (مانند نقاشی رنگ روغن) از یک تصویر مرجع استفاده کنید.

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

  • یک محصول مانند یک کوکی یا یک کاناپه را در صحنه های مختلف با زوایای محصول مختلف و پیروی از یک سبک تصویر خاص (مانند واقع گرایانه با رنگ های خاص، سبک های نورپردازی یا انیمیشن) قرار دهید.