این صفحه نحوه استفاده از قابلیت سفارشیسازی Imagen را برای ویرایش یا تولید تصاویر بر اساس یک موضوع مشخص با استفاده از SDK های Firebase AI Logic شرح میدهد.
نحوه کار : شما یک متن و حداقل یک تصویر مرجع که یک موضوع خاص (مانند یک محصول، شخص یا حیوان همراه) را نشان میدهد، ارائه میدهید. مدل از این ورودیها برای تولید یک تصویر جدید بر اساس موضوع مشخص شده در تصاویر مرجع استفاده میکند.
برای مثال، میتوانید از مدل بخواهید که یک سبک کارتونی را روی عکس یک کودک اعمال کند یا رنگ دوچرخه را در یک تصویر تغییر دهد.
قبل از اینکه شروع کنی
| فقط زمانی در دسترس است که از Vertex AI Gemini API به عنوان ارائه دهنده API خود استفاده کنید. |
اگر هنوز این کار را نکردهاید، راهنمای شروع به کار را تکمیل کنید، که نحوه راهاندازی پروژه Firebase، اتصال برنامه به Firebase، افزودن SDK، راهاندازی سرویس backend برای ارائهدهنده API انتخابی شما و ایجاد یک نمونه ImagenModel را شرح میدهد.
مدلهایی که از این قابلیت پشتیبانی میکنند
ایمیجِن ویرایش تصویر را از طریق مدل capability خود ارائه میدهد:
-
imagen-3.0-capability-001
توجه داشته باشید که برای مدلهای Imagen ، موقعیت مکانی global پشتیبانی نمیشود .
ارسال درخواست سفارشیسازی موضوع
نمونه زیر یک درخواست سفارشیسازی موضوع را نشان میدهد که از مدل میخواهد بر اساس تصویر مرجع ارائه شده (در این مثال، یک گربه) یک تصویر جدید تولید کند. از آنجایی که گربه یک حیوان است، از نوع موضوع ImagenSubjectReferenceType.ANIMAL استفاده میکند.
اگر موضوع شما یک شخص یا یک محصول است، میتوانید از این مثال نیز استفاده کنید، اما با تغییرات زیر:
اگر سوژه شما یک شخص است، از نوع سوژه
ImagenSubjectReferenceType.PERSONاستفاده کنید. میتوانید این نوع درخواست را با یا بدون تصویر کنترل مش چهره ارسال کنید تا تولید تصویر را بیشتر هدایت کنید.اگر موضوع شما یک محصول است، از نوع موضوع
ImagenSubjectReferenceType.PRODUCTاستفاده کنید.
برای یادگیری نحوه نوشتن سوالات و نحوه استفاده از تصاویر مرجع در آنها، الگوهای پیشنهادی را بعداً در این صفحه مرور کنید.
سویفت
ویرایش تصویر با مدلهای 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 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 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.
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 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 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');
}
وحدت
ویرایش تصویر با مدلهای Imagen برای Unity پشتیبانی نمیشود. بعداً امسال دوباره بررسی کنید!
قالبهای اعلان
در درخواست، شما با تعریف یک ImagenSubjectReference که در آن یک شناسه مرجع برای یک تصویر (و به صورت اختیاری یک توضیح موضوع نیز) مشخص میکنید، تصاویر مرجع (حداکثر ۴ تصویر) را ارائه میدهید. توجه داشته باشید که چندین تصویر میتوانند شناسه مرجع یکسانی داشته باشند (برای مثال، چندین عکس از یک گربه).
سپس، هنگام نوشتن دستورالعمل، به این شناسهها ارجاع میدهید. برای مثال، در دستورالعمل از [1] برای ارجاع به تصاویری با شناسه مرجع 1 استفاده میکنید. اگر توضیحی در مورد موضوع ارائه میدهید، میتوانید آن را نیز در دستورالعمل بگنجانید تا خواندن دستورالعمل برای انسان آسانتر شود.
جدول زیر الگوهای پیشنهادی را شرح میدهد که میتوانند نقطه شروعی برای نوشتن پیشنهادات برای سفارشیسازی بر اساس یک موضوع (مانند یک محصول، شخص یا حیوان همراه) باشند.
| مورد استفاده | تصاویر مرجع | الگوی سریع | مثال |
|---|---|---|---|
| سبکسازی تصویر محصول - تبلیغات | تصویر سوژه (حداکثر ۴) | تصویری در مورد SUBJECT_DESCRIPTION [1] ایجاد کنید که با توضیحات مطابقت داشته باشد: ${PROMPT} | تصویری در مورد Luxe Elixir hair oil, golden liquid in glass bottle [1] ایجاد کنید که با توضیحات مطابقت داشته باشد: تصویری نزدیک و با کیفیت بالا از دست زنی که Luxe Elixir hair oil, golden liquid in glass bottle [1] را در مقابل یک پسزمینه سفید خالص نگه داشته است. دست زن به خوبی روشن شده و فوکوس روی بطری تیز است، با عمق میدان کم که پسزمینه را محو کرده و بر محصول تأکید میکند. نورپردازی ملایم و پخش شده است و درخشش ظریفی در اطراف بطری و دست ایجاد میکند. ترکیب کلی ساده و زیبا است و جذابیت لوکس محصول را برجسته میکند. |
| استایلبندی تصویر محصول - تغییر ویژگی | تصویر سوژه (حداکثر ۴) | تصویری از SUBJECT_DESCRIPTION اما با پارامتر ${PROMPT} ایجاد کنید. | تصویری از یک Seiko watch [1] اما به رنگ آبی تولید کنید. |
| استایلدهی به تصویر شخص بدون ورودی شبکه چهره | تصویر سوژه (حداکثر ۴) | تصویری در مورد SUBJECT_DESCRIPTION [1] ایجاد کنید که با توضیحات مطابقت داشته باشد: تصویری از SUBJECT_DESCRIPTION [1] ${PROMPT} | تصویری از a woman with short hair[1] بسازید که با توضیحات مطابقت داشته باشد: یک پرتره از a woman with short hair[1] به سبک کارتونی سه بعدی با پس زمینه تار. یک شخصیت زیبا و دوست داشتنی، با چهره ای خندان، که به دوربین نگاه می کند، با رنگ های پاستلی... |
| استایلدهی به تصویر شخص بدون ورودی شبکه چهره | تصویر سوژه (حداکثر ۴) | یک تصویر 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] به سبک کارتونی سه بعدی با پس زمینه تار. شخصیتی زیبا و دوست داشتنی، با چهره ای خندان، که به دوربین نگاه می کند، با رنگ های پاستلی ... |
| استایلبندی تصویر شخص با ورودی مش چهره | تصویر سوژه (حداکثر ۳) تصویر کنترل شبکه صورت (1) | تصویری از SUBJECT_DESCRIPTION [1] با Face mesh from the control image [2] ایجاد کنید. ${PROMPT} | با استفاده از face mesh from the control image [2] تصویری از the person [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] به سبک کارتونی سه بعدی با پس زمینه تار. یک شخصیت زیبا و دوست داشتنی، با چهره ای خندان، که به دوربین نگاه می کند، با رنگ های پاستلی ... |
| استایلبندی تصویر شخص با ورودی مش چهره | تصویر سوژه (حداکثر ۳) تصویر کنترل شبکه صورت (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] به سبک کارتونی سه بعدی با پس زمینه تار. یک شخصیت زیبا و دوست داشتنی، با چهره ای خندان، که به دوربین نگاه می کند، با رنگ های پاستلی ... |
بهترین شیوهها و محدودیتها
اگر از یک شخص به عنوان سوژه خود استفاده میکنید، توصیه میکنیم چهره در تصویر مرجع شما دارای ویژگیهای زیر باشد:
- در مرکز تصویر قرار دارد و حداقل نیمی از کل تصویر را اشغال میکند
- در نمای جلو در تمام جهات (غلتش، پیچش و انحراف) چرخیده است.
- توسط اشیاء مانند عینک آفتابی یا ماسک مسدود نمیشود
موارد استفاده
قابلیت سفارشیسازی، اعلانهای آزاد را ارائه میدهد که میتواند این تصور را ایجاد کند که مدل میتواند بیش از آنچه برای آن آموزش دیده است، انجام دهد. بخشهای زیر موارد استفاده مورد نظر برای سفارشیسازی و نمونههای غیر جامع از موارد استفاده ناخواسته را شرح میدهند.
ما استفاده از این قابلیت را برای موارد استفاده مورد نظر توصیه میکنیم، زیرا مدل را برای آن موارد استفاده آموزش دادهایم و انتظار نتایج خوبی برای آنها داریم. برعکس، اگر مدل را به انجام کارهایی خارج از موارد استفاده مورد نظر سوق دهید، باید انتظار نتایج ضعیفی را داشته باشید.
موارد استفاده مورد نظر
موارد استفاده زیر برای سفارشیسازی بر اساس یک موضوع در نظر گرفته شدهاند :
به عکس یک شخص استایل بدهید.
به عکس یک شخص استایل بدهید و حالتهای چهرهی او را حفظ کنید.
(موفقیت کم) یک محصول، مانند یک کاناپه یا یک کلوچه، را در صحنههای مختلف با زوایای مختلف محصول قرار دهید.
ایجاد انواع مختلفی از یک محصول که جزئیات دقیقی را حفظ نمیکنند.
به عکس یک شخص استایل بدهید، در حالی که حالت چهره را حفظ کنید.
نمونههایی از موارد استفاده ناخواسته
در ادامه فهرستی غیرجامع از موارد استفاده ناخواسته برای سفارشیسازی بر اساس یک موضوع ارائه شده است. مدل برای این موارد استفاده آموزش ندیده است و احتمالاً نتایج ضعیفی خواهد داشت.
دو یا چند نفر را در صحنههای مختلف قرار دهید، در حالی که هویت آنها حفظ شود.
دو یا چند نفر را در صحنههای مختلف قرار دهید، ضمن حفظ هویت آنها و با استفاده از یک تصویر نمونه به عنوان ورودی برای سبک، سبک تصویر خروجی را مشخص کنید.
با حفظ هویت دو یا چند نفر، به عکس آنها استایل بدهید.
یک حیوان خانگی را در صحنههای مختلف قرار دهید و در عین حال هویت آن را حفظ کنید.
عکس یک حیوان خانگی را به سبک دلخواه خود درآورید و آن را به یک نقاشی تبدیل کنید.
به عکس یک حیوان خانگی سبک بدهید و آن را به یک نقاشی تبدیل کنید، در حالی که سبک تصویر را حفظ یا مشخص کنید (مانند رنگ آب).
یک حیوان خانگی و یک شخص را در صحنهای متفاوت قرار دهید و هویت هر دو را حفظ کنید.
عکس یک حیوان خانگی و یک یا چند نفر را به سبک خاصی درآورید و آن را به یک نقاشی تبدیل کنید.
دو محصول را در صحنههای مختلف با زوایای مختلف محصول قرار دهید.
یک محصول، مانند یک کلوچه یا یک مبل، را در صحنههای مختلف با زوایای مختلف محصول قرار دهید و از یک سبک تصویر خاص (مانند تصاویر واقعگرایانه با رنگها، سبکهای نورپردازی یا انیمیشن خاص) پیروی کنید.
یک محصول را در صحنهای متفاوت قرار دهید، ضمن اینکه ترکیببندی خاص صحنه را همانطور که توسط یک تصویر کنترل مشخص شده است، حفظ کنید.
دو محصول را با استفاده از یک تصویر خاص به عنوان ورودی (مانند تصاویر واقعگرایانه با رنگها، سبکهای نورپردازی یا انیمیشن خاص) در صحنههای مختلف با زوایای مختلف محصول قرار دهید.
دو محصول را در صحنههای مختلف قرار دهید، در حالی که ترکیببندی خاص صحنه را همانطور که توسط یک تصویر کنترل مشخص شده است، حفظ کنید.