MediaPipe इमेज जनरेटर टास्क की मदद से, टेक्स्ट प्रॉम्प्ट के आधार पर इमेज जनरेट की जा सकती हैं. यह टास्क, टेक्स्ट-टू-इमेज मॉडल का इस्तेमाल करता है, ताकि डिफ़्यूज़न तकनीकों का इस्तेमाल करके इमेज जनरेट की जा सकें.
यह टास्क, इनपुट के तौर पर टेक्स्ट प्रॉम्प्ट के साथ-साथ, शर्त की वैकल्पिक इमेज भी स्वीकार करता है जिसे मॉडल, बेहतर बनाने के साथ-साथ, जनरेट करने के लिए रेफ़रंस के तौर पर इस्तेमाल कर सके. इमेज जनरेटर के दौरान मॉडल को प्रदान किए गए विशिष्ट सिद्धांतों के आधार पर भी चित्र जनरेट कर सकता है ट्रेनिंग या फिर से ट्रेनिंग मोड में हैं. अधिक जानकारी के लिए, देखें इसके साथ कस्टमाइज़ करें LoRA.
इन निर्देशों में बताया गया कोड सैंपल यहां उपलब्ध है GitHub. क्षमताओं, मॉडल, और कॉन्फ़िगरेशन के विकल्पों के बारे में ज़्यादा जानकारी पाने के लिए इस टास्क की खास जानकारी देखें.
कोड का उदाहरण
MediaPipe Tasks का उदाहरण कोड, इमेज जनरेटर को बुनियादी तौर पर लागू करने का तरीका है Android के लिए ऐप. अपने Android डिवाइस पर, इस ऐप्लिकेशन को इस्तेमाल करना शुरू करें या किसी मौजूदा ऐप्लिकेशन में बदलाव करते समय इसे देखें. इमेज जनरेटर का उदाहरण कोड इस पर होस्ट किया जाता है GitHub.
कोड डाउनलोड करें
नीचे दिए गए निर्देशों में आपको उदाहरण की स्थानीय कॉपी बनाने का तरीका बताया गया है git कमांड लाइन टूल का इस्तेमाल करके कोड बनाना और उसमें बदलाव करना.
उदाहरण कोड डाउनलोड करने के लिए:
- नीचे दिए गए कमांड का इस्तेमाल करके git रिपॉज़िटरी का क्लोन बनाएं:
git clone https://github.com/google-ai-edge/mediapipe-samples
- वैकल्पिक रूप से, विरल चेकआउट का इस्तेमाल करने के लिए अपने git इंस्टेंस को कॉन्फ़िगर करें, ताकि
सिर्फ़ इमेज जनरेटर के उदाहरण ऐप्लिकेशन की फ़ाइलें:
cd mediapipe git sparse-checkout init --cone git sparse-checkout set examples/image_generator/android
उदाहरण के तौर पर दिए गए कोड का लोकल वर्शन बनाने के बाद, प्रोजेक्ट को इंपोर्ट किया जा सकता है और इस ऐप्लिकेशन को चलाएं. निर्देशों के लिए, Android.
मुख्य कॉम्पोनेंट
इमेज जनरेट करने के इस उदाहरण के लिए, इन फ़ाइलों में ज़रूरी कोड शामिल है ऐप्लिकेशन:
- ImageGenerationHelper.kt: टास्क को शुरू करता है और इमेज जनरेट करने की प्रोसेस को हैंडल करता है.
- DiffusionActivity.kt: प्लगिन या LoRA वज़न के चालू न होने पर इमेज जनरेट करता है.
- PluginActivity.kt: प्लगिन मॉडल लागू करता है, जो उपयोगकर्ताओं को कोई शर्त देने में मदद करता है इनपुट के रूप में इमेज दी गई है.
- LoRAWeightActivity.kt: एलओआरए वेट को ऐक्सेस और मैनेज करता है. इसका इस्तेमाल बुनियाद को पसंद के मुताबिक बनाने के लिए किया जाता है मॉडल बनाए जा सकते हैं और उन्हें खास कॉन्सेप्ट की इमेज जनरेट करने में मदद की जा सकती है.
सेटअप
इस सेक्शन में, आपके डेवलपमेंट एनवायरमेंट को सेट अप करने और कोड प्रोजेक्ट का इस्तेमाल किया जा सकता है. इस पर सामान्य जानकारी के लिए MediaPipe के टास्क इस्तेमाल करने के लिए डेवलपमेंट एनवायरमेंट सेट अप करना. इसमें ये भी शामिल हैं प्लैटफ़ॉर्म वर्शन की ज़रूरी शर्तें, Google के सभी प्रॉडक्ट के लिए सेटअप गाइड Android.
डिपेंडेंसी
इमेज जनरेट करने वाला टास्क,
com.google.mediapipe:tasks-vision-image-generator
लाइब्रेरी. यह डिपेंडेंसी जोड़ें
आपके Android ऐप्लिकेशन की build.gradle
फ़ाइल में:
dependencies {
implementation 'com.google.mediapipe:tasks-vision-image-generator:latest.release'
}
Android 12 (एपीआई 31) या उसके बाद के वर्शन वाले डिवाइसों के लिए, नेटिव OpenCL लाइब्रेरी जोड़ें
AndroidManifest.xml
पर निर्भरता. ज़्यादा जानकारी के लिए,
uses-native-library
टैग के साथ जोड़ा जा सकता है.
कुछ Android डिवाइसों के लिए अतिरिक्त लाइब्रेरी की ज़रूरत भी पड़ सकती है:
<uses-native-library android:name="libOpenCL.so" android:required="false" />
<uses-native-library android:name="libOpenCL-car.so" android:required="false"/>
<uses-native-library android:name="libOpenCL-pixel.so" android:required="false" />
मॉडल
MediaPipe इमेज जनरेटर टास्क के लिए, ट्रेनिंग पा चुके फ़ाउंडेशन मॉडल की ज़रूरत होती है इस टास्क को पूरा करें. मॉडल डाउनलोड करने के बाद, ज़रूरी डिपेंडेंसी इंस्टॉल करें और मॉडल को सही फ़ॉर्मैट में बदलो. फिर, कन्वर्ट किए गए फ़ोल्डर को पुश करें मॉडल को Android डिवाइस में ट्रांसफ़र करना है.
अगर आपको इमेज जनरेटर के लिए ट्रेन किए गए मॉडल के बारे में ज़्यादा जानकारी चाहिए, तो टास्क देखें मॉडल सेक्शन की खास जानकारी.
फ़ाउंडेशन मॉडल डाउनलोड करें
इमेज जनरेटर का इस्तेमाल करने के लिए यह ज़रूरी है कि फ़ाउंडेशन मॉडल
इनके आधार पर, runwayml/stable-diffusion-v1-5 EMA-only
मॉडल का फ़ॉर्मैट
मॉडल:
runwayml/stable-diffusion-v1-5.
डिपेंडेंसी इंस्टॉल करें और मॉडल को बदलें
$ pip install torch typing_extensions numpy Pillow requests pytorch_lightning absl-py
यह चलाकर देखेंः
convert.py
स्क्रिप्ट:
$ python3 convert.py --ckpt_path <ckpt_path> --output_path <output_path>
बदले गए मॉडल को डिवाइस पर पुश करें
<output_path>
फ़ोल्डर की सामग्री को Android डिवाइस में पुश करें.
$ adb shell rm -r /data/local/tmp/image_generator/ # Remove any previously loaded weights
$ adb shell mkdir -p /data/local/tmp/image_generator/
$ adb push <output_path>/. /data/local/tmp/image_generator/bins
प्लगिन मॉडल डाउनलोड करें और LoRA का वज़न जोड़ें (ज़रूरी नहीं)
अगर आपको किसी प्लग इन मॉडल का इस्तेमाल करना है, तो देखें कि मॉडल इसे डाउनलोड करना ज़रूरी है. जिन प्लगिन को अतिरिक्त मॉडल की ज़रूरत होती है उनके लिए, प्लगिन मॉडल को या तो APK में बंडल किया जाना चाहिए या मांग पर डाउनलोड किया जाना चाहिए. प्लग इन मॉडल जिनका साइज़ हल्का (~23 एमबी) है और उन्हें सीधे APK में बंडल किया जा सकता है. हालांकि, हम मांग पर प्लगिन मॉडल डाउनलोड करने का सुझाव दिया जाता है.
यदि आपने के साथ एक मॉडल कस्टमाइज़ किया है, लोआरए, उन्हें मांग पर डाउनलोड कर सकते हैं. ज़्यादा के लिए जानकारी के लिए, LoRA वेट प्लग इन मॉडल देखें.
टास्क बनाएं
MediaPipe इमेज जनरेटर टास्क, इमेज जनरेट करने के लिए createFromOptions()
फ़ंक्शन का इस्तेमाल करता है
टास्क. createFromOptions()
फ़ंक्शन, कॉन्फ़िगरेशन के लिए वैल्यू स्वीकार करता है
के विकल्प. कॉन्फ़िगरेशन के विकल्पों के बारे में ज़्यादा जानकारी पाने के लिए, कॉन्फ़िगरेशन देखें
विकल्प.
कॉन्फ़िगरेशन विकल्प
इस टास्क में Android ऐप्लिकेशन के लिए, नीचे दिए गए कॉन्फ़िगरेशन के विकल्प मौजूद हैं:
विकल्प का नाम | ब्यौरा | मान की सीमा |
---|---|---|
imageGeneratorModelDirectory |
इमेज जनरेटर मॉडल डायरेक्ट्री, जिसमें मॉडल का वज़न सेव किया जाता है. | PATH |
loraWeightsFilePath |
LoRA वेट फ़ाइल का पाथ सेट करता है. ज़रूरी नहीं है और सिर्फ़ तब लागू होता है, जब मॉडल को LoRA की मदद से कस्टमाइज़ किया गया. | PATH |
errorListener |
गड़बड़ी की जानकारी देने वाला वैकल्पिक लिसनर सेट करता है. | N/A |
यह टास्क, प्लगिन मॉडल के साथ भी काम करता है. इसकी मदद से, लोग शर्त वाली इमेज शामिल कर सकते हैं जिसे फ़ाउंडेशन मॉडल, बेहतर तरीके से बेहतर बना सकता है और रेफ़रंस के तौर पर इस्तेमाल कर सकता है इस्तेमाल किया जा सकता है. स्थिति बताने वाली इन इमेज में चेहरे का लैंडमार्क, किनारों की आउटलाइन, और ज़्यादा जानकारी का अनुमान लगाने के लिए, जिनका इस्तेमाल मॉडल ज़्यादा कॉन्टेक्स्ट और जानकारी के तौर पर करता है, ताकि इमेज जनरेट करने के लिए.
फ़ाउंडेशन मॉडल में प्लगिन मॉडल जोड़ते समय, प्लगिन को भी कॉन्फ़िगर करें
के विकल्प. फ़ेस लैंडमार्क प्लगिन faceConditionOptions
, कैनी एज का इस्तेमाल करता है
प्लगिन edgeConditionOptions
का इस्तेमाल करता है और डेप्थ प्लगिन
depthConditionOptions
.
कैनी एज के विकल्प
edgeConditionOptions
में ये विकल्प कॉन्फ़िगर करें.
विकल्प का नाम | ब्यौरा | मान की सीमा | डिफ़ॉल्ट मान |
---|---|---|---|
threshold1 |
हायस्टेरेसिस प्रोसेस के लिए पहला थ्रेशोल्ड. | Float |
100 |
threshold2 |
हायस्टेरेसिस प्रोसेस के लिए दूसरा थ्रेशोल्ड. | Float |
200 |
apertureSize |
Sobel ऑपरेटर के लिए एपर्चर का साइज़. सामान्य रेंज 3 से 7 के बीच है. | Integer |
3 |
l2Gradient |
क्या इमेज ग्रेडिएंट की मात्रा का हिसाब लगाने के लिए L2 मानदंड का इस्तेमाल किया जाता है, डिफ़ॉल्ट L1 नॉर्म के बजाय होगी. | BOOLEAN |
False |
EdgePluginModelBaseOptions |
BaseOptions ऑब्जेक्ट, जो पाथ सेट करता है
. |
BaseOptions ऑब्जेक्ट |
N/A |
कॉन्फ़िगरेशन के ये विकल्प कैसे काम करते हैं, इस बारे में ज़्यादा जानने के लिए यहां जाएं कैनी एज डिटेक्टर.
चेहरे से जुड़े लैंडमार्क के विकल्प
faceConditionOptions
में ये विकल्प कॉन्फ़िगर करें.
विकल्प का नाम | ब्यौरा | मान की सीमा | डिफ़ॉल्ट मान |
---|---|---|---|
minFaceDetectionConfidence |
चेहरे की पहचान के लिए कम से कम कॉन्फ़िडेंस स्कोर इतना होना चाहिए सफल माना जाता है. | Float [0.0,1.0] |
0.5 |
minFacePresenceConfidence |
चेहरे की मौजूदगी का कम से कम कॉन्फ़िडेंस स्कोर स्कोर करने के लिए कहें. | Float [0.0,1.0] |
0.5 |
faceModelBaseOptions |
BaseOptions ऑब्जेक्ट, जो पाथ सेट करता है
इस्तेमाल किया जा सकता है. |
BaseOptions ऑब्जेक्ट |
N/A |
FacePluginModelBaseOptions |
BaseOptions ऑब्जेक्ट, जो पाथ सेट करता है
. |
BaseOptions ऑब्जेक्ट |
N/A |
इन कॉन्फ़िगरेशन के विकल्पों के काम करने के तरीके के बारे में ज़्यादा जानने के लिए, फ़ेस लैंडमार्कर टास्क.
डेप्थ के विकल्प
depthConditionOptions
में ये विकल्प कॉन्फ़िगर करें.
विकल्प का नाम | ब्यौरा | मान की सीमा | डिफ़ॉल्ट मान |
---|---|---|---|
depthModelBaseOptions |
BaseOptions ऑब्जेक्ट, जो पाथ सेट करता है
इस्तेमाल किया जा सकता है. |
BaseOptions ऑब्जेक्ट |
N/A |
depthPluginModelBaseOptions |
BaseOptions ऑब्जेक्ट, जो पाथ सेट करता है
. |
BaseOptions ऑब्जेक्ट |
N/A |
सिर्फ़ फ़ाउंडेशन मॉडल का इस्तेमाल करें
val options = ImageGeneratorOptions.builder()
.setImageGeneratorModelDirectory(modelPath)
.build()
imageGenerator = ImageGenerator.createFromOptions(context, options)
प्लगिन की मदद से बनाएं
अगर वैकल्पिक प्लगिन मॉडल लागू किया जा रहा है, तो
setPluginModelBaseOptions
वाला प्लगिन मॉडल. अगर प्लगिन मॉडल को किसी
शर्त वाली इमेज बनाने के लिए अतिरिक्त डाउनलोड किया गया मॉडल, तो
BaseOptions
.
चेहरे का लैंडमार्क
val options = ImageGeneratorOptions.builder() .setImageGeneratorModelDirectory(modelPath) .build() val faceModelBaseOptions = BaseOptions.builder() .setModelAssetPath("face_landmarker.task") .build() val facePluginModelBaseOptions = BaseOptions.builder() .setModelAssetPath("face_landmark_plugin.tflite") .build() val faceConditionOptions = FaceConditionOptions.builder() .setFaceModelBaseOptions(faceModelBaseOptions) .setPluginModelBaseOptions(facePluginModelBaseOptions) .setMinFaceDetectionConfidence(0.3f) .setMinFacePresenceConfidence(0.3f) .build() val conditionOptions = ConditionOptions.builder() .setFaceConditionOptions(faceConditionOptions) .build() imageGenerator = ImageGenerator.createFromOptions(context, options, conditionOptions)
कैनी एज
val options = ImageGeneratorOptions.builder() .setImageGeneratorModelDirectory(modelPath) .build() val edgePluginModelBaseOptions = BaseOptions.builder() .setModelAssetPath("canny_edge_plugin.tflite") .build() val edgeConditionOptions = EdgeConditionOptions.builder() .setThreshold1(100.0f) .setThreshold2(100.0f) .setApertureSize(3) .setL2Gradient(false) .setPluginModelBaseOptions(edgePluginModelBaseOptions) .build() val conditionOptions = ConditionOptions.builder() .setEdgeConditionOptions(edgeConditionOptions) .build() imageGenerator = ImageGenerator.createFromOptions(context, options, conditionOptions)
गहराई
val options = ImageGeneratorOptions.builder() .setImageGeneratorModelDirectory(modelPath) .build() val depthModelBaseOptions = BaseOptions.builder() .setModelAssetPath("depth_model.tflite") .build() val depthPluginModelBaseOptions = BaseOptions.builder() .setModelAssetPath("depth_plugin.tflite") .build() val depthConditionOptions = ConditionOptions.DepthConditionOptions.builder() .setDepthModelBaseOptions(depthModelBaseOptions) .setPluginModelBaseOptions(depthPluginModelBaseOptions) .build() val conditionOptions = ConditionOptions.builder() .setDepthConditionOptions(depthConditionOptions) .build() imageGenerator = ImageGenerator.createFromOptions(context, options, conditionOptions)
LoRA वेट के साथ बनाएं
अगर आपने LoRA का वज़न शामिल किया है, तो loraWeightsFilePath
पैरामीटर का इस्तेमाल करके
पथ की जगह पर ले जाता है.
val options = ImageGeneratorOptions.builder()
.setLoraWeightsFilePath(weightsPath)
.setImageGeneratorModelDirectory(modelPath)
.build()
imageGenerator = ImageGenerator.createFromOptions(context, options)
डेटा तैयार करें
इमेज जनरेटर इन इनपुट को स्वीकार करता है:
- प्रॉम्प्ट (ज़रूरी है): जनरेट की जाने वाली इमेज के बारे में बताने वाला टेक्स्ट प्रॉम्प्ट.
- दोहरावों (ज़रूरी): इमेज जनरेट करने के लिए कुल दोहराव. ऐप्लिकेशन एक अच्छा शुरुआती पॉइंट 20 है.
- सीड (ज़रूरी): इमेज जनरेट करने के दौरान इस्तेमाल किया गया रैंडम सीड.
- स्थिति वाली इमेज (ज़रूरी नहीं): वह इमेज जिसे मॉडल, रेफ़रंस के तौर पर इस्तेमाल करता है जेनरेशन. सिर्फ़ प्लगिन मॉडल का इस्तेमाल करते समय लागू होता है.
- शर्त का टाइप (ज़रूरी नहीं): टास्क के साथ इस्तेमाल किए गए प्लगिन मॉडल का टाइप. सिर्फ़ प्लगिन मॉडल का इस्तेमाल करते समय लागू होता है.
सिर्फ़ फ़ाउंडेशन मॉडल वाले इनपुट
fun setInput(prompt: String, iteration: Int, seed: Int) {
imageGenerator.setInputs(prompt, iteration, seed)
}
प्लगिन वाले इनपुट
अगर प्लगिन का वैकल्पिक मॉडल लागू किया जा रहा है, तो conditionType
का भी इस्तेमाल करें
पैरामीटर का इस्तेमाल करके, प्लगिन मॉडल और sourceConditionImage
पैरामीटर चुना गया
शर्त वाली इमेज जनरेट करें.
विकल्प का नाम | ब्यौरा | मान |
---|---|---|
conditionType |
फ़ाउंडेशन मॉडल पर लागू किया गया प्लगिन मॉडल. | {"FACE", "EDGE", "DEPTH"} |
sourceConditionImage |
शर्त वाली इमेज बनाने के लिए इस्तेमाल की गई सोर्स इमेज. | MPImage ऑब्जेक्ट |
अगर प्लगिन मॉडल का इस्तेमाल किया जा रहा है, तो createConditionImage
का इस्तेमाल करके
स्थिति की इमेज:
fun createConditionImage(
inputImage: MPImage,
conditionType: ConditionType
): Bitmap {
val result =
imageGenerator.createConditionImage(inputImage, conditionType)
return BitmapExtractor.extract(result)
}
शर्त वाली इमेज बनाने के बाद, इनपुट के रूप में प्रॉम्प्ट, सीड, और बार-बार दोहराए जाने की संख्या.
imageGenerator.setInputs(
prompt,
conditionalImage,
conditionType,
iteration,
seed
)
लोआरए वेट वाले इनपुट
अगर LoRA वेट का इस्तेमाल किया जा रहा है, तो पक्का करें कि टेक्स्ट प्रॉम्प्ट में टोकन शामिल हो, अगर आपको इस तरह की इमेज जनरेट करनी है जिसे वज़न.
fun setInput(prompt: String, iteration: Int, seed: Int) {
imageGenerator.setInputs(prompt, iteration, seed)
}
टास्क को पूरा करें
इसमें दिए गए इनपुट की मदद से इमेज जनरेट करने के लिए, generate()
तरीके का इस्तेमाल करें
पिछला सेक्शन देखें. इससे एक इमेज जनरेट होती है.
सिर्फ़ फ़ाउंडेशन मॉडल के साथ जनरेट करें
fun generate(prompt: String, iteration: Int, seed: Int): Bitmap {
val result = imageGenerator.generate(prompt, iteration, seed)
val bitmap = BitmapExtractor.extract(result?.generatedImage())
return bitmap
}
प्लगिन की मदद से जनरेट करें
fun generate(
prompt: String,
inputImage: MPImage,
conditionType: ConditionType,
iteration: Int,
seed: Int
): Bitmap {
val result = imageGenerator.generate(
prompt,
inputImage,
conditionType,
iteration,
seed
)
val bitmap = BitmapExtractor.extract(result?.generatedImage())
return bitmap
}
लोआरए वेट के साथ जनरेट करें
LoRA वेट के साथ पसंद के मुताबिक मॉडल के साथ इमेज जनरेट करने की प्रोसेस यह स्टैंडर्ड फ़ाउंडेशन मॉडल की प्रोसेस से मेल खाता है. पक्का करें कि टोकन को प्रॉम्प्ट में शामिल किया जाता है और उसी कोड को चलाया जाता है.
fun generate(prompt: String, iteration: Int, seed: Int): Bitmap {
val result = imageGenerator.generate(prompt, iteration, seed)
val bitmap = BitmapExtractor.extract(result?.generatedImage())
return bitmap
}
बार-बार जनरेट होना
इमेज जनरेटर हर बार इमेज जनरेट करने के दौरान, जनरेट की गई इंटरमीडिएट इमेज भी दिखा सकता है
इटरेशन, जैसा कि iterations
इनपुट पैरामीटर में बताया गया है. इन्हें देखने के लिए
बीच के लेवल पर मिलने वाले नतीजे, setInputs
तरीके को कॉल करें. इसके बाद, execute()
पर कॉल करें
हर चरण पर जाएं. इंटरमीडिएट दिखाने के लिए, showResult
पैरामीटर को true
पर सेट करें
नतीजे.
fun execute(showResult: Boolean): Bitmap {
val result = imageGenerator.execute(showResult)
val bitmap =
BitmapExtractor.extract(result.generatedImage())
return bitmap
}
नतीजों को हैंडल करना और दिखाना
इमेज जनरेटर ImageGeneratorResult
दिखाता है, जिसमें जनरेट की गई
इमेज, काम पूरा होने में लगने वाले समय का टाइमस्टैंप, और अगर शर्त वाली इमेज हो, तो वह
को इनपुट के तौर पर दिया गया था.
val bitmap = BitmapExtractor.extract(result.generatedImage())
नीचे दी गई इमेज को, नीचे दिए गए इनपुट से जनरेट किया गया है. इसमें सिर्फ़ फ़ाउंडेशन मॉडल.
इनपुट:
- प्रॉम्प्ट: "एक रंगीन कार्टून रकून, जिसने फ़्लॉपी चौड़े किनारे वाली हैट पहनी हुई है हाथ में एक स्टिक थामे हुए जंगल में चलते हुए, ऐनिमेशन का तीन चौथाई हिस्सा दिखाने वाला व्यू पेंटिंग"
- सीड: 312687592
- दोहराव: 20
जनरेट की गई इमेज: