งานตัวแยกประเภทเสียงของ MediaPipe ช่วยให้คุณทำการแยกประเภทข้อมูลเสียงได้ คุณสามารถใช้การดำเนินการนี้เพื่อระบุเหตุการณ์เสียงจากชุดหมวดหมู่ที่ฝึกแล้ว วิธีการเหล่านี้แสดงวิธีใช้ตัวแยกประเภทเสียงสำหรับแอป Node และเว็บ
คุณดูการทำงานของงานนี้ได้โดยดูการสาธิต ดูข้อมูลเพิ่มเติมเกี่ยวกับความสามารถ โมเดล และตัวเลือกการกำหนดค่า ของงานนี้ได้ที่ภาพรวม
ตัวอย่างโค้ด
โค้ดตัวอย่างสำหรับตัวแยกประเภทเสียงจะแสดงการใช้งานที่สมบูรณ์ของงานนี้ใน JavaScript เพื่อให้คุณใช้อ้างอิง โค้ดนี้ช่วยให้คุณทดสอบงานนี้และ เริ่มต้นสร้างแอปการแยกประเภทเสียงของคุณเองได้ คุณสามารถดู เรียกใช้ และแก้ไข ตัวอย่าง Audio Classifier ได้โดยใช้เพียงเว็บเบราว์เซอร์
ตั้งค่า
ส่วนนี้จะอธิบายขั้นตอนสำคัญในการตั้งค่าสภาพแวดล้อมในการพัฒนาซอฟต์แวร์และโปรเจ็กต์โค้ดเพื่อใช้ตัวแยกประเภทเสียงโดยเฉพาะ ดูข้อมูลทั่วไปเกี่ยวกับการตั้งค่าสภาพแวดล้อมในการพัฒนาซอฟต์แวร์สำหรับการใช้ MediaPipe Tasks รวมถึงข้อกำหนดด้านเวอร์ชันแพลตฟอร์มได้ที่คู่มือการตั้งค่าสำหรับเว็บ
แพ็กเกจ JavaScript
โค้ดตัวแยกประเภทเสียงพร้อมใช้งานผ่านแพ็กเกจ @mediapipe/tasks-audio
NPM ของ MediaPipe คุณสามารถ
ค้นหาและดาวน์โหลดไลบรารีเหล่านี้ได้จากลิงก์ที่ระบุไว้ในคู่มือการตั้งค่าของแพลตฟอร์ม
คุณติดตั้งแพ็กเกจที่จำเป็นได้ด้วยโค้ดต่อไปนี้สำหรับการจัดเตรียมในเครื่อง โดยใช้คำสั่งต่อไปนี้
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 ช่วยให้คุณปรับแต่ง
Audio Classifier ด้วยตัวเลือกการกำหนดค่าได้ ดูข้อมูลเพิ่มเติมเกี่ยวกับตัวเลือกการกำหนดค่าได้ที่ตัวเลือกการกำหนดค่า
โค้ดต่อไปนี้แสดงวิธีสร้างและกำหนดค่างานด้วยตัวเลือกที่กำหนดเอง
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 ไม่ได้ และการใช้ทั้ง 2 ตัวเลือกจะทำให้เกิดข้อผิดพลาด |
สตริงใดก็ได้ | ไม่ได้ตั้งค่า |
categoryDenylist |
ตั้งค่ารายการชื่อหมวดหมู่ที่ไม่ได้รับอนุญาต (ไม่บังคับ) หากไม่ว่าง ระบบจะกรองผลการจัดประเภทที่มีชื่อหมวดหมู่อยู่ในชุดนี้ออก
ระบบจะไม่สนใจชื่อหมวดหมู่ที่ซ้ำกันหรือไม่รู้จัก ตัวเลือกนี้ใช้ร่วมกับ categoryAllowlist ไม่ได้ และการใช้ทั้ง 2 ตัวเลือกจะทำให้เกิดข้อผิดพลาด |
สตริงใดก็ได้ | ไม่ได้ตั้งค่า |
เตรียมข้อมูล
Audio Classifier ทำงานร่วมกับคลิปเสียงและสตรีมเสียง รวมถึงทำงานร่วมกับไฟล์เสียง ในรูปแบบใดก็ได้ที่เบราว์เซอร์โฮสต์รองรับ โดยงานนี้จะจัดการการประมวลผลล่วงหน้าของอินพุตข้อมูล ซึ่งรวมถึงการสุ่มตัวอย่างใหม่ การบัฟเฟอร์ และการจัดเฟรม
เรียกใช้งาน
ตัวแยกประเภทเสียงใช้วิธี classify() เพื่อเรียกใช้การอนุมานสำหรับไฟล์คลิปเสียงหรือสตรีมเสียง Audio Classifier API จะแสดงหมวดหมู่ที่เป็นไปได้
สำหรับเหตุการณ์เสียงที่รับรู้ในเสียงอินพุต
การเรียกใช้เมธอด Audio Classifier classify() จะทำงานแบบพร้อมกันและบล็อกเธรดของอินเทอร์เฟซผู้ใช้
หากแยกประเภทเสียงจากไมโครโฟนของอุปกรณ์
การแยกประเภทแต่ละครั้งจะบล็อกเทรดหลัก คุณป้องกันปัญหานี้ได้โดย
ใช้ Web Worker เพื่อเรียกใช้ 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; };
ดูการใช้งานที่สมบูรณ์ยิ่งขึ้นสำหรับการเรียกใช้ Task ของตัวแยกประเภทเสียงได้ที่ตัวอย่าง
จัดการและแสดงผลลัพธ์
เมื่อเรียกใช้การอนุมานเสร็จแล้ว งานตัวแยกประเภทเสียงจะแสดงผล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
โค้ดตัวอย่างของตัวแยกประเภทเสียงแสดงวิธีแสดงผลการแยกประเภท ที่ได้จากงาน โปรดดูรายละเอียดในตัวอย่าง