راهنمای طبقه بندی صوتی برای پایتون

وظیفه MediaPipe Audio Classifier به شما امکان می دهد داده های صوتی را طبقه بندی کنید. می توانید از این کار برای شناسایی رویدادهای صوتی از مجموعه ای از دسته های آموزش دیده استفاده کنید. این دستورالعمل به شما نشان می دهد که چگونه از طبقه بندی کننده صوتی با پایتون استفاده کنید.

برای اطلاعات بیشتر در مورد قابلیت‌ها، مدل‌ها و گزینه‌های پیکربندی این کار، به نمای کلی مراجعه کنید.

نمونه کد

کد مثال برای Audio Classifier اجرای کامل این کار را در پایتون برای مرجع شما ارائه می دهد. این کد به شما کمک می کند تا این کار را آزمایش کنید و شروع به ساخت طبقه بندی کننده صوتی خود کنید. می‌توانید کد نمونه Audio Classifier را فقط با استفاده از مرورگر وب خود با Google Colab مشاهده، اجرا و ویرایش کنید. می توانید کد منبع این مثال را در GitHub مشاهده کنید.

اگر طبقه‌بندی کننده صوتی را برای Raspberry Pi اجرا می‌کنید، به برنامه نمونه Raspberry Pi مراجعه کنید.

راه اندازی

این بخش مراحل کلیدی را برای راه اندازی محیط توسعه و پروژه های کد مخصوصاً برای استفاده از Audio Classifier توضیح می دهد. برای اطلاعات کلی در مورد تنظیم محیط توسعه خود برای استفاده از وظایف MediaPipe، از جمله الزامات نسخه پلت فرم، به راهنمای راه اندازی برای Python مراجعه کنید.

بسته ها

Audio Classifier به بسته mediapipe pip وظیفه دارد. می توانید وابستگی را با موارد زیر نصب کنید:

$ python -m pip install mediapipe

واردات

برای دسترسی به عملکردهای وظیفه طبقه‌بندی کننده صوتی، کلاس‌های زیر را وارد کنید:

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

مدل

وظیفه MediaPipe Audio Classifier به یک مدل آموزش دیده نیاز دارد که با این کار سازگار باشد. برای اطلاعات بیشتر در مورد مدل‌های آموزش‌دیده موجود برای طبقه‌بندی کننده صوتی، به بخش مدل‌های نمای کلی کار مراجعه کنید.

یک مدل را انتخاب و دانلود کنید و سپس آن را در یک فهرست محلی ذخیره کنید. می توانید از مدل پیشنهادی Yamnet استفاده کنید.

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

مسیر مدل را در پارامتر Model Name مانند شکل زیر مشخص کنید:

base_options = BaseOptions(model_asset_path=model_path)

کار را ایجاد کنید

برای ایجاد کار از تابع create_from_options استفاده کنید. تابع create_from_options گزینه‌های پیکربندی شامل حالت اجرا، محل نام‌های نمایشی، حداکثر تعداد نتایج، آستانه اطمینان، فهرست مجاز دسته‌بندی و فهرست رد را می‌پذیرد. برای اطلاعات بیشتر در مورد گزینه های پیکربندی، به نمای کلی پیکربندی مراجعه کنید.

وظیفه Audio Classifier از کلیپ های صوتی و جریان های صوتی به عنوان ورودی پشتیبانی می کند. هنگام ایجاد کار، باید حالت اجرای مربوط به نوع داده ورودی خود را مشخص کنید. برای مشاهده نحوه ایجاد کار و اجرای استنتاج، برگه مربوط به نوع داده ورودی خود را انتخاب کنید.

کلیپ های صوتی

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.
  # ...
  

برای مثال کاملی از ایجاد یک طبقه‌بندی کننده صوتی برای استفاده در صدا، به مثال کد مراجعه کنید.

گزینه های پیکربندی

این کار دارای گزینه های پیکربندی زیر برای برنامه های پایتون است:

نام گزینه توضیحات محدوده ارزش مقدار پیش فرض
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 تنظیم شده باشد N/A تنظیم نشده است

داده ها را آماده کنید

Audio Classifier با کلیپ های صوتی و جریان های صوتی کار می کند. این وظیفه، پیش پردازش ورودی داده، از جمله نمونه‌برداری مجدد، بافر کردن، و کادربندی را انجام می‌دهد.

ورودی خود را به عنوان یک فایل صوتی یا یک آرایه numpy آماده کنید، سپس آن را به یک شی 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)
    

به موارد زیر توجه کنید:

  • هنگام اجرا در حالت پخش صدا، باید به وظیفه طبقه‌بندی کننده صوتی، مهر زمانی داده‌های صوتی ورودی را نیز ارائه دهید.
  • هنگام اجرا در مدل کلیپ‌های صوتی، وظیفه طبقه‌بندی کننده صدا، رشته فعلی را مسدود می‌کند تا زمانی که پردازش صدای ورودی به پایان برسد.

برای مثال کامل‌تر از اجرای Audio Classifier با کلیپ‌های صوتی، به مثال کد مراجعه کنید.

کنترل و نمایش نتایج

پس از اجرای استنتاج، وظیفه Audio Classifier یک شی 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

کد مثال Audio Classifier نحوه نمایش نتایج طبقه بندی برگشتی از این کار را نشان می دهد، برای جزئیات به مثال کد مراجعه کنید.