این صفحه نحوه استفاده از قابلیت سفارشی سازی Imagen را برای ویرایش یا تولید تصاویر بر اساس کنترل مشخص شده با استفاده از Firebase AI Logic SDK توضیح می دهد.
چگونه کار می کند : شما یک پیام متنی و حداقل یک تصویر مرجع کنترلی (مانند یک طراحی یا یک تصویر لبه Canny) ارائه می دهید. مدل از این ورودی ها برای تولید یک تصویر جدید بر اساس تصاویر کنترلی استفاده می کند.
به عنوان مثال، می توانید طرحی از کشتی موشکی و ماه را به همراه یک پیام متنی برای ایجاد یک نقاشی آبرنگ بر اساس طرح ارائه دهید.
انواع تصاویر مرجع کنترل
تصویر مرجع برای سفارشیسازی کنترلشده میتواند یک خط خطی ، یک تصویر لبه Canny یا یک مش چهره باشد.
خط خطی طرح یا طرحی خشن و با دست است که ساختار پایه، آرایش فضایی و چیدمان را برای مدل فراهم می کند. اعلان متن جزئیات، رنگ و بافت تصویر تولید شده را ارائه می دهد.
مثال: شما طرحی از یک خانه، یک درخت و یک خورشید ارائه میدهید، و همچنین یک پیام متنی مانند "نقاشی عجیب و غریب با آبرنگ از یک کلبه با یک درخت بلوط بزرگ در کنار آن هنگام طلوع خورشید" ارائه میدهید. سپس مدل تصویری را ایجاد میکند که با صحنه توصیفشده مطابقت داشته باشد، در حالی که طرح کلی طراحی شما را دنبال میکند.
تصویر لبه Canny جایی است که یک الگوریتم، به ویژه آشکارساز لبه 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 یا یک فیس مش است، می توانید از این مثال نیز استفاده کنید اما با تغییرات زیر:
اگر تصویر مرجع شما یک تصویر Canny edge است، از نوع کنترل
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(
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] به سبک کارتونی سه بعدی با پس زمینه تار. شخصیتی بامزه و دوست داشتنی، با چهره ای خندان، نگاه به دوربین، رنگ پاستلی ... |
بهترین شیوه ها و محدودیت ها
موارد استفاده کنید
قابلیت سفارشیسازی، درخواستهایی به سبک آزاد ارائه میکند که میتواند این تصور را ایجاد کند که مدل میتواند بیش از آنچه برای انجام آن آموزش دیده است انجام دهد. بخشهای زیر موارد استفاده مورد نظر برای سفارشیسازی و نمونههای غیر جامع از موارد استفاده ناخواسته را شرح میدهند.
ما استفاده از این قابلیت را برای موارد استفاده مورد نظر توصیه می کنیم، زیرا ما این مدل را روی آن موارد استفاده آموزش داده ایم و انتظار نتایج خوبی برای آنها داریم. برعکس، اگر مدل را به انجام کارهایی خارج از موارد استفاده مورد نظر سوق دهید، باید انتظار نتایج ضعیفی را داشته باشید.
موارد استفاده مورد نظر
موارد زیر موارد استفاده در نظر گرفته شده برای سفارشی سازی بر اساس یک کنترل هستند:
تصویری را ایجاد کنید که از دستورات و تصاویر کنترل لبههای ساده پیروی میکند.
تصویری را ایجاد کنید که از دستورات و تصاویر خط خطی پیروی کند.
با حفظ حالت چهره، عکس یک شخص را سبک کنید.
نمونه هایی از موارد استفاده ناخواسته
در زیر لیستی غیر جامع از موارد استفاده ناخواسته برای سفارشی سازی بر اساس یک کنترل آمده است. این مدل برای این موارد استفاده آموزش ندیده است و احتمالاً نتایج ضعیفی خواهد داشت.
یک تصویر با استفاده از سبک مشخص شده در اعلان ایجاد کنید.
تصویری از متن ایجاد کنید که از سبک خاصی پیروی می کند که توسط یک تصویر مرجع ارائه شده است، با سطحی از کنترل بر روی ترکیب تصویر با استفاده از تصویر کنترل.
تصویری از متن ایجاد کنید که از سبک خاصی پیروی می کند که توسط یک تصویر مرجع ارائه شده است، با سطحی از کنترل بر روی ترکیب تصویر با استفاده از یک خط خطی کنترلی.
با استفاده از یک تصویر کنترلی، تصویری از متن ایجاد کنید که از سبک خاصی که توسط تصویر مرجع ارائه شده است، پیروی می کند. شخص در تصویر حالت چهره خاصی دارد.
عکس دو یا چند نفر را سبک کنید و حالات چهره آنها را حفظ کنید.
عکس یک حیوان خانگی را سبک کنید و آن را به نقاشی تبدیل کنید. ترکیب تصویر را حفظ یا مشخص کنید (مثلاً آبرنگ).