Задача MediaPipe Audio Classifier позволяет выполнять классификацию аудиоданных. Вы можете использовать эту задачу для идентификации звуковых событий на основе набора обученных категорий. В этих инструкциях показано, как использовать Audio Classifier для Node.js и веб-приложений.
Вы можете увидеть эту задачу в действии, посмотрев демонстрацию . Для получения дополнительной информации о возможностях, моделях и параметрах конфигурации этой задачи см. раздел «Обзор» .
Пример кода
Пример кода для Audio Classifier представляет собой полную реализацию этой задачи на JavaScript для вашего ознакомления. Этот код поможет вам протестировать задачу и начать создавать собственное приложение для классификации аудио. Вы можете просматривать, запускать и редактировать пример Audio Classifier, используя только веб-браузер.
Настраивать
В этом разделе описаны ключевые шаги по настройке среды разработки и проектов кода специально для использования Audio Classifier. Общую информацию о настройке среды разработки для использования задач MediaPipe, включая требования к версии платформы, см. в руководстве по настройке веб-версии .
пакеты JavaScript
Код Audio Classifier доступен через NPM- пакет MediaPipe @mediapipe/tasks-audio . Вы можете найти и загрузить эти библиотеки по ссылкам, указанным в руководстве по настройке платформы.
Для локальной установки необходимых пакетов используйте следующий код, выполнив следующую команду:
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 требуется обученная модель, совместимая с этой задачей. Дополнительную информацию о доступных обученных моделях для задачи классификации аудиоданных см. в разделе «Модели» обзора задачи.
Выберите и скачайте модель, а затем сохраните её в каталоге вашего проекта, например:
<dev-project-root>/app/shared/models/
Создайте задачу
Используйте одну из функций createFrom...() класса Audio Classifier для подготовки задачи к выполнению выводов. Используйте функцию 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"
}
});
Полный пример можно посмотреть в разделе example code .
Параметры конфигурации
Данная задача имеет следующие параметры конфигурации для веб-приложений и приложений на JavaScript:
| Название варианта | Описание | Диапазон значений | Значение по умолчанию |
|---|---|---|---|
displayNamesLocale | Задает язык меток, используемых для отображаемых имен, указанных в метаданных модели задачи, если таковые имеются. По умолчанию используется английский en ). Вы можете добавить локализованные метки в метаданные пользовательской модели, используя API TensorFlow Lite Metadata Writer. | Код локали | эн |
maxResults | Задает необязательное максимальное количество возвращаемых результатов классификации с наивысшим баллом. Если < 0, будут возвращены все доступные результаты. | Любые положительные числа | -1 |
scoreThreshold | Устанавливает пороговое значение прогнозируемой оценки, которое переопределяет значение, указанное в метаданных модели (если таковые имеются). Результаты ниже этого значения отклоняются. | [0.0, 1.0] | Не задано |
categoryAllowlist | Задает необязательный список разрешенных названий категорий. Если список не пуст, результаты классификации, названия категорий которых отсутствуют в этом наборе, будут отфильтрованы. Дублирующиеся или неизвестные названия категорий игнорируются. Этот параметр взаимоисключающий с categoryDenylist , и использование обоих приводит к ошибке. | Любые строки | Не задано |
categoryDenylist | Задает необязательный список запрещенных названий категорий. Если список не пуст, результаты классификации, названия категорий которых присутствуют в этом наборе, будут отфильтрованы. Повторяющиеся или неизвестные названия категорий игнорируются. Этот параметр взаимоисключающий с categoryAllowlist , и использование обоих приводит к ошибке. | Любые строки | Не задано |
Подготовка данных
Классификатор аудио работает с аудиоклипами и аудиопотоками и может работать с аудиофайлами любого формата, поддерживаемого браузером. Задача выполняет предварительную обработку входных данных, включая передискретизацию, буферизацию и кадрирование.
Запустите задачу
Классификатор аудио использует метод classify() для выполнения выводов для аудиофайлов или аудиопотоков. API классификатора аудио возвращает возможные категории для аудиособытий, распознанных во входном аудио.
Вызовы метода classify() класса Audio Classifier выполняются синхронно и блокируют поток пользовательского интерфейса. Если вы классифицируете звук с микрофона устройства, каждая классификация будет блокировать основной поток. Этого можно избежать, реализовав веб-воркеры, которые будут запускать 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; };
Более полную реализацию задачи классификации аудиоданных см. в примере .
Обработка и отображение результатов
После завершения процесса вывода задача «Аудиокластик» возвращает объект 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
Пример кода «Аудиокластик» демонстрирует, как отобразить результаты классификации, полученные в ходе выполнения задачи; подробности см. в примере .