המשימה 'מסווג אודיו של MediaPipe' מאפשרת לך לבצע סיווג של נתוני אודיו. אפשר להשתמש במשימה הזו כדי לזהות אירועים של זיהוי צלילים מקבוצה של קטגוריות מאומנות. בהוראות שכאן מוסבר איך להשתמש במסווג אודיו לאפליקציות של צמתים ולאפליקציות אינטרנט.
תוכלו לראות את המשימה הזו בהדגמה. למידע נוסף על היכולות, המודלים ואפשרויות ההגדרה של המשימה הזו, קראו את הסקירה הכללית.
קוד לדוגמה
הקוד לדוגמה של Audio Classifier מספק הטמעה מלאה של המשימה הזו ב-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' צריך מודל מאומן שתואם למשימה הזו. למידע נוסף על המודלים הזמינים למסווג אודיו, עיינו בסקירה הכללית על המשימות בקטע Models.
בוחרים ומורידים מודל, ולאחר מכן שומרים אותו בספריית הפרויקט. לדוגמה:
<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()
של מסווג אודיו פועלות באופן סינכרוני וחוסמות את ה-thread של ממשק המשתמש. אם אתם מסווגים אודיו מהמיקרופון של המכשיר, כל סיווג יחסום את ה-thread הראשי. אפשר למנוע זאת על ידי הטמעת עובדי אינטרנט שמריצים את classify()
ב-thread אחר.
הקוד הבא מדגים איך לבצע את העיבוד באמצעות מודל המשימה:
קטעי אודיו
// 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
הקוד לדוגמה של מסווג האודיו מדגים איך להציג את תוצאות הסיווג שהוחזרו מהמשימה. פרטים נוספים זמינים בקוד לדוגמה.