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

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

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

कोड का उदाहरण

ऑडियो क्लासिफ़ायर के लिए दिए गए उदाहरण कोड में इसे पूरी तरह लागू किया जाता है आपके संदर्भ के लिए 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"
    }
  });

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

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

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

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

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

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

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

ऑडियो क्लासिफ़ायर, ऑडियो क्लिप के अनुमान लगाने के लिए classify() तरीके का इस्तेमाल करता है फ़ाइलें या ऑडियो स्ट्रीम. ऑडियो क्लासिफ़ायर 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

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