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

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

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

مثال کد

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

راه‌اندازی

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

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

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

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

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

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

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

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

از یکی از توابع createFrom...() ‎ در کلاسه‌بندی صوتی برای آماده‌سازی وظیفه جهت اجرای استنتاج‌ها استفاده کنید. از تابع createFromModelPath() به همراه یک مسیر نسبی یا مطلق به فایل مدل آموزش‌دیده استفاده کنید. اگر مدل شما از قبل در حافظه بارگذاری شده است، می‌توانید از متد createFromModelBuffer() استفاده کنید.

مثال کد زیر استفاده از تابع createFromOptions() را برای تنظیم وظیفه نشان می‌دهد. تابع createFromOptions به شما امکان می‌دهد تا Audio Classifier را با گزینه‌های پیکربندی سفارشی کنید. برای اطلاعات بیشتر در مورد گزینه‌های پیکربندی، به Configuration options مراجعه کنید.

کد زیر نحوه ساخت و پیکربندی وظیفه با گزینه‌های سفارشی را نشان می‌دهد:

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"
    }
  });

شما می‌توانید یک مثال کامل را در example code ببینید.

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

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

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

آماده‌سازی داده‌ها

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

اجرای وظیفه

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

فراخوانی‌های متد classify() classifier برای طبقه‌بندی صدا به صورت همزمان اجرا می‌شوند و نخ رابط کاربری را مسدود می‌کنند. اگر صدا را از میکروفون یک دستگاه طبقه‌بندی کنید، هر طبقه‌بندی نخ اصلی را مسدود می‌کند. می‌توانید با پیاده‌سازی web workerها برای اجرای 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;
};
  

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

مدیریت و نمایش نتایج

پس از اتمام اجرای استنتاج، وظیفه‌ی طبقه‌بندی صوتی، یک شیء 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

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