בדף הזה מוסבר איך להשתמש ביכולת ההתאמה האישית מ-Imagen כדי לערוך או ליצור תמונות על סמך נושא שצוין באמצעות ערכות ה-SDK של Firebase AI Logic.
איך זה עובד: אתם מספקים הנחיית טקסט ולפחות תמונה לדוגמה אחת שבה מוצג נושא ספציפי (כמו מוצר, אדם או חיית מחמד). המודל משתמש בקלט הזה כדי ליצור תמונה חדשה שמבוססת על הנושא שצוין בתמונות לדוגמה.
לדוגמה, אתם יכולים לבקש מהמודל להחיל סגנון קריקטורה על תמונה של ילד או לשנות את הצבע של אופניים בתמונה.
לפני שמתחילים
אפשרות זמינה רק כשמשתמשים ב-Vertex AI Gemini API כספק ה-API. |
אם עדיין לא עשיתם את זה, עליכם להשלים את השלבים במדריך תחילת העבודה. במדריך הזה מוסבר איך להגדיר את פרויקט Firebase, לקשר את האפליקציה ל-Firebase, להוסיף את ה-SDK, לאתחל את שירות ה-Backend של ספק ה-API שבחרתם וליצור מופע של ImagenModel
.
מודלים שתומכים ביכולת הזו
Imagen מציע עריכת תמונות באמצעות מודל capability
:
imagen-3.0-capability-001
הערה: בImagen מודלים, המיקום global
לא נתמך.
שליחת בקשה להתאמה אישית של נושא
בדוגמה הבאה מוצגת בקשה להתאמה אישית של הנושא, שבה המודל מתבקש ליצור תמונה חדשה על סמך תמונת ההפניה שסופקה (בדוגמה הזו, חתול). חתול הוא בעל חיים, ולכן סוג הנושא הוא ImagenSubjectReferenceType.ANIMAL
.
אם הנושא הוא אדם או מוצר, אפשר להשתמש גם בדוגמה הזו, אבל עם השינויים הבאים:
אם הנושא הוא אדם, צריך להשתמש בסוג הנושא
ImagenSubjectReferenceType.PERSON
. אפשר לשלוח בקשה כזו עם או בלי תמונה לבקרת רשת הפנים כדי להנחות את יצירת התמונה.אם הנושא הוא מוצר, משתמשים בסוג הנושא
ImagenSubjectReferenceType.PRODUCT
.
בהמשך הדף הזה מפורטות תבניות של הנחיות. תוכלו לקרוא על כתיבת הנחיות ועל שימוש בתמונות להשוואה בתוך ההנחיות.
Swift
אין תמיכה בעריכת תמונות באמצעות מודלים של 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(
references = 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 = 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');
}
Unity
אין תמיכה בעריכת תמונות באמצעות מודלים של Imagen ב-Unity. כדאי לחזור לכאן בהמשך השנה.
תבניות להנחיות
בבקשה, אתם מספקים תמונות להשוואה (עד 4 תמונות) על ידי הגדרת תג ImagenSubjectReference
שבו מציינים מזהה של תמונה (ואפשר גם תיאור של הנושא). שימו לב: יכול להיות שלכמה תמונות יהיה אותו מזהה הפניה (למשל, כמה תמונות של אותו חתול).
אחר כך, כשכותבים את ההנחיה, מציינים את המזהים האלה. לדוגמה, משתמשים ב-[1]
בהנחיה כדי להפנות לתמונות עם מזהה ההפניה 1
. אם מספקים תיאור של הנושא, אפשר לכלול אותו בהנחיה כדי שיהיה קל יותר לקרוא אותה.
בטבלה הבאה מפורטות תבניות של הנחיות שיכולות לשמש כנקודת התחלה לכתיבת הנחיות להתאמה אישית על סמך נושא (כמו מוצר, אדם או חיית מחמד).
תרחיש לדוגמה | תמונות לדוגמה | תבנית הנחיה | דוגמה |
---|---|---|---|
עיצוב תמונות מוצרים – מודעה | תמונת הנושא (עד 4) | צור תמונה בנושא SUBJECT_DESCRIPTION [1] שתתאים לתיאור: ${PROMPT} |
צור תמונה בנושא Luxe Elixir hair oil, golden liquid in glass bottle [1] שתתאים לתיאור: תמונה בתאורה גבוהה של יד של אישה שמחזיקה Luxe Elixir hair oil, golden liquid in glass bottle [1] על רקע לבן. היד של האישה מוארת היטב והפוקוס חד על הבקבוק, עם עומק שדה רדוד שמטשטש את הרקע ומדגיש את המוצר. התאורה רכה ומפוזרת, ויוצרת זוהר עדין מסביב לבקבוק וליד. הקומפוזיציה הכוללת פשוטה ואלגנטית, ומדגישה את המראה היוקרתי של המוצר. |
עיצוב תמונת מוצר – שינוי מאפיין | תמונת הנושא (עד 4) | ליצור תמונה של SUBJECT_DESCRIPTION אבל ${PROMPT} |
תצור תמונה של Seiko watch [1] אבל בכחול. |
סגנון תמונה של אדם ללא קלט של רשת פנים | תמונת הנושא (עד 4) | צור תמונה של SUBJECT_DESCRIPTION [1] שתתאים לתיאור: דיוקן של SUBJECT_DESCRIPTION [1] ${PROMPT} | תמונה של a woman with short hair[1] שתתאים לתיאור: דיוקן של a woman with short hair[1] בסגנון סרטים מצוירים בתלת ממד עם רקע מטושטש. דמות חמודה ומקסימה, עם פנים מחייכות, מביטה למצלמה, גוון צבעי פסטל ... |
סגנון תמונה של אדם ללא קלט של רשת פנים | תמונת הנושא (עד 4) | תצור תמונה של STYLE_DESCRIPTION [2] שתתאים לתיאור הבא: פורטרט של SUBJECT_DESCRIPTION [1] STYLE_PROMPTSUBJECT_DESCRIPTION [1] | תצור תמונה של 3d-cartoon style [2] בנושא a woman with short hair [1] שתתאים לתיאור הבא: פורטרט של a woman with short hair [1] בסגנון סרטים מצוירים בתלת ממד עם רקע מטושטש. דמות חמודה ומקסימה, עם פנים מחייכות, שמסתכלת על המצלמה, גוון צבעי פסטל ... |
עיצוב תמונה של אדם עם קלט של רשת פנים |
תמונת הנושא (עד 3) תמונה לשליטה ברשת הפנים (1) |
ליצור תמונה של SUBJECT_DESCRIPTION [1] עם Face mesh from the control image [2]. ${PROMPT} | תמונה של the person [1] עם face mesh from the control image [2]. האדם צריך להסתכל ישר קדימה עם הבעת פנים ניטרלית. הרקע צריך להיות |
עיצוב תמונה של אדם עם קלט של רשת פנים |
תמונת הנושא (עד 3) תמונה לשליטה ברשת הפנים (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] בסגנון קריקטורה בתלת-ממד עם רקע מטושטש. דמות חמודה ומקסימה עם פנים מחייכות, שמסתכלת למצלמה, בגווני פסטל ... |
עיצוב תמונה של אדם עם קלט של רשת פנים |
תמונת הנושא (עד 3) תמונה לשליטה ברשת הפנים (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] בסגנון קריקטורה בתלת-ממד עם רקע מטושטש. דמות חמודה ומקסימה עם פנים מחייכות, שמסתכלת למצלמה, גוון פסטלי ... |
שיטות מומלצות ומגבלות
אם אתם משתמשים באדם כנושא, מומלץ שהפנים בתמונת ההפניה יהיו עם המאפיינים הבאים:
- התמונה ממוקמת במרכז ותופסת לפחות חצי מהתמונה כולה
- הוא מסובב בתצוגה חזיתית בכל הכיוונים (גלגול, עלרוד וסבסוב)
- לא מוסתר על ידי חפצים, כמו משקפי שמש או מסיכות
תרחישים לדוגמה
היכולת להתאים אישית מאפשרת להזין הנחיות בסגנון חופשי, ולכן יכול להיווצר הרושם שהמודל יכול לעשות יותר ממה שהוא אומן לעשות. בקטעים הבאים מתוארים תרחישי שימוש מיועדים להתאמה אישית, ודוגמאות לא מיועדות לשימוש.
מומלץ להשתמש ביכולת הזו בתרחישי השימוש המיועדים, כי אימנו את המודל על תרחישי השימוש האלה ואנחנו צופים תוצאות טובות. לעומת זאת, אם תנסו להשתמש במודל למטרות שלא לשמן הוא נועד, התוצאות יהיו גרועות.
תרחישים לדוגמה לשימוש
הנה כמה תרחישי שימוש מיועדים להתאמה אישית על סמך נושא:
ליצור סגנון לתמונה של אדם.
ליצור סגנון לתמונה של אדם ולשמור על הבעות הפנים שלו.
(סיכוי נמוך להצלחה) הצבת מוצר, כמו ספה או עוגייה, בסצנות שונות עם זוויות שונות של המוצר.
יצירת וריאציות של מוצר שלא שומרות על פרטים מדויקים.
יצירת סגנון לתמונה של אדם, תוך שמירה על הבעת הפנים.
דוגמאות לתרחישי שימוש לא מכוונים
הרשימה הבאה היא רשימה חלקית של תרחישי שימוש לא מכוונים בהתאמה אישית על סמך נושא. המודל לא אומן לתרחישי השימוש האלה, וסביר להניח שהוא יפיק תוצאות לא טובות.
הצבת שני אנשים או יותר בסצנות שונות תוך שמירה על הזהויות שלהם.
הצבת שני אנשים או יותר בסצנות שונות תוך שמירה על הזהות שלהם והגדרת הסגנון של תמונת הפלט באמצעות תמונה לדוגמה כקלט לסגנון.
ליצור סגנון לתמונה של שני אנשים או יותר בלי לשנות את הזהות שלהם.
הוספת חיית מחמד לסצנות שונות תוך שמירה על הזהות שלה.
ליצור סגנון לתמונה של חיית מחמד ולהפוך אותה לציור.
ליצור סגנון לתמונה של חיית מחמד ולהפוך אותה לציור, תוך שמירה או ציון של סגנון התמונה (למשל, צבעי מים).
העברה של חיית מחמד ואדם לסצנה אחרת, תוך שמירה על הזהויות של שניהם.
אפשר להוסיף סגנון לתמונה של חיית מחמד ואדם אחד או יותר ולהפוך אותה לציור.
ממקמים שני מוצרים בסצנות שונות עם זוויות שונות של המוצרים.
הנחיה: צור תמונות של מוצר, למשל עוגייה או ספה, בסצנות שונות עם זוויות שונות של המוצר, בסגנון תמונה ספציפי (למשל פוטוריאליסטי עם צבעים ספציפיים, סגנונות תאורה או אנימציה).
העברה של מוצר לסצנה אחרת, תוך שמירה על הקומפוזיציה הספציפית של הסצנה כפי שצוין בתמונת הבקרה.
ממקמים שני מוצרים בסצנות שונות עם זוויות שונות של המוצרים, באמצעות תמונה ספציפית כקלט (למשל פוטוריאליסטית עם צבעים ספציפיים, סגנונות תאורה או אנימציה).
ממקמים שני מוצרים בסצנות שונות, תוך שמירה על הקומפוזיציה הספציפית של הסצנה כפי שצוין בתמונת הבקרה.