งาน MediaPipe Audio Classifier ช่วยคุณแยกประเภทข้อมูลเสียงได้ คุณสามารถใช้งานนี้เพื่อระบุกิจกรรมที่มีเสียงจากชุดหมวดหมู่ที่ฝึกแล้ว วิธีการเหล่านี้จะแสดงวิธีใช้ตัวแยกประเภทเสียงกับ Python
ดูข้อมูลเพิ่มเติมเกี่ยวกับความสามารถ โมเดล และตัวเลือกการกำหนดค่าของงานนี้ได้ที่ภาพรวม
ตัวอย่างโค้ด
โค้ดตัวอย่างสำหรับ Audio Classifier แสดงการติดตั้งใช้งานที่สมบูรณ์ใน Python เพื่อเป็นข้อมูลอ้างอิง โค้ดนี้จะช่วยคุณทดสอบงานนี้ และเริ่มสร้างตัวแยกประเภทเสียงของคุณเอง คุณดู เรียกใช้ และแก้ไขตัวอย่างโค้ดของตัวแยกประเภทเสียงได้โดยใช้เพียงเว็บเบราว์เซอร์ด้วย Google Colab คุณดูซอร์สโค้ดสำหรับตัวอย่างนี้ได้ที่ GitHub
หากคุณใช้ตัวแยกประเภทเสียงสำหรับ Raspberry Pi โปรดดูแอปตัวอย่าง Raspberry Pi
ตั้งค่า
ส่วนนี้จะอธิบายขั้นตอนสำคัญในการตั้งค่าสภาพแวดล้อมในการพัฒนาซอฟต์แวร์และโปรเจ็กต์โค้ดเพื่อใช้ตัวแยกประเภทเสียงโดยเฉพาะ ดูข้อมูลทั่วไปเกี่ยวกับการตั้งค่าสภาพแวดล้อมการพัฒนาเพื่อใช้งาน MediaPipe รวมถึงข้อกำหนดเวอร์ชันแพลตฟอร์มได้ที่คู่มือการตั้งค่าสำหรับ Python
กล่องพัสดุ
งานตัวแยกประเภทเสียงของงานแพ็กเกจ Mediapipe คุณติดตั้งการขึ้นต่อกันได้โดยใช้สิ่งต่อไปนี้
$ python -m pip install mediapipe
การนำเข้า
นำเข้าชั้นเรียนต่อไปนี้เพื่อเข้าถึงฟังก์ชันงานตัวแยกประเภทเสียง
import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import audio
รุ่น
งาน MediaPipe Audio Classifier ต้องใช้โมเดลที่ผ่านการฝึกซึ่งเข้ากันได้กับงานนี้ ดูข้อมูลเพิ่มเติมเกี่ยวกับโมเดลที่ผ่านการฝึกที่พร้อมใช้งานสำหรับตัวแยกประเภทเสียงได้ที่ภาพรวมงานส่วนโมเดล
เลือกและดาวน์โหลดโมเดล แล้วจัดเก็บไว้ในไดเรกทอรีในเครื่อง คุณสามารถใช้โมเดล 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 ไม่ได้ และการใช้ทั้ง 2 รายการจะทำให้เกิดข้อผิดพลาด |
สตริงใดก็ได้ | ไม่ได้ตั้งค่า |
category_denylist |
ตั้งค่ารายการตัวเลือกของชื่อหมวดหมู่ที่ไม่ได้รับอนุญาต หากไม่ว่างเปล่า ผลลัพธ์การจัดประเภทซึ่งมีชื่อหมวดหมู่อยู่ในชุดนี้จะถูกกรองออก ระบบจะไม่สนใจชื่อหมวดหมู่ที่ซ้ำกันหรือไม่รู้จัก ตัวเลือกนี้ใช้ด้วยกันกับ category_allowlist ไม่ได้เลย และใช้ทั้ง 2 ผลลัพธ์เกิดข้อผิดพลาด |
สตริงใดก็ได้ | ไม่ได้ตั้งค่า |
result_callback |
ตั้งค่า Listener ผลลัพธ์เพื่อรับผลการจัดประเภทแบบไม่พร้อมกันเมื่อตัวแยกประเภทเสียงอยู่ในโหมดสตรีมเสียง ใช้ได้เมื่อตั้งค่าโหมดการทำงานเป็น AUDIO_STREAM เท่านั้น |
ไม่มีข้อมูล | ไม่ได้ตั้งค่า |
เตรียมข้อมูล
ตัวแยกประเภทเสียงใช้ได้กับคลิปเสียงและสตรีมเสียง โดยงานนี้จะจัดการการประมวลผลอินพุตข้อมูลล่วงหน้า ซึ่งรวมถึงการสุ่มตัวอย่างใหม่ การบัฟเฟอร์ และการจัดเฟรม
เตรียมอินพุตเป็นไฟล์เสียงหรืออาร์เรย์ตัวเลข แล้วแปลงเป็นออบเจ็กต์ AudioData
MediaPipe คุณสามารถใช้ไลบรารีภายนอก เช่น SciPy เพื่อโหลดเสียงอินพุตเป็นอาร์เรย์ numpy
ตัวอย่างต่อไปนี้จะอธิบายและแสดงวิธีเตรียมข้อมูลสำหรับการประมวลผลสำหรับข้อมูลแต่ละประเภทที่มีอยู่
คลิปเสียง
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
โค้ดตัวอย่างตัวแยกประเภทเสียงจะแสดงวิธีแสดงผลการแยกประเภทที่ได้จากงานนี้ โปรดดูรายละเอียดในตัวอย่างรหัส