Руководство по классификации аудио для Python

Задача MediaPipe Audio Classifier позволяет выполнять классификацию аудиоданных. Эту задачу можно использовать для идентификации звуковых событий из набора обученных категорий. Эти инструкции покажут вам, как использовать аудиоклассификатор с Python.

Дополнительные сведения о возможностях, моделях и параметрах конфигурации этой задачи см. в разделе Обзор .

Пример кода

В примере кода аудиоклассификатора представлена ​​полная реализация этой задачи на Python. Этот код поможет вам протестировать эту задачу и приступить к созданию собственного аудиоклассификатора. Вы можете просматривать, запускать и редактировать пример кода аудиоклассификатора, используя только веб-браузер с Google Colab. Посмотреть исходный код этого примера можно на GitHub .

Если вы реализуете аудиоклассификатор для Raspberry Pi, обратитесь к примеру приложения Raspberry Pi .

Настраивать

В этом разделе описаны ключевые шаги по настройке среды разработки и проектов кода специально для использования Audio Classifier. Общие сведения о настройке среды разработки для использования задач MediaPipe, включая требования к версии платформы, см. в руководстве по настройке Python .

Пакеты

Классификатор аудио выполняет задачу пакета mediapipe pip. Вы можете установить зависимость следующим образом:

$ python -m pip install mediapipe

Импорт

Импортируйте следующие классы, чтобы получить доступ к функциям задачи аудиоклассификатора:

import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import audio

Модель

Для задачи MediaPipe Audio Classifier требуется обученная модель, совместимая с этой задачей. Дополнительную информацию о доступных обученных моделях для 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 Устанавливает режим выполнения задачи. Аудио Классификатор имеет два режима:

AUDIO_CLIPS: режим запуска аудиозадачи для независимых аудиоклипов.

AUDIO_STREAM: режим запуска аудиозадачи в аудиопотоке, например, с микрофона. В этом режиме необходимо вызвать resultListener, чтобы настроить прослушиватель на асинхронное получение результатов классификации.
{ AUDIO_CLIPS, AUDIO_STREAM } AUDIO_CLIPS
display_names_locale Задает язык меток, которые будут использоваться для отображаемых имен, представленных в метаданных модели задачи, если они доступны. По умолчанию en английский язык. Вы можете добавить локализованные метки к метаданным пользовательской модели с помощью API записи метаданных TensorFlow Lite. Код региона ru
max_results Устанавливает необязательное максимальное количество возвращаемых результатов классификации с наивысшим баллом. Если < 0, будут возвращены все доступные результаты. Любые положительные числа -1
score_threshold Устанавливает порог оценки прогноза, который переопределяет тот, который указан в метаданных модели (если таковые имеются). Результаты ниже этого значения отклоняются. [0,0, 1,0] Не установлено
category_allowlist Устанавливает необязательный список разрешенных имен категорий. Если поле не пусто, результаты классификации, имя категории которых отсутствует в этом наборе, будут отфильтрованы. Повторяющиеся или неизвестные названия категорий игнорируются. Эта опция является взаимоисключающей с category_denylist , и использование обеих приводит к ошибке. Любые строки Не установлено
category_denylist Устанавливает необязательный список имен категорий, которые не разрешены. Если значение не пустое, результаты классификации, имя категории которых находится в этом наборе, будут отфильтрованы. Повторяющиеся или неизвестные названия категорий игнорируются. Этот параметр является взаимоисключающим с category_allowlist , и использование обоих приводит к ошибке. Любые строки Не установлено
result_callback Настраивает прослушиватель результатов на асинхронное получение результатов классификации, когда аудиоклассификатор находится в режиме аудиопотока. Может использоваться только в том случае, если для режима работы установлено значение AUDIO_STREAM Н/Д Не установлено

Подготовьте данные

Audio Classifier работает с аудиоклипами и аудиопотоками. Задача выполняет предварительную обработку входных данных, включая повторную выборку, буферизацию и кадрирование.

Подготовьте входные данные в виде аудиофайла или массива numpy, а затем преобразуйте их в объект MediaPipe AudioData . Вы можете использовать внешнюю библиотеку, такую ​​как 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)
    

Запустить задачу

Вы вызываете функцию классификации, соответствующую вашему режиму работы, чтобы инициировать выводы. 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)
    

Обратите внимание на следующее:

  • При работе в режиме аудиопотока необходимо также предоставить задаче Классификатора аудио метку времени входных аудиоданных.
  • При запуске в модели аудиоклипов задача Классификатора звука блокирует текущий поток до тех пор, пока он не завершит обработку входного аудио.

Более полный пример запуска Audio Classifier с аудиоклипами смотрите в примере кода .

Обработка и отображение результатов

После выполнения вывода задача Audio Classifier возвращает объект 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

Пример кода аудиоклассификатора демонстрирует, как отобразить результаты классификации, полученные из этой задачи. Подробности см. в примере кода .