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

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(exception -> {
         // Process the segmentation errors here.
    })    
    .build();
interactivesegmenter = InteractiveSegmenter.createFromOptions(context, options);
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 users device as a Bitmap object using BitmapFactory.

// Convert an Androids Bitmap object to a MediaPipes Image object.
MPImage mpImage = new BitmapImageBuilder(bitmap).build();
RegionOfInterest roi = RegionOfInterest.create(
    NormalizedKeypoint.create(
        normX * it.width,
        normY * it.height
    )
);

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