Hướng dẫn phân loại âm thanh cho Python

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.