งาน MediaPipe Audio Classifier ให้คุณจำแนกข้อมูลเสียงได้ คุณสามารถ ใช้งานนี้เพื่อระบุกิจกรรมที่มีเสียงจากชุดหมวดหมู่ที่ได้รับการฝึก เหล่านี้ แสดงวิธีใช้ตัวแยกประเภทเสียงกับ Python
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับความสามารถ โมเดล และตัวเลือกการกำหนดค่า ของงานนี้ โปรดดูภาพรวม
ตัวอย่างโค้ด
โค้ดตัวอย่างสำหรับตัวแยกประเภทเสียงมีการติดตั้งใช้งานอย่างสมบูรณ์ ใน Python เพื่อใช้เป็นข้อมูลอ้างอิง โค้ดนี้จะช่วยคุณทดสอบงานนี้และรับ เริ่มสร้างตัวแยกประเภทเสียงของคุณเอง คุณสามารถดู เรียกใช้ และแก้ไข ตัวอย่างตัวแยกประเภทเสียง โค้ด โดยใช้เพียงเว็บเบราว์เซอร์กับ Google Colab คุณสามารถดูซอร์สโค้ดสำหรับ ตัวอย่างนี้บน GitHub
ถ้าคุณใช้ตัวแยกประเภทเสียงสำหรับ Raspberry Pi โปรดดูที่ ตัวอย่างของ Raspberry Pi แอป
ตั้งค่า
ส่วนนี้จะอธิบายขั้นตอนสำคัญในการตั้งค่าสภาพแวดล้อมในการพัฒนาซอฟต์แวร์ และ เพื่อใช้แยกประเภทเสียงโดยเฉพาะ สำหรับข้อมูลทั่วไปเกี่ยวกับ การตั้งค่าสภาพแวดล้อมในการพัฒนาซอฟต์แวร์ของคุณสำหรับการใช้งาน MediaPipe ซึ่งรวมถึง ข้อกำหนดด้านเวอร์ชันของแพลตฟอร์ม โปรดดูคู่มือการตั้งค่าสำหรับ Python
แพ็กเกจ
ตัวแยกประเภทเสียงจะทำงานกับแพ็กเกจ Mediapไปป์ คุณสามารถติดตั้ง Dependency ต่อไปนี้ด้วย
$ python -m pip install mediapipe
การนำเข้า
นำเข้าคลาสต่อไปนี้เพื่อเข้าถึงฟังก์ชันงานของเครื่องมือแยกประเภทเสียง
import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import audio
รุ่น
งานตัวแยกประเภทเสียงของ MediaPipe ต้องใช้โมเดลที่ผ่านการฝึกและใช้งานได้กับ งาน ดูข้อมูลเพิ่มเติมเกี่ยวกับโมเดลที่ผ่านการฝึกที่ใช้ได้กับตัวแยกประเภทเสียงได้ที่ ภาพรวมงานส่วนโมเดล
เลือกและดาวน์โหลดโมเดล แล้วจัดเก็บไว้ในไดเรกทอรีในเครื่อง คุณสามารถใช้ แนะนำ Yamnet โมเดล
model_path = '/absolute/path/to/lite-model_yamnet_classification_tflite_1.tflite'
ระบุเส้นทางของโมเดลภายในพารามิเตอร์ชื่อโมเดลดังที่แสดงด้านล่าง
base_options = BaseOptions(model_asset_path=model_path)
สร้างงาน
ใช้ฟังก์ชัน create_from_options
เพื่อสร้างงาน
ฟังก์ชัน create_from_options
ยอมรับตัวเลือกการกำหนดค่ารวมถึงการเรียกใช้
โหมด ภาษาของชื่อที่แสดง จำนวนผลลัพธ์สูงสุด เกณฑ์ความเชื่อมั่น
รายการอนุญาตหมวดหมู่ และรายการปฏิเสธ ดูข้อมูลเพิ่มเติมเกี่ยวกับการกำหนดค่า
โปรดดูที่ภาพรวมการกำหนดค่า
งานตัวแยกประเภทเสียงรองรับอินพุตคลิปเสียงและสตรีมเสียง คุณ ต้องระบุโหมดการทำงานที่สอดคล้องกับประเภทข้อมูลอินพุตของคุณเมื่อ กำลังสร้างงาน เลือกแท็บที่สอดคล้องกับประเภทข้อมูลอินพุตเพื่อดู วิธีสร้างงานและเรียกใช้การอนุมาน
คลิปเสียง
AudioClassifier = mp.tasks.audio.AudioClassifier AudioClassifierOptions = mp.tasks.audio.AudioClassifierOptions AudioRunningMode = mp.tasks.audio.RunningMode BaseOptions = mp.tasks.BaseOptions options = AudioClassifierOptions( base_options=BaseOptions(model_asset_path='/path/to/model.tflite'), max_results=5, running_mode=AudioRunningMode.AUDIO_CLIPS) with AudioClassifier.create_from_options(options) as classifier: # The classifier is initialized. Use it here. # ...
สตรีมเสียง
AudioClassifier = mp.tasks.audio.AudioClassifier AudioClassifierOptions = mp.tasks.audio.AudioClassifierOptions AudioClassifierResult = mp.tasks.audio.AudioClassifierResult AudioRunningMode = mp.tasks.audio.RunningMode BaseOptions = mp.tasks.BaseOptions def print_result(result: AudioClassifierResult, timestamp_ms: int): print(AudioClassifierResult result: {}’.format(result)) options = AudioClassifierOptions( base_options=BaseOptions(model_asset_path='/path/to/model.tflite'), running_mode=AudioRunningMode.AUDIO_STREAM, max_results=5, result_callback=print_result) with AudioClassifier.create_from_options(options) as classifier: # The classifier is initialized. Use it here. # ...
สำหรับตัวอย่างที่สมบูรณ์ของการสร้างตัวแยกประเภทเสียงเพื่อใช้กับเสียง โปรดดูที่ รหัส ตัวอย่าง
ตัวเลือกการกำหนดค่า
งานนี้มีตัวเลือกการกำหนดค่าต่อไปนี้สำหรับแอปพลิเคชัน Python
ชื่อตัวเลือก | คำอธิบาย | ช่วงค่า | ค่าเริ่มต้น |
---|---|---|---|
running_mode |
ตั้งค่าโหมดการทำงานสำหรับงาน ตัวแยกประเภทเสียงมี 2 โหมด ได้แก่ AUDIO_CLIPS: โหมดสำหรับการเรียกใช้งานเสียงบนคลิปเสียงอิสระ AUDIO_STREAM: โหมดสำหรับการเรียกใช้งานเสียงในสตรีมเสียง เช่น จากไมโครโฟน ในโหมดนี้ resultsListener ต้องเป็น ถูกเรียกให้ตั้งค่า Listener เพื่อรับผลการจัดประเภท แบบไม่พร้อมกัน |
{AUDIO_CLIPS, AUDIO_STREAM } |
AUDIO_CLIPS |
display_names_locale |
ตั้งค่าภาษาของป้ายกำกับที่จะใช้กับชื่อที่แสดงซึ่งระบุไว้ใน
ข้อมูลเมตาของโมเดลงาน (หากมี) ค่าเริ่มต้นคือ en สำหรับ
ภาษาอังกฤษ คุณเพิ่มป้ายกำกับที่แปลแล้วลงในข้อมูลเมตาของโมเดลที่กำหนดเองได้
โดยใช้ TensorFlow Lite Metadata Writer API
| รหัสภาษา | en |
max_results |
ตั้งค่าจำนวนผลลัพธ์การจัดประเภทที่มีคะแนนสูงสุด (ไม่บังคับ) เป็น ผลตอบแทน ถ้า < 0 ระบบจะแสดงผลลัพธ์ที่ใช้ได้ทั้งหมด | จำนวนบวกใดก็ได้ | -1 |
score_threshold |
ตั้งค่าเกณฑ์คะแนนการคาดการณ์ซึ่งจะลบล้างเกณฑ์ที่ระบุไว้ใน ข้อมูลเมตาของโมเดล (หากมี) ผลลัพธ์ที่ต่ำกว่าค่านี้ถูกปฏิเสธ | [0.0, 1.0] | ไม่ได้ตั้งค่า |
category_allowlist |
ตั้งค่ารายการชื่อหมวดหมู่ที่อนุญาตซึ่งไม่บังคับ หากไม่ว่างเปล่า
ผลลัพธ์การจัดหมวดหมู่ที่มีชื่อหมวดหมู่ที่ไม่ได้อยู่ในชุดนี้จะ
ถูกกรองออก ระบบจะไม่สนใจชื่อหมวดหมู่ที่ซ้ำกันหรือไม่รู้จัก
ตัวเลือกนี้ไม่เกี่ยวข้องกับ category_denylist และใช้
ทั้งคู่จะทําให้เกิดข้อผิดพลาด |
สตริงใดก็ได้ | ไม่ได้ตั้งค่า |
category_denylist |
ตั้งค่ารายการตัวเลือกชื่อหมวดหมู่ที่ไม่ได้รับอนุญาต ถ้า
ไม่ว่างเปล่า ระบบจะกรองผลลัพธ์การจัดประเภทที่มีชื่อหมวดหมู่ในชุดนี้
ระบบจะไม่สนใจชื่อหมวดหมู่ที่ซ้ำกันหรือไม่รู้จัก ตัวเลือกนี้มีผลร่วมกัน
เฉพาะตัวสำหรับ category_allowlist และการใช้ทั้ง 2 อย่างจะทำให้เกิดข้อผิดพลาด |
สตริงใดก็ได้ | ไม่ได้ตั้งค่า |
result_callback |
ตั้งค่า Listener ผลลัพธ์เพื่อรับผลลัพธ์การจัดประเภท
ไม่พร้อมกันเมื่อตัวแยกประเภทเสียงอยู่ในสตรีมเสียง
ใช้ได้เมื่อตั้งค่าโหมดวิ่งเป็น AUDIO_STREAM เท่านั้น |
ไม่มี | ไม่ได้ตั้งค่า |
เตรียมข้อมูล
ตัวแยกประเภทเสียงใช้งานได้กับคลิปเสียงและสตรีมเสียง โดยงานดังกล่าวจะจัดการ การประมวลผลอินพุตข้อมูลล่วงหน้า ซึ่งรวมถึงการสุ่มตัวอย่าง การบัฟเฟอร์ และการเฟรม
จัดเตรียมอินพุตของคุณเป็นไฟล์เสียงหรืออาร์เรย์ numpy แล้วแปลงเป็น
ออบเจ็กต์ AudioData
ของ MediaPipe คุณสามารถใช้ไลบรารีภายนอก เช่น
SciPy เพื่อโหลดเสียงอินพุตเป็นอาร์เรย์จำนวน
ตัวอย่างต่อไปนี้จะอธิบายและแสดงวิธีเตรียมข้อมูลสำหรับการประมวลผลข้อมูล ประเภทข้อมูลที่พร้อมใช้งานแต่ละประเภทมีดังนี้
คลิปเสียง
import numpy as np from scipy.io import wavfile AudioData = mp.tasks.components.containers.AudioData sample_rate, buffer = wavfile.read('/path/to/audio.wav') audio_data = AudioData.create_from_array( buffer.astype(float) / np.iinfo(np.int16).max, sample_rate)
สตรีมเสียง
import numpy as np AudioData = mp.tasks.components.containers.AudioData # Read microphone data as np arrays, then call audio_data = AudioData.create_from_array( buffer.astype(float) / np.iinfo(np.int16).max, sample_rate)
เรียกใช้งาน
คุณเรียกใช้ฟังก์ชันจัดประเภทที่สอดคล้องกับโหมดการวิ่งเพื่อทริกเกอร์ การอนุมาน Audio Classifier API จะแสดงผลหมวดหมู่เสียงที่เป็นไปได้ เหตุการณ์ภายในบัฟเฟอร์เสียงอินพุต
คลิปเสียง
# Perform audio classification on the provided audio clip. audio_classifier_result_list = classifier.classify(audio_data)
สตรีมเสียง
# Send live audio data to perform audio classification. # Results are sent to the `result_callback` provided in the `AudioClassifierOptions` classifier.classify_async(audio_data, timestamp_ms)
โปรดทราบดังต่อไปนี้
- เมื่อทำงานในโหมดสตรีมเสียง คุณต้องระบุ ตัวแยกประเภทเสียงจะทำงานกับการประทับเวลาของข้อมูลเสียงอินพุต
- เมื่อทำงานในรูปแบบคลิปเสียง งานตัวแยกประเภทเสียงจะบล็อก เทรดปัจจุบันจนกว่าจะประมวลผลเสียงอินพุตเสร็จสิ้น
สำหรับตัวอย่างที่สมบูรณ์ยิ่งขึ้นของการเรียกใช้ตัวแยกประเภทเสียงกับคลิปเสียง โปรดดูที่ รหัส ตัวอย่าง
จัดการและแสดงผลลัพธ์
เมื่อใช้การอนุมาน งานตัวแยกประเภทเสียงจะแสดงผล
ออบเจ็กต์ 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
โค้ดตัวอย่างของตัวแยกประเภทเสียงแสดงวิธีแสดงการแยกประเภท ผลลัพธ์ที่แสดง จากงานนี้ โปรดดู โค้ด ตัวอย่าง เพื่อดูรายละเอียด