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

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

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

نمونه کد

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

راه اندازی

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

بسته های جاوا اسکریپت

کد طبقه‌بندی کننده صوتی از طریق بسته MediaPipe @mediapipe/tasks-audio NPM در دسترس است. می‌توانید این کتابخانه‌ها را از پیوندهای ارائه شده در راهنمای راه‌اندازی پلتفرم پیدا و دانلود کنید.

با استفاده از دستور زیر می توانید بسته های مورد نیاز را با کد زیر برای مرحله محلی نصب کنید:

npm install @mediapipe/tasks-audio

اگر می‌خواهید کد وظیفه را از طریق یک سرویس شبکه تحویل محتوا (CDN) وارد کنید، کد زیر را در آن اضافه کنید در فایل HTML خود تگ کنید:

<!-- 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 Audio Classifier به یک مدل آموزش دیده نیاز دارد که با این کار سازگار باشد. برای اطلاعات بیشتر در مورد مدل‌های آموزش‌دیده موجود برای طبقه‌بندی کننده صوتی، به بخش مدل‌های نمای کلی کار مراجعه کنید.

یک مدل را انتخاب و دانلود کنید، و سپس آن را در فهرست پروژه خود ذخیره کنید، به عنوان مثال:

<dev-project-root>/app/shared/models/

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

از یکی از توابع Audio Classifier 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"
    }
  });

اجرای کد مثال Audio Classifier به کاربر این امکان را می دهد که بین حالت های پردازش یکی را انتخاب کند. این رویکرد کد ایجاد کار را پیچیده‌تر می‌کند و ممکن است برای مورد استفاده شما مناسب نباشد. می توانید حالت های مختلف را در runAudioClassification() و runStreamingAudioClassification() example code مشاهده کنید.

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

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

نام گزینه توضیحات محدوده ارزش مقدار پیش فرض
displayNamesLocale زبان برچسب‌ها را برای استفاده برای نام‌های نمایشی ارائه شده در فراداده مدل کار، در صورت وجود، تنظیم می‌کند. پیش فرض برای انگلیسی en است. با استفاده از TensorFlow Lite Metadata Writer API می‌توانید برچسب‌های محلی را به ابرداده یک مدل سفارشی اضافه کنید. کد محلی en
maxResults حداکثر تعداد اختیاری نتایج طبقه بندی با امتیاز بالا را برای بازگشت تنظیم می کند. اگر < 0 باشد، تمام نتایج موجود برگردانده خواهند شد. هر عدد مثبت -1
scoreThreshold آستانه امتیاز پیش‌بینی را تعیین می‌کند که بر آستانه ارائه‌شده در فراداده مدل (در صورت وجود) لغو می‌شود. نتایج زیر این مقدار رد می شوند. [0.0، 1.0] تنظیم نشده است
categoryAllowlist فهرست اختیاری نام‌های دسته‌های مجاز را تنظیم می‌کند. در صورت خالی نبودن، نتایج طبقه‌بندی که نام دسته آن‌ها در این مجموعه نیست، فیلتر می‌شوند. نام‌های دسته‌بندی تکراری یا ناشناخته نادیده گرفته می‌شوند. این گزینه با categoryDenylist منحصر به فرد است و از هر دو نتیجه در یک خطا استفاده می کند. هر رشته تنظیم نشده است
categoryDenylist فهرست اختیاری نام‌های دسته‌هایی را که مجاز نیستند تنظیم می‌کند. در صورت خالی نبودن، نتایج طبقه بندی که نام دسته آنها در این مجموعه است فیلتر می شود. نام‌های دسته‌بندی تکراری یا ناشناخته نادیده گرفته می‌شوند. این گزینه با categoryAllowlist منحصر به فرد است و از هر دو نتیجه در خطا استفاده می کند. هر رشته تنظیم نشده است

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

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

وظیفه را اجرا کنید

Audio Classifier از متد classify() برای اجرای استنباط برای فایل های کلیپ صوتی یا جریان های صوتی استفاده می کند. Audio Classifier API دسته بندی های ممکن برای رویدادهای صوتی شناسایی شده در صدای ورودی را برمی گرداند.

فراخوانی های متد Audio Classifier 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;
};
  

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

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

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