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

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

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

कोड का उदाहरण

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

अगर Raspबेरी Pi के लिए ऑडियो क्लासिफ़ायर लागू किया जा रहा है, तो Raspबेरी Pi का उदाहरण ऐप्लिकेशन देखें.

सेटअप

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

पैकेज

ऑडियो क्लासिफ़ायर, MediaPipe पीआईपी पैकेज का टास्क करता है. डिपेंडेंसी इंस्टॉल करने के लिए, इनका इस्तेमाल करें:

$ python -m pip install mediapipe

इंपोर्ट

ऑडियो क्लासिफ़ायर टास्क के फ़ंक्शन ऐक्सेस करने के लिए, नीचे दी गई क्लास को इंपोर्ट करें:

import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import audio

मॉडल

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

कोई मॉडल चुनें और उसे डाउनलोड करें. इसके बाद, उसे किसी लोकल डायरेक्ट्री में सेव करें. आपके पास सुझाए गए Yamnet मॉडल का इस्तेमाल करने का विकल्प है.

model_path = '/absolute/path/to/lite-model_yamnet_classification_tflite_1.tflite'

मॉडल के नाम वाले पैरामीटर में, मॉडल का पाथ बताएं, जैसा कि यहां दिखाया गया है:

base_options = BaseOptions(model_asset_path=model_path)

टास्क बनाएं

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

ऑडियो क्लासिफ़ायर टास्क, इनपुट के तौर पर ऑडियो क्लिप और ऑडियो स्ट्रीम के साथ काम करता है. टास्क बनाते समय, आपको अपने इनपुट डेटा टाइप के हिसाब से 'रनिंग मोड' तय करना होगा. टास्क बनाने और अनुमान लगाने का तरीका जानने के लिए, अपने इनपुट डेटा टाइप के हिसाब से टैब चुनें.

ऑडियो क्लिप

AudioClassifier = mp.tasks.audio.AudioClassifier
AudioClassifierOptions = mp.tasks.audio.AudioClassifierOptions
AudioRunningMode = mp.tasks.audio.RunningMode
BaseOptions = mp.tasks.BaseOptions

options = AudioClassifierOptions(
    base_options=BaseOptions(model_asset_path='/path/to/model.tflite'),
    max_results=5,
    running_mode=AudioRunningMode.AUDIO_CLIPS)

with AudioClassifier.create_from_options(options) as classifier:
  # The classifier is initialized. Use it here.
  # ...
    

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

AudioClassifier = mp.tasks.audio.AudioClassifier
AudioClassifierOptions = mp.tasks.audio.AudioClassifierOptions
AudioClassifierResult = mp.tasks.audio.AudioClassifierResult
AudioRunningMode = mp.tasks.audio.RunningMode
BaseOptions = mp.tasks.BaseOptions

def print_result(result: AudioClassifierResult, timestamp_ms: int):
    print(AudioClassifierResult result: {}’.format(result))

options = AudioClassifierOptions(
    base_options=BaseOptions(model_asset_path='/path/to/model.tflite'),
    running_mode=AudioRunningMode.AUDIO_STREAM,
    max_results=5,
    result_callback=print_result)

with AudioClassifier.create_from_options(options) as classifier:
  # The classifier is initialized. Use it here.
  # ...
  

ऑडियो के साथ इस्तेमाल करने के लिए, ऑडियो क्लासिफ़ायर बनाने के सभी उदाहरण के लिए, कोड का उदाहरण देखें.

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

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

विकल्प का नाम ब्यौरा वैल्यू रेंज डिफ़ॉल्ट मान
running_mode टास्क के लिए, रनिंग मोड सेट करता है. ऑडियो क्लासिफ़ायर में दो मोड होते हैं:

AUDIO_CLIPS: इंडिपेंडेंट ऑडियो क्लिप पर ऑडियो टास्क चलाने के लिए मोड.

AUDIO_STREAM: यह मोड किसी ऑडियो स्ट्रीम पर ऑडियो टास्क चलाने का मोड है, जैसे कि माइक्रोफ़ोन से. इस मोड में, resultListener को कॉल करना चाहिए, ताकि वह क्लासिफ़िकेशन के नतीजों को एसिंक्रोनस तरीके से पाने वाले को सेट अप कर सके.
{AUDIO_CLIPS, AUDIO_STREAM} AUDIO_CLIPS
display_names_locale अगर यह उपलब्ध हो, तो टास्क के मॉडल के मेटाडेटा में दिए गए डिसप्ले नेम के लिए, लेबल की भाषा सेट करता है. अंग्रेज़ी के लिए डिफ़ॉल्ट रूप से en है. TensorFlow Lite Metadata Writer API का इस्तेमाल करके, कस्टम मॉडल के मेटाडेटा में स्थानीय भाषा के हिसाब से लेबल जोड़े जा सकते हैं स्थान-भाषा का कोड en
max_results यह विकल्प, टॉप-स्कोर किए गए क्लासिफ़िकेशन के नतीजों की ज़्यादा से ज़्यादा संख्या को सेट करता है, ताकि नतीजे दिखाए जा सकें. अगर < 0 है, तो सभी उपलब्ध नतीजे दिखाए जाएंगे. कोई भी पॉज़िटिव नंबर -1
score_threshold अनुमान के स्कोर का थ्रेशोल्ड सेट करता है, जो मॉडल मेटाडेटा (अगर कोई है) में दिए गए स्कोर को बदलता है. इस वैल्यू से कम के नतीजे अस्वीकार कर दिए गए हैं. [0.0, 1.0] सेट नहीं किया गया है
category_allowlist अनुमति वाली कैटगरी के नामों की वैकल्पिक सूची सेट करता है. अगर यह खाली नहीं है, तो कैटगरी के जिन नतीजों की कैटगरी का नाम इस सेट में नहीं होगा उन्हें फ़िल्टर कर दिया जाएगा. श्रेणी के डुप्लीकेट या अज्ञात नामों पर ध्यान नहीं दिया जाता है. यह विकल्प category_denylist के साथ म्यूचुअली एक्सक्लूसिव है और दोनों नतीजों का इस्तेमाल करने में गड़बड़ी है. कोई भी स्ट्रिंग सेट नहीं किया गया है
category_denylist उन कैटगरी के नामों की वैकल्पिक सूची सेट करता है जिनकी अनुमति नहीं है. अगर यह फ़ील्ड खाली नहीं है, तो कैटगरी के जिन नतीजों की कैटगरी का नाम इस सेट में होगा उन्हें फ़िल्टर करके बाहर कर दिया जाएगा. श्रेणी के डुप्लीकेट या अज्ञात नामों पर ध्यान नहीं दिया जाता है. यह विकल्प category_allowlist के साथ म्यूचुअली एक्सक्लूसिव है और इसका इस्तेमाल करने पर दोनों में गड़बड़ी होगी. कोई भी स्ट्रिंग सेट नहीं किया गया है
result_callback जब ऑडियो क्लासिफ़ायर, ऑडियो स्ट्रीम मोड में होता है, तब नतीजे लिसनर को क्लासिफ़िकेशन के नतीजों को एसिंक्रोनस तरीके से पाने के लिए सेट करता है. सिर्फ़ तब इस्तेमाल किया जा सकता है, जब रनिंग मोड AUDIO_STREAM पर सेट हो लागू नहीं सेट नहीं किया गया है

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

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

अपने इनपुट को ऑडियो फ़ाइल या संख्यात्मक कलेक्शन के तौर पर तैयार करें. इसके बाद, उसे MediaPipe AudioData ऑब्जेक्ट में बदलें. इनपुट ऑडियो को नंबर वाले कलेक्शन के तौर पर लोड करने के लिए, SciPy जैसी किसी बाहरी लाइब्रेरी का इस्तेमाल किया जा सकता है.

यहां दिए गए उदाहरणों में बताया गया है कि हर उपलब्ध डेटा टाइप के लिए, प्रोसेसिंग के लिए डेटा कैसे तैयार किया जाता है:

ऑडियो क्लिप

import numpy as np
from scipy.io import wavfile

AudioData = mp.tasks.components.containers.AudioData

sample_rate, buffer = wavfile.read('/path/to/audio.wav')
audio_data = AudioData.create_from_array(
    buffer.astype(float) / np.iinfo(np.int16).max, sample_rate)
    

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

import numpy as np

AudioData = mp.tasks.components.containers.AudioData

# Read microphone data as np arrays, then call

audio_data = AudioData.create_from_array(
    buffer.astype(float) / np.iinfo(np.int16).max, sample_rate)
    

टास्क चलाएं

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

ऑडियो क्लिप

# Perform audio classification on the provided audio clip.
audio_classifier_result_list = classifier.classify(audio_data)
    

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

# Send live audio data to perform audio classification.
# Results are sent to the `result_callback` provided in the `AudioClassifierOptions`
classifier.classify_async(audio_data, timestamp_ms)
    

निम्न पर ध्यान दें:

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

ऑडियो क्लिप के साथ ऑडियो क्लासिफ़ायर चलाने के बेहतर उदाहरण के लिए, कोड का उदाहरण देखें.

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

अनुमान चलाने पर, ऑडियो क्लासिफ़ायर टास्क एक 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

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