वेब के लिए इमेज क्लासिफ़िकेशन गाइड

MediaPipe Image Classifier टास्क की मदद से, इमेज की कैटगरी तय की जा सकती है. इस टास्क का इस्तेमाल करके, यह पता लगाया जा सकता है कि ट्रेनिंग के दौरान तय की गई कैटगरी के सेट में से, कोई इमेज किस कैटगरी से जुड़ी है. इन निर्देशों में, Node और वेब ऐप्लिकेशन के लिए Image Classifier का इस्तेमाल करने का तरीका बताया गया है.

इस टास्क को काम करते हुए देखने के लिए, डेमो देखें. इस टास्क की सुविधाओं, मॉडल, और कॉन्फ़िगरेशन के विकल्पों के बारे में ज़्यादा जानने के लिए, खास जानकारी देखें.

कोड का उदाहरण

इमेज क्लासिफ़ायर के लिए दिए गए उदाहरण कोड में, इस टास्क को JavaScript में पूरी तरह से लागू करने का तरीका बताया गया है. इस कोड की मदद से, इस टास्क को टेस्ट किया जा सकता है. साथ ही, इमेज क्लासिफ़िकेशन वाला अपना ऐप्लिकेशन बनाना शुरू किया जा सकता है. इमेज क्लासिफ़ायर के उदाहरण को सिर्फ़ वेब ब्राउज़र का इस्तेमाल करके देखा, चलाया, और बदला जा सकता है.

सेटअप

इस सेक्शन में, डेवलपमेंट एनवायरमेंट और कोड प्रोजेक्ट सेट अप करने के मुख्य चरणों के बारे में बताया गया है. खास तौर पर, इमेज क्लासिफ़ायर का इस्तेमाल करने के लिए. MediaPipe Tasks का इस्तेमाल करने के लिए, डेवलपमेंट एनवायरमेंट सेट अप करने के बारे में सामान्य जानकारी के लिए, वेब के लिए सेटअप गाइड देखें. इसमें प्लैटफ़ॉर्म के वर्शन से जुड़ी ज़रूरी शर्तें भी शामिल हैं.

JavaScript पैकेज

MediaPipe @mediapipe/tasks-vision NPM पैकेज के ज़रिए, इमेज क्लासिफ़ायर कोड उपलब्ध है. इन लाइब्रेरी को प्लैटफ़ॉर्म की सेटअप गाइड में दिए गए लिंक से ढूंढा और डाउनलोड किया जा सकता है.

स्थानीय स्टेजिंग के लिए ज़रूरी पैकेज इंस्टॉल करने के लिए, इस कोड का इस्तेमाल करें. इसके लिए, इस निर्देश का इस्तेमाल करें:

npm install @mediapipe/tasks-vision

अगर आपको कॉन्टेंट डिलीवरी नेटवर्क (सीडीएन) सेवा के ज़रिए टास्क कोड इंपोर्ट करना है, तो अपनी एचटीएमएल फ़ाइल में मौजूद टैग में यह कोड जोड़ें:

<!-- 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 टास्क के लिए, ट्रेनिंग दिया गया ऐसा मॉडल ज़रूरी है जो इस टास्क के साथ काम करता हो. इमेज क्लासिफ़ायर के लिए उपलब्ध ट्रेन किए गए मॉडल के बारे में ज़्यादा जानने के लिए, टास्क की खास जानकारी वाला मॉडल सेक्शन देखें.

कोई मॉडल चुनें और उसे डाउनलोड करें. इसके बाद, उसे अपने प्रोजेक्ट डायरेक्ट्री में सेव करें:

<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: यह मोड, एक इमेज वाले इनपुट के लिए होता है.

VIDEO: यह वीडियो के डिकोड किए गए फ़्रेम या कैमरे जैसे इनपुट डेटा की लाइव स्ट्रीम के लिए मोड है.
{IMAGE, VIDEO} IMAGE
displayNamesLocale अगर टास्क के मॉडल के मेटाडेटा में डिसप्ले नेम उपलब्ध हैं, तो यह कुकी उन डिसप्ले नेम के लिए इस्तेमाल किए जाने वाले लेबल की भाषा सेट करती है. अंग्रेज़ी के लिए डिफ़ॉल्ट वैल्यू en है. TensorFlow Lite Metadata Writer API का इस्तेमाल करके, कस्टम मॉडल के मेटाडेटा में स्थानीय भाषा में लेबल जोड़े जा सकते हैं लोकल कोड en
maxResults यह विकल्प के तौर पर, क्लासिफ़िकेशन के सबसे ज़्यादा स्कोर वाले नतीजों की ज़्यादा से ज़्यादा संख्या सेट करता है. अगर वैल्यू < 0 है, तो सभी उपलब्ध नतीजे दिखाए जाएंगे. कोई भी पॉज़िटिव नंबर -1
scoreThreshold यह विकल्प, अनुमान के स्कोर की थ्रेशोल्ड वैल्यू सेट करता है. यह वैल्यू, मॉडल के मेटाडेटा में दी गई थ्रेशोल्ड वैल्यू (अगर कोई है) को बदल देती है. इस वैल्यू से कम स्कोर वाले नतीजे अस्वीकार कर दिए जाते हैं. कोई भी फ़्लोट सेट नहीं है
categoryAllowlist इस नीति की मदद से, अनुमति वाले कैटगरी के नामों की सूची सेट की जाती है. यह सूची ज़रूरी नहीं है. अगर यह सेट खाली नहीं है, तो कैटगरी के नाम के आधार पर क्लासिफ़िकेशन के उन नतीजों को फ़िल्टर कर दिया जाएगा जिनके नाम इस सेट में मौजूद नहीं हैं. डुप्लीकेट या अज्ञात कैटगरी के नामों को अनदेखा किया जाता है. यह विकल्प, categoryDenylist के साथ इस्तेमाल नहीं किया जा सकता. इन दोनों को एक साथ इस्तेमाल करने पर गड़बड़ी होती है. कोई भी स्ट्रिंग सेट नहीं है
categoryDenylist इससे, कैटगरी के उन नामों की सूची सेट की जाती है जिन्हें अनुमति नहीं है. यह सूची ज़रूरी नहीं है. अगर यह सेट खाली नहीं है, तो कैटगरी के नाम वाले इस सेट में मौजूद कैटगरी के नाम वाले क्लासिफ़िकेशन के नतीजों को फ़िल्टर कर दिया जाएगा. डुप्लीकेट या अज्ञात कैटगरी के नामों को अनदेखा किया जाता है. यह विकल्प, categoryAllowlist के साथ इस्तेमाल नहीं किया जा सकता. दोनों का इस्तेमाल करने पर गड़बड़ी होती है. कोई भी स्ट्रिंग सेट नहीं है
resultListener यह फ़ंक्शन, नतीजे सुनने वाले को सेट करता है, ताकि इमेज क्लासिफ़ायर के लाइव स्ट्रीम मोड में होने पर, क्लासिफ़िकेशन के नतीजे एसिंक्रोनस तरीके से मिल सकें. इस सेटिंग का इस्तेमाल सिर्फ़ तब किया जा सकता है, जब रनिंग मोड को LIVE_STREAM पर सेट किया गया हो लागू नहीं सेट नहीं है

डेटा तैयार करना

इमेज क्लासिफ़ायर, इमेज में मौजूद ऑब्जेक्ट को किसी भी ऐसे फ़ॉर्मैट में क्लासिफ़ाई कर सकता है जिसे होस्ट ब्राउज़र इस्तेमाल कर सकता है. यह टास्क, डेटा इनपुट की प्रीप्रोसेसिंग को भी मैनेज करता है. इसमें इमेज का साइज़ बदलना, उसे घुमाना, और वैल्यू को सामान्य करना शामिल है.

Image Classifier 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

यह नतीजा, बर्ड क्लासिफ़ायर को इन पर चलाने से मिला है:

गौरैया की क्लोज़-अप फ़ोटो

इमेज क्लासिफ़ायर के उदाहरण कोड में बताया गया है कि टास्क से मिले क्लासिफ़िकेशन के नतीजों को कैसे दिखाया जाए. ज़्यादा जानकारी के लिए, उदाहरण देखें.