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

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

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

קוד לדוגמה

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

הגדרה

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

חבילות JavaScript

הקוד של מסווג האודיו זמין דרך MediaPipe @mediapipe/tasks-audio חבילת NPM. אפשר למצוא ולהוריד את הספריות האלה מקישורים שכלולים בפלטפורמה מדריך ההגדרה.

ניתן להתקין את החבילות הנדרשות עם הקוד הבא לצורך Staging מקומי באמצעות הפקודה הבאה:

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 מחזיר את הערך האפשרי קטגוריות של אירועי אודיו שזוהו באודיו של הקלט.

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

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