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

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

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

कोड का उदाहरण

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

अगर आप Raspberry Pi के लिए ऑडियो क्लासिफ़ायर इस्तेमाल कर रहे हैं, तो यह देखें Raspberry Pi का उदाहरण ऐप्लिकेशन है.

सेटअप

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

पैकेज

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

$ python -m pip install mediapipe

आयात

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

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

मॉडल

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

कोई मॉडल चुनें और डाउनलोड करें, और फिर उसे लोकल डायरेक्ट्री में स्टोर करें. Google Analytics 4 पर माइग्रेट करने के लिए, सुझाया गया यामनेट मॉडल.

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 सबसे ज़्यादा स्कोर वाले क्लासिफ़िकेशन नतीजों की वैकल्पिक ज़्यादा से ज़्यादा संख्या को इस पर सेट करता है वापसी. यदि < कोई समस्या नहीं है, तो सभी उपलब्ध नतीजे दिखाए जाएंगे. कोई भी धनात्मक संख्या -1
score_threshold अनुमान के लिए स्कोर का थ्रेशोल्ड सेट करता है, जो इसमें दिए गए स्कोर को ओवरराइड करता है मॉडल मेटाडेटा (अगर कोई है). इस वैल्यू से कम के नतीजे अस्वीकार कर दिए जाते हैं. [0.0, 1.0] सेट नहीं है
category_allowlist अनुमति वाली कैटगरी के नामों की वैकल्पिक सूची सेट करता है. अगर खाली नहीं है, ऐसे वर्गीकरण परिणाम होंगे जिनका श्रेणी नाम इस सेट में नहीं है फ़िल्टर करके बाहर किया गया. श्रेणी के डुप्लीकेट या अज्ञात नामों पर ध्यान नहीं दिया जाता. यह विकल्प, category_denylist और इसका इस्तेमाल करने वाले उपयोगकर्ताओं के लिए अलग-अलग है दोनों में गड़बड़ी होती है. कोई भी स्ट्रिंग सेट नहीं है
category_denylist ऐसी कैटगरी के नामों की वैकल्पिक सूची सेट करता है जिनकी अनुमति नहीं है. अगर आपने खाली नहीं है, इसलिए डेटा को अलग-अलग ग्रुप में बांटने के ऐसे नतीजे फ़िल्टर कर दिए जाएंगे जिनकी कैटगरी का नाम इस सेट में होगा बाहर. श्रेणी के डुप्लीकेट या अज्ञात नामों पर ध्यान नहीं दिया जाता. यह विकल्प म्यूचुअली है सिर्फ़ category_allowlist इस्तेमाल करने पर, दोनों नतीजे इस्तेमाल करने में गड़बड़ी होती है. कोई भी स्ट्रिंग सेट नहीं है
result_callback यह नीति, क्लासिफ़िकेशन के नतीजे पाने के लिए, रिज़ल्ट लिसनर को सेट करती है जब ऑडियो क्लासिफ़ायर, ऑडियो स्ट्रीम में हो, तब एसिंक्रोनस तरीके से मोड. इसका इस्तेमाल सिर्फ़ तब किया जा सकता है, जब रनिंग मोड को AUDIO_STREAM पर सेट किया गया हो लागू नहीं सेट नहीं है

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

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

अपने इनपुट को ऑडियो फ़ाइल या नंबर वाले कलेक्शन के तौर पर तैयार करें. इसके बाद, इसे MediaPipe AudioData ऑब्जेक्ट. आप एक बाहरी लाइब्रेरी का उपयोग कर सकते है जैसे अपने इनपुट ऑडियो को numpy सरणियों के रूप में लोड करने के लिए 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)
    

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

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

ऑडियो क्लिप

# 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

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