Tác vụ Phân loại âm thanh MediaPipe cho phép bạn phân loại dữ liệu âm thanh. Bạn có thể hãy dùng nhiệm vụ này để xác định các sự kiện âm thanh từ một nhóm danh mục đã qua huấn luyện. Các sẽ hướng dẫn bạn cách sử dụng Audio Classifier (Phân loại âm thanh) bằng Python.
Để biết thêm thông tin về tính năng, kiểu máy và các lựa chọn cấu hình của nhiệm vụ này, xem phần Tổng quan.
Ví dụ về mã
Mã ví dụ cho Trình phân loại âm thanh cung cấp cách triển khai hoàn chỉnh mã này công việc bằng Python để bạn tham khảo. Mã này giúp bạn kiểm thử công việc này và bắt đầu xây dựng thuật toán phân loại âm thanh của riêng bạn. Bạn có thể xem, chạy và chỉnh sửa Ví dụ về Trình phân loại âm thanh mã chỉ bằng trình duyệt web có Google Colab. Bạn có thể xem mã nguồn cho ví dụ này trên GitHub.
Nếu bạn đang triển khai Trình phân loại âm thanh cho Raspberry Pi, hãy tham khảo ví dụ về Raspberry Pi ứng dụng.
Thiết lập
Phần này mô tả các bước chính để thiết lập môi trường phát triển và mã dự án cụ thể để sử dụng Audio Classifier (Phân loại âm thanh). Để biết thông tin chung về thiết lập môi trường phát triển để sử dụng các tác vụ MediaPipe, bao gồm yêu cầu về phiên bản nền tảng, hãy xem Hướng dẫn thiết lập cho Python.
Gói
Trình phân loại âm thanh sẽ thực hiện tác vụ cho gói pip mediapipe. Bạn có thể cài đặt bằng các phần phụ thuộc sau:
$ python -m pip install mediapipe
Nhập
Nhập các lớp sau để truy cập vào các hàm tác vụ của Trình phân loại âm thanh:
import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import audio
Mẫu
Tác vụ Phân loại âm thanh MediaPipe cần một mô hình đã huấn luyện tương thích với công việc. Để biết thêm thông tin về các mô hình đã qua đào tạo dành cho tính năng Phân loại âm thanh, hãy xem tổng quan về nhiệm vụ phần Mô hình.
Chọn và tải mô hình xuống rồi lưu trữ mô hình đó trong một thư mục trên máy. Bạn có thể sử dụng được đề xuất Tiếng Yamnet mô hình.
model_path = '/absolute/path/to/lite-model_yamnet_classification_tflite_1.tflite'
Chỉ định đường dẫn của mô hình trong thông số Tên mô hình, như được hiển thị dưới đây:
base_options = BaseOptions(model_asset_path=model_path)
Tạo việc cần làm
Sử dụng hàm create_from_options
để tạo công việc. Chiến lược phát hành đĩa đơn
Hàm create_from_options
chấp nhận các lựa chọn cấu hình bao gồm cả chạy
chế độ, ngôn ngữ tên hiển thị, số lượng kết quả tối đa, ngưỡng tin cậy,
danh mục cho phép và danh sách từ chối. Để biết thêm thông tin về cấu hình
hãy xem phần Configuration Overview (Tổng quan về cấu hình).
Nhiệm vụ Trình phân loại âm thanh hỗ trợ các đoạn âm thanh và luồng âm thanh làm dữ liệu đầu vào. Bạn phải chỉ định chế độ chạy tương ứng với loại dữ liệu đầu vào của bạn khi tạo việc cần làm. Chọn thẻ tương ứng với loại dữ liệu nhập của bạn để xem cách tạo tác vụ và chạy suy luận.
Đoạn âm thanh
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. # ...
Luồng âm thanh
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. # ...
Để biết ví dụ hoàn chỉnh về cách tạo Trình phân loại âm thanh để sử dụng với âm thanh, hãy xem mã ví dụ.
Các lựa chọn về cấu hình
Tác vụ này có các lựa chọn cấu hình sau cho các ứng dụng Python:
Tên lựa chọn | Mô tả | Khoảng giá trị | Giá trị mặc định |
---|---|---|---|
running_mode |
Thiết lập chế độ chạy cho tác vụ. Trình phân loại âm thanh có 2 chế độ: AUDIO_CLIPS: Chế độ chạy tác vụ âm thanh trên các đoạn âm thanh độc lập. AUDIO_STREAM: Chế độ chạy tác vụ âm thanh trên một luồng âm thanh, chẳng hạn như từ micrô. Trong chế độ này, ResultsListener phải là để thiết lập một trình nghe để nhận kết quả phân loại một cách không đồng bộ. |
{AUDIO_CLIPS, AUDIO_STREAM } |
AUDIO_CLIPS |
display_names_locale |
Đặt ngôn ngữ của nhãn để sử dụng cho tên hiển thị được cung cấp trong
siêu dữ liệu về mô hình của công việc (nếu có). Mặc định là en cho
Tiếng Anh. Bạn có thể thêm nhãn đã bản địa hoá vào siêu dữ liệu của mô hình tuỳ chỉnh
bằng TensorFlow Lite Metadata Writer API
| Mã ngôn ngữ | vi |
max_results |
Đặt số lượng kết quả phân loại có điểm số cao nhất (không bắt buộc) thành lợi nhuận. Nếu < 0, tất cả kết quả có sẵn sẽ được trả về. | Bất kỳ số dương nào | -1 |
score_threshold |
Đặt ngưỡng điểm số dự đoán ghi đè ngưỡng điểm được cung cấp trong siêu dữ liệu của mô hình (nếu có). Những kết quả thấp hơn giá trị này sẽ bị từ chối. | [0,0, 1] | Chưa đặt |
category_allowlist |
Đặt danh sách các tên danh mục được phép (không bắt buộc). Nếu ô trống,
kết quả phân loại có tên danh mục không nằm trong tập hợp này sẽ là
đã lọc ra. Tên danh mục trùng lặp hoặc không xác định sẽ bị bỏ qua.
Lựa chọn này loại trừ lẫn nhau với category_denylist và sử dụng
cả hai đều dẫn đến lỗi. |
Chuỗi bất kỳ | Chưa đặt |
category_denylist |
Đặt danh sách tên danh mục không được phép (không bắt buộc). Nếu
kết quả phân loại không trống, có tên danh mục nằm trong tập hợp này sẽ được lọc
bị loại. Tên danh mục trùng lặp hoặc không xác định sẽ bị bỏ qua. Lựa chọn này mang tính tương đồng
chỉ có với category_allowlist và sử dụng cả hai đều dẫn đến lỗi. |
Chuỗi bất kỳ | Chưa đặt |
result_callback |
Thiết lập trình nghe kết quả để nhận kết quả phân loại
không đồng bộ khi Trình phân loại âm thanh ở trong luồng âm thanh
. Chỉ sử dụng được khi bạn đặt chế độ chạy thành AUDIO_STREAM |
Không áp dụng | Chưa đặt |
Chuẩn bị dữ liệu
Trình phân loại âm thanh hoạt động với các đoạn âm thanh và luồng âm thanh. Tác vụ sẽ xử lý xử lý trước dữ liệu đầu vào, bao gồm cả lấy mẫu lại, lưu vào bộ đệm và lấy khung hình.
Chuẩn bị dữ liệu đầu vào dưới dạng tệp âm thanh hoặc một mảng numpy, sau đó chuyển đổi tệp đó thành
Đối tượng MediaPipe AudioData
. Bạn có thể dùng thư viện bên ngoài như
SciPy để tải âm thanh đầu vào dưới dạng các mảng numpy.
Các ví dụ sau giải thích và trình bày cách chuẩn bị dữ liệu để xử lý cho từng loại dữ liệu có sẵn:
Đoạn âm thanh
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)
Luồng âm thanh
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)
Chạy tác vụ
Bạn gọi hàm phân loại tương ứng với chế độ chạy của mình để kích hoạt suy luận. API Phân loại âm thanh trả về các danh mục có thể có cho âm thanh các sự kiện trong vùng đệm âm thanh đầu vào.
Đoạn âm thanh
# Perform audio classification on the provided audio clip. audio_classifier_result_list = classifier.classify(audio_data)
Luồng âm thanh
# 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)
Xin lưu ý những điều sau:
- Khi chạy ở chế độ luồng âm thanh, bạn cũng phải cung cấp Tác vụ của Trình phân loại âm thanh cho biết dấu thời gian của dữ liệu âm thanh đầu vào.
- Khi chạy trong mô hình đoạn âm thanh, tác vụ Trình phân loại âm thanh sẽ chặn luồng hiện tại cho đến khi xử lý xong âm thanh đầu vào.
Để có ví dụ hoàn chỉnh hơn về cách chạy Trình phân loại âm thanh với các đoạn âm thanh, hãy xem mã ví dụ.
Xử lý và hiện kết quả
Sau khi chạy dự đoán, tác vụ Trình phân loại âm thanh sẽ trả về một
Đối tượng AudioClassifierResult
chứa danh sách các danh mục có thể có
cho các sự kiện âm thanh trong âm thanh đầu vào.
Sau đây là ví dụ về dữ liệu đầu ra của tác vụ này:
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
Mã ví dụ của Trình phân loại âm thanh minh hoạ cách hiển thị phân loại kết quả được trả về từ nhiệm vụ này, hãy xem mã ví dụ để biết thông tin chi tiết.