Руководство по классификации аудио для Интернета

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

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

Пример кода

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

Настраивать

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

JavaScript-пакеты

Код аудиоклассификатора доступен через пакет MediaPipe @mediapipe/tasks-audio NPM . Вы можете найти и загрузить эти библиотеки по ссылкам, приведенным в руководстве по установке платформы.

Вы можете установить необходимые пакеты с помощью следующего кода для локальной установки, используя следующую команду:

npm install @mediapipe/tasks-audio

Если вы хотите импортировать код задачи через службу сети доставки контента (CDN), добавьте следующий код в тег в вашем HTML-файле:

<!-- Replace "my-cdn-service.com" with your CDN -->
<head>
  <script src="https://my-cdn-service.com/npm/@mediapipe/tasks-audio/audio_bundle.js"
    crossorigin="anonymous"></script>
</head>

Модель

Для задачи MediaPipe Audio Classifier требуется обученная модель, совместимая с этой задачей. Дополнительную информацию о доступных обученных моделях для Audio Classifier смотрите в разделе «Модели обзора задач».

Выберите и загрузите модель, а затем сохраните ее в каталоге проекта, например:

<dev-project-root>/app/shared/models/

Создать задачу

Используйте одну из функций createFrom...() аудиоклассификатора, чтобы подготовить задачу к выполнению логических выводов. Используйте функцию createFromModelPath() с относительным или абсолютным путем к файлу обученной модели. Если ваша модель уже загружена в память, вы можете использовать метод createFromModelBuffer() .

В приведенном ниже примере кода показано использование функции createFromOptions() для настройки задачи. Функция createFromOptions позволяет настраивать аудиоклассификатор с помощью параметров конфигурации. Дополнительные сведения о параметрах конфигурации см. в разделе Параметры конфигурации .

Следующий код демонстрирует, как создать и настроить задачу с настраиваемыми параметрами:

const audio = await FilesetResolver.forAudioTasks(
    "https://my-cdn-service.com/npm/@mediapipe/tasks-audio/wasm"
  );

const audioClassifier = await AudioClassifier.createFromOptions(audio, {
    baseOptions: {
      modelAssetPath:
        "https://tfhub.dev/google/lite-model/yamnet/classification/tflite/1?lite-format=tflite"
    }
  });

Реализация примера кода Audio Classifier позволяет пользователю выбирать между режимами обработки. Такой подход усложняет код создания задачи и может не подойти для вашего варианта использования. Вы можете увидеть различные режимы в функциях runAudioClassification() и runStreamingAudioClassification() example code .

Варианты конфигурации

Эта задача имеет следующие параметры конфигурации для веб-приложений и приложений JavaScript:

Название опции Описание Диапазон значений Значение по умолчанию
displayNamesLocale Задает язык меток, которые будут использоваться для отображаемых имен, представленных в метаданных модели задачи, если они доступны. По умолчанию — en для английского языка. Вы можете добавить локализованные метки к метаданным пользовательской модели с помощью API записи метаданных TensorFlow Lite. Код региона ru
maxResults Устанавливает необязательное максимальное количество возвращаемых результатов классификации с наивысшим баллом. Если < 0, будут возвращены все доступные результаты. Любые положительные числа -1
scoreThreshold Устанавливает порог оценки прогноза, который переопределяет тот, который указан в метаданных модели (если таковые имеются). Результаты ниже этого значения отклоняются. [0,0, 1,0] Не задано
categoryAllowlist Устанавливает необязательный список разрешенных имен категорий. Если поле не пусто, результаты классификации, имя категории которых отсутствует в этом наборе, будут отфильтрованы. Повторяющиеся или неизвестные названия категорий игнорируются. Эта опция является взаимоисключающей с categoryDenylist , и использование обеих приводит к ошибке. Любые строки Не задано
categoryDenylist Устанавливает необязательный список имен категорий, которые не разрешены. Если значение не пустое, результаты классификации, имя категории которых находится в этом наборе, будут отфильтрованы. Повторяющиеся или неизвестные названия категорий игнорируются. Этот параметр является взаимоисключающим с categoryAllowlist , и использование обоих приводит к ошибке. Любые строки Не задано

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

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

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

Классификатор аудио использует метод classify() для выполнения выводов для файлов аудиоклипов или аудиопотоков. API аудиоклассификатора возвращает возможные категории аудиособытий, распознаваемых во входном аудио.

Вызовы метода classify() аудиоклассификатора выполняются синхронно и блокируют поток пользовательского интерфейса. Если вы классифицируете звук с микрофона устройства, каждая классификация будет блокировать основной поток. Вы можете предотвратить это, внедрив веб-работников для запуска classify() в другом потоке.

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

Аудио клипы

// Create audio buffer
const sample = await response.arrayBuffer();
const audioBuffer = await audioCtx.decodeAudioData(sample);

// Use AudioClassifier to run classification
const results = audioClassifier.classify(
  audioBuffer.getChannelData(0),
  audioBuffer.sampleRate
);
  

Аудиопоток

stream = await navigator.mediaDevices.getUserMedia(constraints);
audioCtx = new AudioContext({ sampleRate: 16000 });

const source = audioCtx.createMediaStreamSource(stream);
const scriptNode = audioCtx.createScriptProcessor(16384, 1, 1);

scriptNode.onaudioprocess = function (audioProcessingEvent) {
  const inputBuffer = audioProcessingEvent.inputBuffer;
  let inputData = inputBuffer.getChannelData(0);

  // Classify the audio
  const result = audioClassifier.classify(inputData);
  const categories = result[0].classifications[0].categories;
};
  

Более полную реализацию запуска задачи 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

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