इस पेज पर, Firebase AI Logic SDK टूल का इस्तेमाल करके, Imagen की कस्टमाइज़ेशन केपबिलिटी का इस्तेमाल करने का तरीका बताया गया है. इस सुविधा की मदद से, किसी तय कंट्रोल के आधार पर इमेज में बदलाव किया जा सकता है या नई इमेज जनरेट की जा सकती है.
यह कैसे काम करता है: आपको एक टेक्स्ट प्रॉम्प्ट और कम से कम एक कंट्रोल रेफ़रंस के लिए इमेज (जैसे कि कोई ड्राइंग या कैन्यी एज इमेज) देनी होती है. मॉडल, इन इनपुट का इस्तेमाल करके कंट्रोल इमेज के आधार पर नई इमेज जनरेट करता है.
उदाहरण के लिए, मॉडल को रॉकेट शिप और चांद की ड्राइंग के साथ-साथ टेक्स्ट प्रॉम्प्ट दिया जा सकता है. इससे मॉडल, ड्राइंग के आधार पर वॉटरकलर पेंटिंग बना सकता है.
कंट्रोल रेफ़रंस इमेज के टाइप
कंट्रोल के साथ पसंद के मुताबिक बनाने के लिए, रेफ़रंस इमेज के तौर पर स्क्रैबल, कैन्यी एज इमेज या फेस मेश का इस्तेमाल किया जा सकता है.
शुरू करने से पहले
| यह सुविधा सिर्फ़ तब उपलब्ध होती है, जब Agent Platform Gemini API (formerly Vertex AI) को एपीआई सेवा देने वाली कंपनी के तौर पर इस्तेमाल किया जा रहा हो. |
अगर आपने अब तक शुरुआती गाइड नहीं पढ़ी है, तो इसे पढ़ें. इसमें बताया गया है कि Firebase प्रोजेक्ट कैसे सेट अप करें, अपने ऐप्लिकेशन को Firebase से कैसे कनेक्ट करें, एसडीके कैसे जोड़ें, चुने गए एपीआई उपलब्ध कराने वाली कंपनी के लिए बैकएंड सेवा को कैसे शुरू करें, और ImagenModel इंस्टेंस कैसे बनाएं.
इस सुविधा के साथ काम करने वाले मॉडल
Imagen अपने capability मॉडल के ज़रिए इमेज एडिटिंग की सुविधा देता है:
imagen-3.0-capability-001
ध्यान दें कि Imagen मॉडल के लिए, global लोकेशन की जानकारी नहीं दी जा सकती.
कंट्रोल की गई कस्टम सेटिंग का अनुरोध भेजना
नीचे दिए गए सैंपल में, कंट्रोल की गई कस्टम इमेज जनरेट करने का अनुरोध दिखाया गया है. इसमें मॉडल से, दी गई रेफ़रंस इमेज के आधार पर नई इमेज जनरेट करने के लिए कहा गया है. इस उदाहरण में, स्पेस की एक ड्राइंग दी गई है, जैसे कि रॉकेट और चांद. रेफ़रंस इमेज, हाथ से बनाया गया रफ़ स्केच या आउटलाइन है. इसलिए, इसमें CONTROL_TYPE_SCRIBBLE कंट्रोल टाइप का इस्तेमाल किया गया है.
अगर आपकी रेफ़रंस के लिए इमेज, कैन्य एज इमेज या फेस मेश है, तो इस उदाहरण का इस्तेमाल भी किया जा सकता है. हालांकि, इसमें ये बदलाव करने होंगे:
अगर आपकी रेफ़रंस के लिए इमेज, कैन्य एज इमेज है, तो
CONTROL_TYPE_CANNYकंट्रोल टाइप का इस्तेमाल करें.अगर आपकी रेफ़रंस के लिए इमेज एक फ़ेस मेश है, तो
CONTROL_TYPE_FACE_MESHकंट्रोल टाइप का इस्तेमाल करें. इस कंट्रोल का इस्तेमाल सिर्फ़ लोगों के हिसाब से विषय को पसंद के मुताबिक बनाने की सुविधा के साथ किया जा सकता है.
प्रॉम्प्ट लिखने और उनमें रेफ़रंस इमेज इस्तेमाल करने के बारे में जानने के लिए, इस पेज पर बाद में प्रॉम्प्ट टेंप्लेट देखें.
Swift
Swift के लिए, Imagen मॉडल की मदद से इमेज में बदलाव करने की सुविधा उपलब्ध नहीं है. इस साल के आखिर में फिर से देखें!
Kotlin
// Using this SDK to access Imagen models is a Preview release and requires opt-in
@OptIn(PublicPreviewAPI::class)
suspend fun customizeImage() {
// Initialize the Agent Platform Gemini API backend service (formerly branded Vertex AI).
// 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 Agent Platform Gemini API backend service (formerly branded Vertex AI).
// 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 Agent Platform Gemini API backend service (formerly branded Vertex AI).
// 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');
}
Unity
Unity के लिए, Imagen मॉडल की मदद से इमेज में बदलाव करने की सुविधा काम नहीं करती. इस साल के आखिर में फिर से देखें!
प्रॉम्प्ट टेंप्लेट
अनुरोध में, आपको रेफ़रंस इमेज (ज़्यादा से ज़्यादा चार इमेज) देनी होती हैं. इसके लिए, आपको 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] की पोर्ट्रेट इमेज, 3D-कार्टून स्टाइल में और धुंधले बैकग्राउंड के साथ. एक प्यारा और सुंदर किरदार, मुस्कुराते हुए चेहरे के साथ, कैमरे की ओर देख रहा है, हल्के रंग का टोन ... |
| FaceMesh इनपुट की मदद से, किसी व्यक्ति की इमेज को स्टाइल करना |
सब्जेक्ट की इमेज (1-3) FaceMesh कंट्रोल इमेज (1) |
CONTROL_IMAGE [2] के पोज़ में SUBJECT_DESCRIPTION [1] की ${STYLE_PROMPT} इमेज बनाओ, ताकि वह इस ब्यौरे से मेल खाए: SUBJECT_DESCRIPTION [1] का पोर्ट्रेट ${PROMPT} | control image [2] की पोज़ में a woman with short hair [1] की 3D-कार्टून स्टाइल वाली इमेज बनाओ, ताकि वह इस ब्यौरे से मेल खाए: a woman with short hair [1] का पोर्ट्रेट 3D-कार्टून स्टाइल में, जिसमें बैकग्राउंड धुंधला हो. एक प्यारा और सुंदर किरदार, मुस्कुराते हुए चेहरे के साथ कैमरे की ओर देख रहा है, हल्के रंग का टोन ... |
सबसे सही तरीके और सीमाएं
इस्तेमाल के उदाहरण
कस्टम बनाने की सुविधा में, फ़्री-स्टाइल प्रॉम्प्ट की सुविधा मिलती है. इससे ऐसा लग सकता है कि मॉडल, ट्रेनिंग के दौरान सीखी गई बातों के अलावा भी कई काम कर सकता है. यहां दिए गए सेक्शन में, कस्टम बनाने की सुविधा के इस्तेमाल के सही उदाहरण के बारे में बताया गया है. साथ ही, इस्तेमाल के गलत उदाहरण के बारे में भी बताया गया है. हालांकि, ये उदाहरण पूरी तरह से नहीं दिए गए हैं.
हमारा सुझाव है कि आप इस सुविधा का इस्तेमाल, उन मामलों के लिए करें जिनके लिए इसे बनाया गया है. ऐसा इसलिए, क्योंकि हमने मॉडल को उन मामलों के हिसाब से ट्रेन किया है. इसलिए, हमें उम्मीद है कि आपको अच्छे नतीजे मिलेंगे. इसके उलट, अगर मॉडल को ऐसे काम करने के लिए कहा जाता है जो उसके इस्तेमाल के मकसद से अलग हैं, तो आपको खराब नतीजे मिल सकते हैं.
इस्तेमाल के उदाहरण
इस्तेमाल के ये उदाहरण, कंट्रोल के आधार पर बदलाव करने के लिए हैं:
ऐसी इमेज जनरेट करो जो प्रॉम्प्ट और कैन्य एज कंट्रोल इमेज के मुताबिक हो.
ऐसी इमेज जनरेट करो जो प्रॉम्प्ट और स्क्रिबल इमेज के मुताबिक हो.
किसी व्यक्ति की फ़ोटो को स्टाइल में बदलो. हालांकि, उसके चेहरे के भाव को वैसा ही रखो.
इस्तेमाल के ऐसे उदाहरण जो मकसद के मुताबिक नहीं हैं
यहां कंट्रोल के आधार पर, पसंद के मुताबिक बनाए गए अनचाहे इस्तेमाल के उदाहरणों की पूरी सूची नहीं दी गई है. मॉडल को इन उदाहरणों के लिए ट्रेन नहीं किया गया है. इसलिए, हो सकता है कि यह सही नतीजे न दे.
प्रॉम्प्ट में बताई गई स्टाइल का इस्तेमाल करके इमेज जनरेट करें.
टेक्स्ट से ऐसी इमेज जनरेट करें जो रेफ़रंस इमेज में दी गई स्टाइल के मुताबिक हो. साथ ही, कंट्रोल इमेज का इस्तेमाल करके इमेज कंपोज़िशन को कुछ हद तक कंट्रोल किया जा सके.
टेक्स्ट से ऐसी इमेज जनरेट करें जो रेफ़रंस इमेज में दी गई स्टाइल के मुताबिक हो. साथ ही, कंट्रोल स्क्रिबल का इस्तेमाल करके इमेज कंपोज़िशन को कुछ हद तक कंट्रोल किया जा सके.
टेक्स्ट से ऐसी इमेज जनरेट करें जो रेफ़रंस इमेज में दी गई स्टाइल के मुताबिक हो. साथ ही, कंट्रोल इमेज का इस्तेमाल करके इमेज कंपोज़िशन को कुछ हद तक कंट्रोल किया जा सके. इमेज में मौजूद व्यक्ति के चेहरे पर कोई खास भाव हो.
दो या इससे ज़्यादा लोगों की फ़ोटो को स्टाइल में बदलो और उनके चेहरे के भाव को बरकरार रखो.
किसी पालतू जानवर की फ़ोटो को स्टाइल में बदलें और उसे ड्रॉइंग में बदलें. इमेज की कंपोज़िशन को बनाए रखें या उसके बारे में बताएं (उदाहरण के लिए, वॉटरकलर).