वेब के लिए ऑडियो क्लासिफ़िकेशन गाइड

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

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

कोड का उदाहरण

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

सेटअप

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

JavaScript पैकेज

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

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

npm install @mediapipe/tasks-audio

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

<!-- Replace "my-cdn-service.com" with your CDN -->
<head>
  <script src="https://my-cdn-service.com/npm/@mediapipe/tasks-audio/audio_bundle.js"
    crossorigin="anonymous"></script>
</head>

मॉडल

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

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

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

टास्क बनाएं

अनुमान लगाने के लिए टास्क तैयार करने के लिए, ऑडियो क्लासिफ़ायर createFrom...() फ़ंक्शन में से किसी एक का इस्तेमाल करें. ट्रेन की गई मॉडल फ़ाइल के रिलेटिव या ऐब्सलूट पाथ के साथ, createFromModelPath() फ़ंक्शन का इस्तेमाल करें. अगर आपका मॉडल पहले ही मेमोरी में लोड हो गया है, तो createFromModelBuffer() तरीके का इस्तेमाल किया जा सकता है.

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

नीचे दिया गया कोड बताता है कि पसंद के मुताबिक विकल्पों की मदद से टास्क को कैसे बनाया और कॉन्फ़िगर किया जाए:

const audio = await FilesetResolver.forAudioTasks(
    "https://my-cdn-service.com/npm/@mediapipe/tasks-audio/wasm"
  );

const audioClassifier = await AudioClassifier.createFromOptions(audio, {
    baseOptions: {
      modelAssetPath:
        "https://tfhub.dev/google/lite-model/yamnet/classification/tflite/1?lite-format=tflite"
    }
  });

ऑडियो क्लासिफ़ायर के उदाहरण में दिए गए कोड को लागू करने पर, उपयोगकर्ता कोई एक प्रोसेसिंग मोड चुन सकता है. यह तरीका टास्क बनाने वाले कोड को ज़्यादा जटिल बना देता है. ऐसा भी हो सकता है कि वह आपके इस्तेमाल के उदाहरण के लिए सही न हो. example code के runAudioClassification() और runStreamingAudioClassification() फ़ंक्शन में, अलग-अलग मोड देखे जा सकते हैं.

कॉन्फ़िगरेशन विकल्प

इस टास्क में वेब और JavaScript ऐप्लिकेशन के लिए ये कॉन्फ़िगरेशन विकल्प हैं:

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

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

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

टास्क चलाएं

ऑडियो की कैटगरी तय करने वाला, classify() तरीके का इस्तेमाल करके, ऑडियो क्लिप फ़ाइलों या ऑडियो स्ट्रीम का अनुमान लगाता है. Audio Classifier API इनपुट ऑडियो में पहचाने गए ऑडियो इवेंट के लिए, संभावित कैटगरी दिखाता है.

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

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

ऑडियो क्लिप

// Create audio buffer
const sample = await response.arrayBuffer();
const audioBuffer = await audioCtx.decodeAudioData(sample);

// Use AudioClassifier to run classification
const results = audioClassifier.classify(
  audioBuffer.getChannelData(0),
  audioBuffer.sampleRate
);
  

ऑडियो स्ट्रीम

stream = await navigator.mediaDevices.getUserMedia(constraints);
audioCtx = new AudioContext({ sampleRate: 16000 });

const source = audioCtx.createMediaStreamSource(stream);
const scriptNode = audioCtx.createScriptProcessor(16384, 1, 1);

scriptNode.onaudioprocess = function (audioProcessingEvent) {
  const inputBuffer = audioProcessingEvent.inputBuffer;
  let inputData = inputBuffer.getChannelData(0);

  // Classify the audio
  const result = audioClassifier.classify(inputData);
  const categories = result[0].classifications[0].categories;
};
  

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

नतीजे मैनेज करें और दिखाएं

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

AudioClassifierResult:
  Timestamp in microseconds: 100
  ClassificationResult #0:
    Timestamp in microseconds: 100  
    Classifications #0 (single classification head):
      head index: 0
      category #0:
        category name: "Speech"
        score: 0.6
        index: 0
      category #1:
        category name: "Music"
        score: 0.2
        index: 1

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