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

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

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

कोड का उदाहरण

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

सेटअप

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

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.js"
    crossorigin="anonymous"></script>
</head>

मॉडल

MediaPipe इमेज क्लासिफ़ायर टास्क के लिए एक प्रशिक्षित मॉडल की ज़रूरत है, जो इस टास्क के साथ काम कर सके. इमेज क्लासिफ़ायर के लिए तैयार किए गए उपलब्ध मॉडल के बारे में ज़्यादा जानकारी के लिए, टास्क की खास जानकारी वाला मॉडल सेक्शन देखें.

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

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

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

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

इमेज क्लासिफ़ायर classify() और classifyForVideo() मेथड पर किए जाने वाले कॉल सिंक्रोनस रूप से चलते हैं और यूज़र इंटरफ़ेस थ्रेड को ब्लॉक करते हैं. अगर किसी डिवाइस के कैमरे से, वीडियो फ़्रेम में मौजूद ऑब्जेक्ट की कैटगरी तय की जाती है, तो हर कैटगरी में मुख्य थ्रेड ब्लॉक हो जाएगा. इसे रोकने के लिए वेब वर्कर को किसी अन्य थ्रेड पर classify() और classifyForVideo() चलाने के लिए लागू किया जा सकता है.

टास्क को पूरा करें

इमेज क्लासिफ़ायर, अनुमानों को ट्रिगर करने के लिए इमेज मोड के साथ classify() तरीके और video मोड के साथ classifyForVideo() तरीके का इस्तेमाल करता है. Image Classifier API, इनपुट इमेज में मौजूद ऑब्जेक्ट के लिए संभावित कैटगरी दिखाएगा.

नीचे दिया गया कोड बताता है कि टास्क मॉडल की मदद से प्रोसेसिंग कैसे लागू की जाती है:

Image

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

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

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