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