دليل تصنيف الصوت للويب

تتيح لك مهمة مصنِّف الصوت MediaPipe تصنيف البيانات الصوتية. يمكنك استخدِم هذه المهمة لتحديد الأحداث الصوتية من مجموعة من الفئات المدرَّبة. هذه كيفية استخدام "مصنِّف الصوت" للعقدة وتطبيقات الويب.

يمكنك مشاهدة هذه المهمة وهي قيد التنفيذ من خلال عرض العرض التوضيحي. مزيد من المعلومات حول الإمكانات والنماذج وخيارات الضبط هذه المهمة، راجع نظرة عامة.

مثال على الرمز البرمجي

ويقدِّم الرمز البرمجي لمصنّف الصوت مثالاً على ذلك المهمة في JavaScript كمرجع لك. يساعدك هذا الرمز في اختبار هذه المهمة ابدأ في إنشاء تطبيقك الخاص لتصنيف الصوت. يمكنك عرض وتنفيذ وتحرير مثال على الرمز لأداة تصنيف الصوت باستخدام متصفح الويب فقط.

ضبط إعدادات الجهاز

يصف هذا القسم الخطوات الرئيسية لإعداد بيئة التطوير لترميز البيانات خصيصًا لاستخدام "مصنِّف الصوت". للحصول على معلومات عامة عن إعداد بيئة التطوير الخاصة بك لاستخدام مهام MediaPipe، بما في ذلك متطلبات إصدار نظام التشغيل، راجع دليل الإعداد للويب

حزم JavaScript

يتوفّر رمز "مصنِّف الصوت" من خلال 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" نموذجًا مدرّبًا متوافقًا مع هذه المهمة. لمزيد من المعلومات حول النماذج المدرَّبة المتاحة لـ "مصنِّف الصوت"، يُرجى الاطّلاع على نظرة عامة على المهمة قسم النماذج.

حدد نموذجًا ونزّله ثم خزّنه في دليل المشروع على سبيل المثال:

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

إنشاء المهمة

يمكنك استخدام إحدى وظائف "مصنِّف الصوت" 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"
    }
  });

يتيح تنفيذ رمز نموذج "مصنِّف الصوت" للمستخدم الاختيار من بين أوضاع المعالجة. تجعل هذه الطريقة رمز إنشاء المهمة أكثر تعقيدًا قد لا تكون مناسبة لحالة الاستخدام لديك. يمكنك الاطّلاع على الأوضاع المختلفة في runAudioClassification() وrunStreamingAudioClassification() دوال example code

خيارات الإعداد

تتضمّن هذه المهمة خيارات الضبط التالية للويب وJavaScript التطبيقات:

اسم الخيار الوصف نطاق القيمة القيمة الافتراضية
displayNamesLocale لتعيين لغة التسميات لاستخدامها في الأسماء المعروضة المقدمة في بيانات التعريف لنموذج المهمة، إن وجد. القيمة التلقائية هي en لمدة الإنجليزية. يمكنك إضافة تصنيفات مترجَمة إلى البيانات الوصفية لنموذج مخصّص. باستخدام TensorFlow Lite Metadata Writer API رمز اللغة en
maxResults لضبط الحد الأقصى الاختياري لنتائج التصنيف الأعلى تقييمًا إرجاع. إذا كانت قيمة 0، سيتم عرض جميع النتائج المتاحة. أي أرقام موجبة -1
scoreThreshold لتعيين الحد الأدنى لنتيجة التنبؤ الذي يلغي الحد المقدم في بيانات التعريف للنموذج (إن وجدت). يتم رفض النتائج التي تكون أدنى من هذه القيمة. [0.0، 1.0] لم يتم ضبط الوضع
categoryAllowlist تضبط هذه السياسة القائمة الاختيارية لأسماء الفئات المسموح بها. إذا لم تكن فارغة، سيتم وضع نتائج التصنيف التي لا يوجد اسم فئته بها في هذه المجموعة بفلترته. ويتم تجاهل أسماء الفئات المكرّرة أو غير المعروفة. لا يمكن لأحد الطرفين استخدام هذا الخيار إلا بعد استخدام categoryDenylist. يؤدي كلا الخيارين إلى خطأ. أي سلاسل لم يتم ضبط الوضع
categoryDenylist تحدِّد هذه السياسة القائمة الاختيارية لأسماء الفئات غير المسموح بها. في حال حذف نتائج التصنيف التي يكون اسم فئتها في هذه المجموعة غير فارغة، ستتم فلترتها . ويتم تجاهل أسماء الفئات المكرّرة أو غير المعروفة. يتوفّر هذا الخيار حصرية مع categoryAllowlist واستخدام النتيجتين معًا إلى حدوث خطأ. أي سلاسل لم يتم ضبط الوضع

تجهيز البيانات

ويعمل تطبيق "مصنِّف الصوت" مع المقاطع الصوتية وعمليات البث الصوتي، كما يمكن أن يعمل مع الملفات الصوتية. الملفات بأي تنسيق يدعمه المتصفح المضيف. تتعامل المهمة مع البيانات المعالجة المسبقة للإدخال، بما في ذلك إعادة أخذ العينات والتخزين المؤقت والتأطير.

تنفيذ المهمة

يستخدم "مصنِّف الصوت" طريقة classify() لإجراء الاستنتاجات الخاصة بالمقطع الصوتي. الملفات أو عمليات البث الصوتي. تعرض واجهة برمجة التطبيقات Audio Classifier API القيم المحتملة فئات الأحداث الصوتية التي يتم التعرّف عليها في الإدخال الصوتي.

يتم تشغيل المكالمات التي يتم إجراؤها إلى طريقة مصنّف الصوت 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;
};
  

لتنفيذ مهمة "مصنِّف صوت" بشكل كامل، يُرجى مراجعة مثال الرمز البرمجي.

التعامل مع العملاء وعرض النتائج

فور إكمال عملية استنتاج، تعرض مهمة "مصنِّف الصوت" عنصر 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

يوضّح رمز نموذج "مصنِّف الصوت" طريقة عرض التصنيف التي تم إرجاعها من المهمة، يمكنك الاطلاع على مثال على الرمز البرمجي لمزيد من التفاصيل.