این صفحه نحوه استفاده از قابلیت سفارشیسازی Imagen را برای ویرایش یا تولید تصاویر بر اساس یک کنترل مشخص با استفاده از Firebase AI Logic SDKs شرح میدهد.
نحوه کار : شما یک متن و حداقل یک تصویر مرجع کنترل (مانند یک نقاشی یا تصویر Canny edge) ارائه میدهید. مدل از این ورودیها برای تولید یک تصویر جدید بر اساس تصاویر کنترل استفاده میکند.
برای مثال، میتوانید طرحی از یک موشک و ماه را به همراه یک متن برای مدل فراهم کنید تا بر اساس آن طرح، یک نقاشی آبرنگ بکشد.
انواع تصاویر مرجع کنترل
تصویر مرجع برای سفارشیسازی کنترلشده میتواند یک خطخطی ، یک تصویر لبه Canny یا یک مش چهره باشد.
خطخطی، یک طرح یا طرح کلی خام و دستساز است که ساختار اولیه، چیدمان فضایی و طرحبندی مورد نظر را برای مدل فراهم میکند. متن راهنما جزئیات، رنگ و بافت تصویر تولید شده را ارائه میدهد.
مثال: شما طرحی از یک خانه، یک درخت و یک خورشید ارائه میدهید و همچنین یک متن راهنما مانند «یک نقاشی آبرنگ خیالانگیز از یک کلبه با یک درخت بلوط بزرگ در کنار آن در هنگام طلوع آفتاب» ارائه میدهید. سپس مدل تصویری را تولید میکند که با صحنه توصیف شده مطابقت دارد و طرح کلی را از طرح شما دنبال میکند.
یک تصویر لبه Canny جایی است که یک الگوریتم، به طور خاص آشکارساز لبه Canny ، بر روی یک تصویر منبع اعمال شده است تا لبههای اشیاء درون تصویر را نقشهبرداری کند. این لبهها به مدل کمک میکنند تا ساختار دقیق اشیاء را حفظ کند و در عین حال سبک، رنگ یا سایر ویژگیهای مشخص شده توسط متن را تغییر دهد.
مثال: شما عکسی از یک سگ دارید که روی مبل نشسته است. شما آشکارساز لبه Canny را روی عکس اجرا میکنید تا تصویری از خطوط بیرونی سگ و مبل به دست آورید. سپس از این نقشه لبه به عنوان تصویر کنترل و یک پیام متنی مانند "عکسی از یک توله سگ گلدن رتریور روی مبل چرمی" استفاده میکنید. مدل عکس جدیدی تولید میکند که دقیقاً با ژست سگ اصلی و ترکیب مبل مطابقت دارد، اما به جای سوژههای اصلی، یک توله سگ گلدن رتریور و یک مبل چرمی در آن قرار دارد.
- مش چهره تصویری است که به مدل کمک میکند تا یک چهره خاص را درک و شبیهسازی کند. این یک نمایش دیجیتالی از چهره انسان به صورت سهبعدی است که معمولاً شبکهای از نقاط (رئوس) و مثلثهای به هم پیوسته است که شکل و خطوط صورت را تعریف میکنند. این امر به مدل، نشانههای کلیدی (مانند چشمها، بینی و دهان) و بافتها را ارائه میدهد.
قبل از اینکه شروع کنی
| فقط زمانی در دسترس است که از Vertex AI Gemini API به عنوان ارائه دهنده API خود استفاده کنید. |
اگر هنوز این کار را نکردهاید، راهنمای شروع به کار را تکمیل کنید، که نحوه راهاندازی پروژه Firebase، اتصال برنامه به Firebase، افزودن SDK، راهاندازی سرویس backend برای ارائهدهنده API انتخابی شما و ایجاد یک نمونه ImagenModel را شرح میدهد.
مدلهایی که از این قابلیت پشتیبانی میکنند
ایمیجِن ویرایش تصویر را از طریق مدل capability خود ارائه میدهد:
-
imagen-3.0-capability-001
توجه داشته باشید که برای مدلهای Imagen ، موقعیت مکانی global پشتیبانی نمیشود .
ارسال درخواست سفارشیسازی کنترلشده
نمونه زیر یک درخواست سفارشیسازی کنترلشده را نشان میدهد که از مدل میخواهد بر اساس تصویر مرجع ارائه شده (در این مثال، ترسیمی از فضا، مانند موشک و ماه) یک تصویر جدید تولید کند. از آنجایی که تصویر مرجع یک طرح یا طرح کلی خام و با دست کشیده شده است، از نوع کنترل CONTROL_TYPE_SCRIBBLE استفاده میکند.
اگر تصویر مرجع شما یک تصویر Canny edge یا یک مش چهره است، میتوانید از این مثال نیز استفاده کنید، اما با تغییرات زیر:
اگر تصویر مرجع شما یک تصویر لبه Canny است، از نوع کنترل
CONTROL_TYPE_CANNYاستفاده کنید.اگر تصویر مرجع شما یک مش چهره است، از نوع کنترل
CONTROL_TYPE_FACE_MESHاستفاده کنید. این کنترل فقط با سفارشیسازی سوژه افراد قابل استفاده است.
برای یادگیری نحوه نوشتن سوالات و نحوه استفاده از تصاویر مرجع در آنها، الگوهای پیشنهادی را بعداً در این صفحه مرور کنید.
سویفت
ویرایش تصویر با مدلهای 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(
referenceImages = 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 = ((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 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 پشتیبانی نمیشود. بعداً امسال دوباره بررسی کنید!
قالبهای اعلان
در درخواست، شما با تعریف یک ImagenControlReference که در آن یک شناسه مرجع برای یک تصویر مشخص میکنید، تصاویر مرجع (حداکثر ۴ تصویر) ارائه میدهید. توجه داشته باشید که چندین تصویر میتوانند شناسه مرجع یکسانی داشته باشند (برای مثال، چندین خطخطی از یک ایده).
سپس، هنگام نوشتن اعلان، به این شناسهها ارجاع میدهید. برای مثال، در اعلان از [1] برای ارجاع به تصاویری با شناسه مرجع 1 استفاده میکنید.
جدول زیر قالبهای اعلانی را ارائه میدهد که میتوانند نقطه شروعی برای نوشتن اعلانهایی برای سفارشیسازی بر اساس یک کنترل باشند.
| مورد استفاده | تصاویر مرجع | الگوی سریع | مثال |
|---|---|---|---|
| سفارشیسازی کنترلشده | نقشه خطی (1) | تصویری ایجاد کنید که با scribble map [1] همتراز باشد تا با توضیحات مطابقت داشته باشد: ${STYLE_PROMPT} ${PROMPT} . | تصویری ایجاد کنید که با scribble map [1] همسو باشد تا با توضیحات مطابقت داشته باشد: تصویر باید به سبک یک نقاشی رنگ روغن امپرسیونیستی با ضربات قلممو آرام باشد. دارای فضایی با نور طبیعی و ضربات قلممو قابل توجه باشد. نمای جانبی یک ماشین. ماشین روی سطح جادهای مرطوب و بازتابنده پارک شده است و چراغهای شهر در گودالهای آب منعکس میشوند. |
| سفارشیسازی کنترلشده | تصویر کنترل هوشمندانه (1) | تصویری ایجاد کنید که با edge map [1] همتراز باشد تا با توضیحات مطابقت داشته باشد: ${STYLE_PROMPT} ${PROMPT} | تصویری مطابق با edge map [1] ایجاد کنید تا با توضیحات مطابقت داشته باشد: تصویر باید به سبک یک نقاشی رنگ روغن امپرسیونیستی، با ضربات قلممو آرام باشد. دارای فضایی با نور طبیعی و ضربات قلممو قابل توجه باشد. نمای جانبی یک ماشین. ماشین روی سطح جادهای مرطوب و بازتابنده پارک شده است و چراغهای شهر در گودالهای آب منعکس میشوند. |
| استایلدهی به تصویر شخص با ورودی FaceMesh | تصویر موضوع (۱-۳) تصویر کنترل 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 | تصویر موضوع (۱-۳) تصویر کنترل 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] به سبک کارتونی سه بعدی با پس زمینه تار. شخصیتی زیبا و دوست داشتنی، با چهره ای خندان، که به دوربین نگاه می کند، با رنگ های پاستلی ... |
بهترین شیوهها و محدودیتها
موارد استفاده
قابلیت سفارشیسازی، اعلانهای آزاد را ارائه میدهد که میتواند این تصور را ایجاد کند که مدل میتواند بیش از آنچه برای آن آموزش دیده است، انجام دهد. بخشهای زیر موارد استفاده مورد نظر برای سفارشیسازی و نمونههای غیر جامع از موارد استفاده ناخواسته را شرح میدهند.
ما استفاده از این قابلیت را برای موارد استفاده مورد نظر توصیه میکنیم، زیرا مدل را برای آن موارد استفاده آموزش دادهایم و انتظار نتایج خوبی برای آنها داریم. برعکس، اگر مدل را به انجام کارهایی خارج از موارد استفاده مورد نظر سوق دهید، باید انتظار نتایج ضعیفی را داشته باشید.
موارد استفاده مورد نظر
موارد استفاده زیر برای سفارشیسازی بر اساس یک کنترل در نظر گرفته شدهاند :
تصویری ایجاد کنید که از اعلان و تصاویر کنترل canny edge پیروی کند.
تصویری ایجاد کنید که از دستورالعمل و تصاویر نوشته شده پیروی کند.
با حفظ حالت چهره، به عکس یک شخص استایل بدهید.
نمونههایی از موارد استفاده ناخواسته
در ادامه فهرستی غیر جامع از موارد استفاده ناخواسته برای سفارشیسازی بر اساس یک کنترل ارائه شده است. مدل برای این موارد استفاده آموزش ندیده است و احتمالاً نتایج ضعیفی خواهد داشت.
با استفاده از سبکی که در اعلان مشخص شده است، یک تصویر تولید کنید.
تصویری از متن ایجاد کنید که از سبک خاصی که توسط یک تصویر مرجع ارائه میشود پیروی کند، و با استفاده از تصویر کنترل، سطحی از کنترل بر ترکیب تصویر داشته باشد.
تصویری از متن ایجاد کنید که از سبک خاصی که توسط یک تصویر مرجع ارائه میشود پیروی میکند، و با استفاده از یک خطچین کنترلی، سطحی از کنترل بر ترکیب تصویر داشته باشید.
تصویری از متن ایجاد کنید که از سبک خاصی که توسط تصویر مرجع ارائه شده است پیروی کند، و با استفاده از یک تصویر کنترل، سطحی از کنترل بر ترکیب تصویر داشته باشد. فرد موجود در تصویر حالت چهره خاصی دارد.
به عکسی از دو یا چند نفر استایل بدهید و حالت چهره آنها را حفظ کنید.
به عکس یک حیوان خانگی سبک بدهید و آن را به یک نقاشی تبدیل کنید. ترکیب تصویر را حفظ یا مشخص کنید (مثلاً آبرنگ).