ওয়েবের জন্য ইমেজ ক্লাসিফিকেশন গাইড

MediaPipe Image Classifier টাস্কটি আপনাকে ছবির শ্রেণিবিন্যাস করতে দেয়। প্রশিক্ষণের সময় সংজ্ঞায়িত করা বিভিন্ন বিভাগের মধ্যে একটি ছবি কীসের প্রতিনিধিত্ব করে, তা শনাক্ত করতে আপনি এই টাস্কটি ব্যবহার করতে পারেন। এই নির্দেশাবলীতে দেখানো হয়েছে কীভাবে Node এবং ওয়েব অ্যাপের জন্য Image Classifier ব্যবহার করতে হয়।

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

কোডের উদাহরণ

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

সেটআপ

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

জাভাস্ক্রিপ্ট প্যাকেজ

ইমেজ ক্লাসিফায়ার কোডটি MediaPipe @mediapipe/tasks-vision NPM প্যাকেজের মাধ্যমে পাওয়া যায়। প্ল্যাটফর্ম সেটআপ গাইডে দেওয়া লিঙ্কগুলো থেকে আপনি এই লাইব্রেরিগুলো খুঁজে ও ডাউনলোড করতে পারবেন।

নিম্নলিখিত কমান্ড ব্যবহার করে লোকাল স্টেজিং-এর জন্য প্রয়োজনীয় প্যাকেজগুলি ইনস্টল করতে পারেন:

npm install @mediapipe/tasks-vision

আপনি যদি কন্টেন্ট ডেলিভারি নেটওয়ার্ক (CDN) পরিষেবার মাধ্যমে টাস্ক কোডটি ইম্পোর্ট করতে চান, তাহলে নিম্নলিখিত কোডটি যোগ করুন। আপনার HTML ফাইলে ট্যাগ:

<!-- You can replace JSDeliver with another CDN if you prefer to -->
<head>
  <script src="https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision/vision_bundle.mjs"
    crossorigin="anonymous"></script>
</head>

মডেল

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

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

<dev-project-root>/app/shared/models/

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

ইনফারেন্স চালানোর জন্য টাস্কটি প্রস্তুত করতে ইমেজ ক্লাসিফায়ারের createFrom...() ফাংশনগুলোর মধ্যে একটি ব্যবহার করুন। প্রশিক্ষিত মডেল ফাইলের রিলেটিভ বা অ্যাবসোলিউট পাথ সহ createFromModelPath() ফাংশনটি ব্যবহার করুন। যদি আপনার মডেলটি ইতিমধ্যেই মেমরিতে লোড করা থাকে, তাহলে আপনি createFromModelBuffer() মেথডটি ব্যবহার করতে পারেন।

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

নিম্নলিখিত কোডটি কাস্টম অপশন সহ টাস্কটি কীভাবে তৈরি এবং কনফিগার করতে হয় তা দেখায়:

async function createImageClassifier {
  const vision = await FilesetResolver.forVisionTasks(
    "https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@0.10.0/wasm"
  );
  imageClassifier = await ImageClassifier.createFromOptions(vision, {
    baseOptions: {
      modelAssetPath: `https://storage.googleapis.com/mediapipe-models/image_classifier/efficientnet_lite0/float32/1/efficientnet_lite0.tflite`
    },
  });
}

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

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

বিকল্পের নাম বর্ণনা মান পরিসীমা ডিফল্ট মান
runningMode টাস্কটির চলমান মোড নির্ধারণ করে। দুটি মোড রয়েছে:

IMAGE: একক ছবি ইনপুটের মোড।

ভিডিও: কোনো ভিডিওর ডিকোড করা ফ্রেম অথবা ক্যামেরা থেকে আসা ইনপুট ডেটার লাইভস্ট্রিমের মোড।
{ IMAGE, VIDEO } IMAGE
displayNamesLocale টাস্কের মডেলের মেটাডেটাতে প্রদত্ত ডিসপ্লে নামের জন্য ব্যবহৃত লেবেলের ভাষা নির্ধারণ করে (যদি তা উপলব্ধ থাকে)। ডিফল্ট হলো ইংরেজির জন্য en '। আপনি TensorFlow Lite Metadata Writer API ব্যবহার করে একটি কাস্টম মডেলের মেটাডেটাতে স্থানীয় লেবেল যোগ করতে পারেন। স্থানীয় কোড ইংরেজি
maxResults ফেরত দেওয়ার জন্য সর্বোচ্চ স্কোরপ্রাপ্ত শ্রেণিবিন্যাস ফলাফলের ঐচ্ছিক সংখ্যা নির্ধারণ করে। যদি < ০ হয়, তাহলে সমস্ত উপলব্ধ ফলাফল ফেরত দেওয়া হবে। যেকোনো ধনাত্মক সংখ্যা -1
scoreThreshold এটি প্রেডিকশন স্কোরের থ্রেশহোল্ড নির্ধারণ করে, যা মডেল মেটাডেটাতে দেওয়া থ্রেশহোল্ডকে (যদি থাকে) বাতিল করে দেয়। এই মানের নিচের ফলাফলগুলো বাতিল করা হয়। যেকোনো ভাসমান বস্তু সেট করা হয়নি
categoryAllowlist অনুমোদিত ক্যাটাগরির নামের ঐচ্ছিক তালিকা নির্ধারণ করে। তালিকাটি খালি না থাকলে, যে সকল ক্লাসিফিকেশন ফলাফলের ক্যাটাগরির নাম এই সেটে নেই, সেগুলোকে ফিল্টার করে বাদ দেওয়া হবে। সদৃশ বা অজানা ক্যাটাগরির নাম উপেক্ষা করা হয়। এই অপশনটি categoryDenylist সাথে ব্যবহার করা যায় না এবং উভয়ই ব্যবহার করলে একটি ত্রুটি দেখা দেয়। যেকোনো স্ট্রিং সেট করা হয়নি
categoryDenylist যেসব ক্যাটাগরির নাম অনুমোদিত নয়, তার ঐচ্ছিক তালিকা নির্ধারণ করে। তালিকাটি খালি না থাকলে, যে সকল ক্লাসিফিকেশন ফলাফলের ক্যাটাগরির নাম এই তালিকায় রয়েছে, সেগুলো ফিল্টার করে বাদ দেওয়া হবে। সদৃশ বা অজানা ক্যাটাগরির নাম উপেক্ষা করা হয়। এই অপশনটি categoryAllowlist সাথে এককভাবে ব্যবহার করা যায় না এবং উভয়ই ব্যবহার করলে একটি ত্রুটি দেখা দেয়। যেকোনো স্ট্রিং সেট করা হয়নি
resultListener ইমেজ ক্লাসিফায়ার লাইভ স্ট্রিম মোডে থাকাকালীন, ক্লাসিফিকেশনের ফলাফল অ্যাসিঙ্ক্রোনাসভাবে গ্রহণ করার জন্য রেজাল্ট লিসেনার সেট করে। এটি শুধুমাত্র তখনই ব্যবহার করা যাবে যখন রানিং মোড LIVE_STREAM এ সেট করা থাকে। প্রযোজ্য নয় সেট করা হয়নি

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

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

ইমেজ ক্লাসিফায়ারের classify() এবং classifyForVideo() মেথডগুলোর কল সিনক্রোনাসভাবে চলে এবং ইউজার ইন্টারফেস থ্রেডকে ব্লক করে। আপনি যদি কোনো ডিভাইসের ক্যামেরা থেকে পাওয়া ভিডিও ফ্রেমের বস্তুগুলোকে ক্লাসিফাই করেন, তবে প্রতিটি ক্লাসিফিকেশন মেইন থ্রেডকে ব্লক করবে। আপনি ওয়েব ওয়ার্কার ইমপ্লিমেন্ট করে classify() এবং classifyForVideo() অন্য একটি থ্রেডে চালানোর মাধ্যমে এটি প্রতিরোধ করতে পারেন।

টাস্কটি চালান

ইমেজ ক্লাসিফায়ার অনুমান প্রক্রিয়া শুরু করার জন্য ইমেজ মোডে classify() মেথড এবং video মোডে classifyForVideo() মেথড ব্যবহার করে। ইমেজ ক্লাসিফায়ার এপিআই ইনপুট ইমেজের মধ্যে থাকা বস্তুগুলোর জন্য সম্ভাব্য ক্যাটাগরিগুলো ফেরত দেবে।

নিম্নলিখিত কোডটি টাস্ক মডেল ব্যবহার করে প্রসেসিং সম্পাদনের পদ্ধতি প্রদর্শন করে:

ছবি

const image = document.getElementById("image") as HTMLImageElement;
const imageClassifierResult = imageClassifier.classify(image);

ভিডিও

const video = document.getElementById("video");
await imageClassifier.setOptions({ runningMode: "VIDEO" });

const timestamp = performance.now();
const classificationResult = await imageClassifier.classifyForVideo(
    video,
    timestamp
  );

ইমেজ ক্লাসিফায়ার টাস্ক চালানোর আরও পূর্ণাঙ্গ বাস্তবায়নের জন্য উদাহরণটি দেখুন।

ফলাফল পরিচালনা এবং প্রদর্শন করুন

ইনফারেন্স চালানোর পর, ইমেজ ক্লাসিফায়ার টাস্কটি একটি ImageClassifierResult অবজেক্ট রিটার্ন করে, যেটিতে ইনপুট ইমেজ বা ফ্রেমের মধ্যে থাকা অবজেক্টগুলোর সম্ভাব্য ক্যাটাগরিগুলোর তালিকা থাকে।

নিম্নলিখিতে এই টাস্কটির আউটপুট ডেটার একটি উদাহরণ দেখানো হলো:

ImageClassifierResult:
 Classifications #0 (single classification head):
  head index: 0
  category #0:
   category name: "/m/01bwb9"
   display name: "Passer domesticus"
   score: 0.91406
   index: 671
  category #1:
   category name: "/m/01bwbt"
   display name: "Passer montanus"
   score: 0.00391
   index: 670

এই ফলাফলটি বার্ড ক্লাসিফায়ারটি নিম্নলিখিতের উপর চালানোর মাধ্যমে পাওয়া গেছে:

একটি চড়ুই পাখির কাছ থেকে তোলা ছবি

ইমেজ ক্লাসিফায়ার উদাহরণ কোডটিতে দেখানো হয়েছে কীভাবে টাস্ক থেকে প্রাপ্ত ক্লাসিফিকেশন ফলাফল প্রদর্শন করতে হয়, বিস্তারিত জানতে উদাহরণটি দেখুন।