Задача 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
Пример кода аудиоклассификатора демонстрирует, как отобразить результаты классификации, полученные из этой задачи. Подробности см. в примере кода .