অ্যান্ড্রয়েডের জন্য ইমেজ জেনারেশন গাইড

মিডিয়াপাইপ ইমেজ জেনারেটর টাস্ক আপনাকে একটি টেক্সট প্রম্পটের উপর ভিত্তি করে ছবি তৈরি করতে দেয়। এই টাস্কটি ডিফিউশন কৌশল ব্যবহার করে ছবি তৈরি করতে একটি টেক্সট-টু-ইমেজ মডেল ব্যবহার করে।

এই কাজটি ইনপুট হিসেবে একটি টেক্সট প্রম্পট গ্রহণ করে, সাথে একটি ঐচ্ছিক কন্ডিশন ইমেজও গ্রহণ করে যা মডেলটি বৃদ্ধি করতে পারে এবং প্রজন্মের জন্য একটি রেফারেন্স হিসেবে ব্যবহার করতে পারে। ইমেজ জেনারেটর প্রশিক্ষণ বা পুনঃপ্রশিক্ষণের সময় মডেলকে প্রদত্ত নির্দিষ্ট ধারণার উপর ভিত্তি করে ছবিও তৈরি করতে পারে। আরও তথ্যের জন্য, "কাস্টমাইজ উইথ LoRA" দেখুন।

এই নির্দেশাবলীতে বর্ণিত কোড নমুনাটি GitHub- এ উপলব্ধ। এই কাজের ক্ষমতা, মডেল এবং কনফিগারেশন বিকল্পগুলি সম্পর্কে আরও তথ্যের জন্য, ওভারভিউ দেখুন।

কোড উদাহরণ

মিডিয়াপাইপ টাস্কের উদাহরণ কোডটি অ্যান্ড্রয়েডের জন্য একটি ইমেজ জেনারেটর অ্যাপের একটি মৌলিক বাস্তবায়ন। আপনি আপনার নিজস্ব অ্যান্ড্রয়েড অ্যাপের জন্য অ্যাপটিকে একটি সূচনা বিন্দু হিসাবে ব্যবহার করতে পারেন, অথবা বিদ্যমান অ্যাপটি পরিবর্তন করার সময় এটি ব্যবহার করতে পারেন। ইমেজ জেনারেটরের উদাহরণ কোডটি GitHub- এ হোস্ট করা আছে।

কোডটি ডাউনলোড করুন

নিম্নলিখিত নির্দেশাবলী আপনাকে দেখায় কিভাবে git কমান্ড লাইন টুল ব্যবহার করে উদাহরণ কোডের একটি স্থানীয় কপি তৈরি করতে হয়।

উদাহরণ কোডটি ডাউনলোড করতে:

  1. নিম্নলিখিত কমান্ড ব্যবহার করে গিট রিপোজিটরি ক্লোন করুন:
    git clone https://github.com/google-ai-edge/mediapipe-samples
    
  2. ঐচ্ছিকভাবে, আপনার গিট ইনস্ট্যান্সটি স্পার্স চেকআউট ব্যবহার করার জন্য কনফিগার করুন, যাতে আপনার কাছে শুধুমাত্র ইমেজ জেনারেটর উদাহরণ অ্যাপের জন্য ফাইল থাকে:
    cd mediapipe-samples
    git sparse-checkout init --cone
    git sparse-checkout set examples/image_generation/android
    

উদাহরণ কোডের একটি স্থানীয় সংস্করণ তৈরি করার পরে, আপনি প্রকল্পটি অ্যান্ড্রয়েড স্টুডিওতে আমদানি করতে পারেন এবং অ্যাপটি চালাতে পারেন। নির্দেশাবলীর জন্য, অ্যান্ড্রয়েডের জন্য সেটআপ গাইড দেখুন।

মূল উপাদান

নিম্নলিখিত ফাইলগুলিতে এই চিত্র তৈরির উদাহরণ অ্যাপ্লিকেশনের জন্য গুরুত্বপূর্ণ কোড রয়েছে:

  • ImageGenerationHelper.kt : কাজটি শুরু করে এবং ছবি তৈরির কাজ পরিচালনা করে।
  • DiffusionActivity.kt : প্লাগইন বা LoRA ওয়েট সক্রিয় না থাকলে ছবি তৈরি করে।
  • PluginActivity.kt : প্লাগইন মডেলগুলি বাস্তবায়ন করে, যা ব্যবহারকারীদের ইনপুট হিসাবে একটি কন্ডিশন ইমেজ প্রদান করতে সক্ষম করে।
  • LoRAWeightActivity.kt : LoRA ওজন অ্যাক্সেস এবং পরিচালনা করে, যা ফাউন্ডেশন মডেলগুলিকে কাস্টমাইজ করতে এবং নির্দিষ্ট ধারণার ছবি তৈরি করতে সক্ষম করে।

সেটআপ

এই বিভাগটি ইমেজ জেনারেটর ব্যবহারের জন্য বিশেষভাবে আপনার ডেভেলপমেন্ট এনভায়রনমেন্ট এবং কোড প্রোজেক্ট সেটআপ করার মূল ধাপগুলি বর্ণনা করে। মিডিয়াপাইপ কাজের জন্য আপনার ডেভেলপমেন্ট এনভায়রনমেন্ট সেটআপ করার বিষয়ে সাধারণ তথ্যের জন্য, প্ল্যাটফর্ম সংস্করণের প্রয়োজনীয়তা সহ, অ্যান্ড্রয়েডের জন্য সেটআপ গাইড দেখুন।

নির্ভরতা

ইমেজ জেনারেটর টাস্কটি com.google.mediapipe:tasks-vision-image-generator লাইব্রেরি ব্যবহার করে। আপনার অ্যান্ড্রয়েড অ্যাপের build.gradle ফাইলে এই নির্ভরতা যোগ করুন:

dependencies {
    implementation 'com.google.mediapipe:tasks-vision-image-generator:latest.release'
}

অ্যান্ড্রয়েড ১২ (এপিআই ৩১) বা তার বেশি ভার্সনের ডিভাইসের জন্য, নেটিভ ওপেনসিএল লাইব্রেরি ডিপেন্ডেন্সি যোগ করুন। আরও তথ্যের জন্য, uses-native-library ট্যাগের ডকুমেন্টেশন দেখুন।

AndroidManifest.xml ফাইলে নিম্নলিখিত uses-native-library ট্যাগগুলি যোগ করুন:

<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" />

মডেল

মিডিয়াপাইপ ইমেজ জেনারেটর টাস্কের জন্য একটি প্রশিক্ষিত ফাউন্ডেশন মডেল প্রয়োজন যা এই টাস্কের সাথে সামঞ্জস্যপূর্ণ। একটি মডেল ডাউনলোড করার পরে, প্রয়োজনীয় নির্ভরতা ইনস্টল করুন এবং মডেলটিকে একটি উপযুক্ত ফর্ম্যাটে রূপান্তর করুন। তারপর, রূপান্তরিত মডেলটিকে অ্যান্ড্রয়েড ডিভাইসে পুশ করুন।

ইমেজ জেনারেটরের জন্য উপলব্ধ প্রশিক্ষিত মডেল সম্পর্কে আরও তথ্যের জন্য, টাস্ক ওভারভিউ মডেল বিভাগটি দেখুন।

ফাউন্ডেশন মডেল ডাউনলোড করুন

ইমেজ জেনারেটরের জন্য ফাউন্ডেশন মডেলটি stable-diffusion-v1-5/stable-diffusion-v1-5 EMA-only মডেল ফর্ম্যাটের সাথে মেলে, যা নিম্নলিখিত মডেলের উপর ভিত্তি করে তৈরি: stable-diffusion-v1-5/stable-diffusion-v1-5 EMA-only

নির্ভরতা ইনস্টল করুন এবং মডেলটি রূপান্তর করুন

$ 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> ফোল্ডারের কন্টেন্ট অ্যান্ড্রয়েড ডিভাইসে পুশ করুন।

$ 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-তে বান্ডিল করতে হবে অথবা চাহিদা অনুযায়ী ডাউনলোড করতে হবে। প্লাগইন মডেলগুলি হালকা (~২৩MB) এবং সরাসরি APK-তে বান্ডিল করা যেতে পারে। তবে, আমরা চাহিদা অনুযায়ী প্লাগইন মডেলগুলি ডাউনলোড করার পরামর্শ দিচ্ছি।

যদি আপনি LoRA দিয়ে কোন মডেল কাস্টমাইজ করে থাকেন, তাহলে চাহিদা অনুযায়ী ডাউনলোড করুন। আরও তথ্যের জন্য, LoRA weights plugin model দেখুন।

টাস্কটি তৈরি করুন

MediaPipe ইমেজ জেনারেটর টাস্কটি টাস্ক সেট আপ করার জন্য createFromOptions() ফাংশন ব্যবহার করে। createFromOptions() ফাংশনটি কনফিগারেশন বিকল্পগুলির জন্য মান গ্রহণ করে। কনফিগারেশন বিকল্পগুলি সম্পর্কে আরও তথ্যের জন্য, কনফিগারেশন বিকল্পগুলি দেখুন।

কনফিগারেশন বিকল্পগুলি

এই টাস্কে অ্যান্ড্রয়েড অ্যাপের জন্য নিম্নলিখিত কনফিগারেশন বিকল্পগুলি রয়েছে:

বিকল্পের নাম বিবরণ মূল্য পরিসীমা
imageGeneratorModelDirectory মডেলের ওজন সংরক্ষণকারী ইমেজ জেনারেটর মডেল ডিরেক্টরি। PATH
loraWeightsFilePath LoRA ওয়েট ফাইলের পাথ সেট করে। ঐচ্ছিক এবং শুধুমাত্র তখনই প্রযোজ্য যদি মডেলটি LoRA দিয়ে কাস্টমাইজ করা হয়। PATH
errorListener একটি ঐচ্ছিক ত্রুটি শ্রোতা সেট করে। N/A

এই টাস্কটি প্লাগইন মডেলগুলিকেও সমর্থন করে, যা ব্যবহারকারীদের টাস্ক ইনপুটে কন্ডিশন ইমেজ অন্তর্ভুক্ত করতে দেয়, যা ফাউন্ডেশন মডেলটি বৃদ্ধি করতে পারে এবং প্রজন্মের জন্য একটি রেফারেন্স হিসাবে ব্যবহার করতে পারে। এই কন্ডিশন ইমেজগুলি ফেস ল্যান্ডমার্ক, এজ আউটলাইন এবং ডেপথ অনুমান হতে পারে, যা মডেলটি ছবি তৈরি করতে অতিরিক্ত প্রসঙ্গ এবং তথ্য হিসাবে ব্যবহার করে।

ফাউন্ডেশন মডেলে প্লাগইন মডেল যোগ করার সময়, প্লাগইন বিকল্পগুলিও কনফিগার করুন। ফেস ল্যান্ডমার্ক প্লাগইন faceConditionOptions ব্যবহার করে, ক্যানি এজ প্লাগইন edgeConditionOptions ব্যবহার করে, এবং Depth প্লাগইন depthConditionOptions ব্যবহার করে।

ক্যানি এজ বিকল্পগুলি

edgeConditionOptions এ নিম্নলিখিত বিকল্পগুলি কনফিগার করুন।

বিকল্পের নাম বিবরণ মূল্য পরিসীমা ডিফল্ট মান
threshold1 হিস্টেরেসিস পদ্ধতির প্রথম থ্রেশহোল্ড। Float 100
threshold2 হিস্টেরেসিস পদ্ধতির জন্য দ্বিতীয় থ্রেশহোল্ড। Float 200
apertureSize সোবেল অপারেটরের জন্য অ্যাপারচারের আকার। সাধারণত পরিসর 3-7 এর মধ্যে। Integer 3
l2Gradient ছবির গ্রেডিয়েন্ট মান গণনা করার জন্য ডিফল্ট L1 আদর্শের পরিবর্তে L2 আদর্শ ব্যবহার করা হবে কিনা। 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)

তথ্য প্রস্তুত করুন

ইমেজ জেনারেটর নিম্নলিখিত ইনপুটগুলি গ্রহণ করে:

  • প্রম্পট (প্রয়োজনীয়): যে টেক্সট প্রম্পটটি তৈরি করা হবে তার বর্ণনা দেয়।
  • পুনরাবৃত্তি (প্রয়োজনীয়): ছবিটি তৈরি করার জন্য মোট পুনরাবৃত্তি। একটি ভালো শুরুর বিন্দু হল ২০।
  • বীজ (প্রয়োজনীয়): ছবি তৈরির সময় ব্যবহৃত এলোমেলো বীজ।
  • কন্ডিশন ইমেজ (ঐচ্ছিক): মডেলটি জেনারেশনের জন্য রেফারেন্স হিসেবে যে ইমেজটি ব্যবহার করে। শুধুমাত্র প্লাগইন মডেল ব্যবহার করার সময় প্রযোজ্য।
  • শর্তের ধরণ (ঐচ্ছিক): টাস্কের সাথে ব্যবহৃত প্লাগইন মডেলের ধরণ। শুধুমাত্র প্লাগইন মডেল ব্যবহার করার সময় প্রযোজ্য।

শুধুমাত্র ভিত্তি মডেল সহ ইনপুট

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)
}

কন্ডিশন ইমেজ তৈরি করার পর, প্রম্পট, সিড এবং পুনরাবৃত্তির সংখ্যা সহ ইনপুট হিসেবে in অন্তর্ভুক্ত করুন।

imageGenerator.setInputs(
    prompt,
    conditionalImage,
    conditionType,
    iteration,
    seed
)

LoRA ওজন সহ ইনপুট

যদি আপনি 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 ওজন দিয়ে তৈরি করুন

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())

নিম্নলিখিত চিত্রটি নিম্নলিখিত ইনপুটগুলি থেকে তৈরি করা হয়েছে, শুধুমাত্র একটি ভিত্তি মডেল ব্যবহার করে।

ইনপুট:

  • প্রম্পট : "একটি রঙিন কার্টুন র‍্যাকুন, একটি ফ্লপি চওড়া কাঁটাওয়ালা টুপি পরা, একটি লাঠি হাতে বনের মধ্য দিয়ে হেঁটে যাচ্ছে, অ্যানিমেটেড, তিন-চতুর্থাংশ দৃশ্য, চিত্রকর্ম"
  • বীজ : ৩১২৬৮৭৫৯২
  • পুনরাবৃত্তি : ২০টি

তৈরি করা ছবি:

প্রম্পটের সাথে সামঞ্জস্যপূর্ণ একটি র‍্যাকুনের তৈরি ছবি