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

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

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

कोड का उदाहरण

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

सेटअप

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

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

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

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

टास्क बनाना

इनफ़रेंस चलाने के लिए टास्क तैयार करने के लिए, Audio Classifier 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 पर देखा जा सकता है.

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

इस टास्क में, वेब और 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, इनपुट ऑडियो में पहचाने गए ऑडियो इवेंट के लिए संभावित कैटगरी दिखाता है.

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

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