অ্যান্ড্রয়েডের জন্য ইন্টারেক্টিভ ইমেজ সেগমেন্টেশন গাইড

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

কোড উদাহরণ

MediaPipe টাস্ক কোডের উদাহরণ হল Android এর জন্য একটি ইন্টারেক্টিভ ইমেজ সেগমেন্টার অ্যাপের একটি সহজ বাস্তবায়ন। উদাহরণটি ডিভাইস গ্যালারি থেকে নির্বাচিত চিত্রগুলির সাথে কাজ করে৷

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

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

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

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

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

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

মূল উপাদান

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

  • InteractiveSegmentationHelper.kt - ইন্টারেক্টিভ ইমেজ সেগমেন্টার টাস্ক শুরু করে এবং মডেল এবং প্রতিনিধি নির্বাচন পরিচালনা করে।
  • OverlayView.kt - বিভাজন ফলাফল পরিচালনা করে এবং ফর্ম্যাট করে।

সেটআপ

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

নির্ভরতা

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

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

মডেল

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

মডেল নির্বাচন করুন এবং ডাউনলোড করুন, এবং তারপর আপনার প্রকল্প ডিরেক্টরির মধ্যে এটি সংরক্ষণ করুন:

<dev-project-root>/src/main/assets

মডেল দ্বারা ব্যবহৃত পথ নির্দিষ্ট করতে BaseOptions.Builder.setModelAssetPath() পদ্ধতি ব্যবহার করুন। এই পদ্ধতিটি পরবর্তী বিভাগে কোড উদাহরণে দেখানো হয়েছে।

ইন্টারেক্টিভ ইমেজ সেগমেন্টার উদাহরণ কোডে , setupInteractiveSegmenter() ফাংশনে মডেলটিকে InteractiveSegmenterHelper.kt ক্লাসে সংজ্ঞায়িত করা হয়েছে।

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

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

InteractiveSegmenterOptions options =
  InteractiveSegmenterOptions.builder()
    .setBaseOptions(
      BaseOptions.builder().setModelAssetPath("model.tflite").build())
    .setOutputCategoryMask(true)
    .setOutputConfidenceMasks(false)
    .setResultListener((result, inputImage) -> {
         // Process the segmentation result here.
    })
    .setErrorListener((result, inputImage) -> {
         // Process the segmentation errors here.
    })    .build();
interactivesegmenter = InteractiveSegmenter.createFromOptions(context, options);

এই টাস্ক সেট আপ করার আরও বিস্তারিত উদাহরণের জন্য, InteractiveSegmenterHelper ক্লাস setupInteractiveSegmenter() ফাংশনটি দেখুন।

কনফিগারেশন অপশন

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

বিকল্পের নাম বর্ণনা মান পরিসীমা ডিফল্ট মান
outputCategoryMask যদি True তে সেট করা হয়, আউটপুটে একটি uint8 ইমেজ হিসাবে একটি বিভাজন মাস্ক অন্তর্ভুক্ত থাকে, যেখানে প্রতিটি পিক্সেল মান নির্দেশ করে যে পিক্সেলটি আগ্রহের এলাকায় অবস্থিত বস্তুর অংশ কিনা। { True, False } False
outputConfidenceMasks যদি True তে সেট করা হয়, আউটপুটে একটি ফ্লোট মান চিত্র হিসাবে একটি বিভাজন মাস্ক অন্তর্ভুক্ত থাকে, যেখানে প্রতিটি ফ্লোট মান আত্মবিশ্বাসের প্রতিনিধিত্ব করে যে পিক্সেলটি আগ্রহের এলাকায় অবস্থিত বস্তুর অংশ। { True, False } True
displayNamesLocale টাস্কের মডেলের মেটাডেটাতে প্রদত্ত প্রদর্শন নামের জন্য ব্যবহার করার জন্য লেবেলের ভাষা সেট করে, যদি উপলব্ধ থাকে। ইংরেজির জন্য ডিফল্ট হল en । আপনি TensorFlow Lite Metadata Writer API ব্যবহার করে একটি কাস্টম মডেলের মেটাডেটাতে স্থানীয় লেবেল যোগ করতে পারেন স্থানীয় কোড en
errorListener একটি ঐচ্ছিক ত্রুটি শ্রোতা সেট করে। N/A সেট না

ডেটা প্রস্তুত করুন

ইন্টারেক্টিভ ইমেজ সেগমেন্টার ইমেজগুলির সাথে কাজ করে, এবং টাস্কটি ডেটা ইনপুট প্রিপ্রসেসিং পরিচালনা করে, যার মধ্যে আকার পরিবর্তন, ঘূর্ণন এবং মান স্বাভাবিককরণ সহ। টাস্কে দেওয়ার আগে আপনাকে ইনপুট ইমেজটিকে একটি com.google.mediapipe.framework.image.MPImage অবজেক্টে রূপান্তর করতে হবে৷

import com.google.mediapipe.framework.image.BitmapImageBuilder;
import com.google.mediapipe.framework.image.MPImage;

// Load an image on the user’s device as a Bitmap object using BitmapFactory.

// Convert an Android’s Bitmap object to a MediaPipe’s Image object.
Image mpImage = new BitmapImageBuilder(bitmap).build();

ইন্টারেক্টিভ ইমেজ সেগমেন্টার উদাহরণ কোডে, segment() ফাংশন দ্বারা InteractiveSegmenterHelper ক্লাসে ডেটা প্রস্তুতি পরিচালনা করা হয়।

টাস্ক চালান

ভবিষ্যদ্বাণী চালানোর জন্য segment ফাংশনটি কল করুন এবং সেগমেন্ট তৈরি করুন। ইন্টারেক্টিভ ইমেজ সেগমেন্টার টাস্ক ইনপুট ইমেজের মধ্যে চিহ্নিত সেগমেন্ট অঞ্চলগুলি প্রদান করে।

RegionOfInterest roi = RegionOfInterest.create(
    NormalizedKeypoint.create(
        normX * it.width,
        normY * it.height
    )
);

ImageSegmenterResult segmenterResult = interactivesegmenter.segment(image, roi);

ইন্টারেক্টিভ ইমেজ সেগমেন্টার উদাহরণ কোডে, segment ফাংশন InteractiveSegmenterHelper.kt ফাইলে সংজ্ঞায়িত করা হয়।

হ্যান্ডেল এবং প্রদর্শন ফলাফল

অনুমান চালানোর পরে, ইন্টারেক্টিভ ইমেজ সেগমেন্টার টাস্ক একটি ImageSegmenterResult অবজেক্ট প্রদান করে যা সেগমেন্টেশন টাস্কের ফলাফল ধারণ করে। আপনি টাস্ক কনফিগার করার সময় আপনি কি সেট করেছেন তার উপর নির্ভর করে আউটপুটের বিষয়বস্তুতে একটি বিভাগ মাস্ক, কনফিডেন্স মাস্ক বা উভয়ই অন্তর্ভুক্ত থাকতে পারে।

নিম্নলিখিত বিভাগগুলি এই কাজ থেকে আউটপুট ডেটা ব্যাখ্যা করে:

ক্যাটাগরি মাস্ক

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

মূল ছবি এবং বিভাগ মাস্ক আউটপুট. Pascal VOC 2012 ডেটাসেট থেকে উৎস চিত্র।

আত্মবিশ্বাসের মুখোশ

একটি কনফিডেন্স মাস্কের আউটপুটে প্রতিটি ইমেজ ইনপুট চ্যানেলের জন্য [0, 1] এর মধ্যে ফ্লোট মান রয়েছে। উচ্চতর মানগুলি একটি উচ্চ আত্মবিশ্বাস নির্দেশ করে যে চিত্র পিক্সেলটি আগ্রহের এলাকায় অবস্থিত বস্তুর অংশ।