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


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

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

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

به کد



قبل از اینکه شروع کنی

فقط زمانی در دسترس است که از Vertex AI Gemini API به عنوان ارائه دهنده API خود استفاده کنید.

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

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

ایمیجِن ویرایش تصویر را از طریق مدل 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(
        referenceImages = 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 = ((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 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 پشتیبانی نمی‌شود. بعداً امسال دوباره بررسی کنید!

قالب‌های اعلان

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

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

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

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

تصویر کنترل فیس‌مِش (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] به سبک کارتونی سه بعدی با پس زمینه تار. یک شخصیت زیبا و دوست داشتنی، با چهره ای خندان، که به دوربین نگاه می کند، با رنگ های پاستلی ...



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

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

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

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

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

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

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

  • تغییر عکس یک شخص

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

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

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

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

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

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

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

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