وظیفه 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 نحوه نمایش نتایج طبقه بندی برگشتی از این کار را نشان می دهد، برای جزئیات به مثال کد مراجعه کنید.