מדריך לסיווג אודיו באינטרנט

המשימה MediaPipe Audio Classifier מאפשרת לבצע סיווג של נתוני אודיו. אפשר להשתמש במשימה הזו כדי לזהות אירועי קול מתוך קבוצה של קטגוריות שאומנו. בהוראות האלה מוסבר איך להשתמש ב-Audio Classifier באפליקציות Node ובאפליקציות אינטרנט.

אפשר לראות את המשימה הזו בפעולה על ידי צפייה בהדגמה. מידע נוסף על היכולות, המודלים ואפשרויות ההגדרה של המשימה הזו זמין במאמר סקירה כללית.

קוד לדוגמה

קוד לדוגמה של Audio Classifier מספק הטמעה מלאה של המשימה הזו ב-JavaScript לעיונכם. הקוד הזה עוזר לכם לבדוק את המשימה הזו ולהתחיל לבנות אפליקציה משלכם לסיווג אודיו. אתם יכולים להציג, להריץ ולערוך את הדוגמה של Audio Classifier באמצעות דפדפן האינטרנט בלבד.

הגדרה

בקטע הזה מתוארים השלבים העיקריים להגדרת סביבת הפיתוח ופרויקטים של קוד במיוחד לשימוש ב-Audio Classifier. מידע כללי על הגדרת סביבת הפיתוח לשימוש במשימות MediaPipe, כולל דרישות לגבי גרסת הפלטפורמה, מופיע במדריך ההגדרה לאינטרנט.

חבילות JavaScript

הקוד של Audio Classifier זמין דרך חבילת 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"
    }
  });

דוגמה מלאה זמינה בכתובת example code.

אפשרויות הגדרה

במשימה הזו יש את אפשרויות ההגדרה הבאות לאפליקציות אינטרנט ולאפליקציות JavaScript:

שם האפשרות תיאור טווח ערכים ערך ברירת מחדל
displayNamesLocale ההגדרה הזו קובעת את שפת התוויות שבהן יש להשתמש בשמות המוצגים שמופיעים במטא-נתונים של המודל של המשימה, אם הם זמינים. ברירת המחדל היא en לאנגלית. אפשר להוסיף תוויות מתורגמות למטא-נתונים של מודל מותאם אישית באמצעות TensorFlow Lite Metadata Writer API קוד לוקאל en
maxResults מגדיר את המספר המקסימלי האופציונלי של תוצאות סיווג עם הניקוד הכי גבוה שיוחזרו. אם הערך הוא < 0, כל התוצאות הזמינות יוחזרו. מספרים חיוביים -1
scoreThreshold הגדרת סף לניקוד החיזוי שמבטל את הסף שצוין במטא-נתונים של המודל (אם צוין כזה). תוצאות מתחת לערך הזה נדחות. [0.0, 1.0] לא מוגדר
categoryAllowlist מגדירים את הרשימה האופציונלית של שמות קטגוריות מותרים. אם המערך לא ריק, תוצאות הסיווג ששם הקטגוריה שלהן לא מופיע במערך הזה יסוננו. המערכת מתעלמת משמות קטגוריות כפולים או לא מוכרים. האפשרות הזו לא יכולה לפעול יחד עם categoryDenylist, ושימוש בשתי האפשרויות יחד יגרום לשגיאה. כל המחרוזות לא מוגדר
categoryDenylist מגדירה את הרשימה האופציונלית של שמות קטגוריות שאסורות. אם המערך לא ריק, תוצאות הסיווג ששם הקטגוריה שלהן נמצא במערך הזה יסוננו. המערכת מתעלמת משמות קטגוריות כפולים או לא מוכרים. האפשרות הזו לא יכולה לפעול יחד עם categoryAllowlist, ושימוש בשתי האפשרויות יחד יוביל לשגיאה. כל המחרוזות לא מוגדר

הכנת הנתונים

המסווג של אודיו פועל עם קליפים של אודיו ועם סטרימינג של אודיו, ויכול לפעול עם קובצי אודיו בכל פורמט שנתמך על ידי דפדפן המארח. המשימה מטפלת בעיבוד המקדים של נתוני הקלט, כולל דגימה מחדש, אחסון בזיכרון זמני ומיסגור.

הרצת המשימה

המסווג של אודיו משתמש בשיטת classify() כדי להריץ הסקת מסקנות לגבי קובצי קליפים של אודיו או לגבי סטרימינג של אודיו. ה-API של Audio Classifier מחזיר את הקטגוריות האפשריות של אירועי אודיו שזוהו באודיו של הקלט.

הקריאות לשיטה Audio Classifier classify() פועלות באופן סינכרוני וחוסמות את השרשור של ממשק המשתמש. אם מסווגים אודיו מהמיקרופון של המכשיר, כל סיווג יחסום את השרשור הראשי. כדי למנוע את זה, אפשר להטמיע web workers כדי להריץ את 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

בדוגמה של קוד לסיווג אודיו מוצגות תוצאות הסיווג שמוחזרות מהמשימה. פרטים נוספים זמינים בדוגמה.