SoundClassifier: классификация звуков

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

Инициализация SoundClassifier

Для начала работы с классификатором звуков необходимо подключить библиотеку ml5.js и создать экземпляр классификатора. В качестве источника модели можно использовать предобученные модели, предоставленные ml5.js или сторонние модели в формате TensorFlow.js.

let classifier;

function preload() {
  // Загрузка предобученной модели для классификации звуков
  classifier = ml5.soundClassifier('https://teachablemachine.withgoogle.com/models/YourModelURL/model.json');
}

Ключевой момент: ml5.soundClassifier автоматически запрашивает доступ к микрофону пользователя и начинает захват звука при инициализации.

Работа с микрофоном

SoundClassifier может работать как с предзаписанными аудиофайлами, так и с микрофоном в реальном времени. Для работы с микрофоном необходимо убедиться, что браузер поддерживает Web Audio API.

function setup() {
  createCanvas(400, 200);
  
  // Классификатор готов к использованию после загрузки модели
  classifier.classify(gotResult);
}

function gotResult(error, results) {
  if (error) {
    console.error(error);
    return;
  }

  // results — массив объектов с предсказаниями
  console.log(results);
}

Структура объекта results:

  • label — название класса звука.
  • confidence — уверенность классификатора (от 0 до 1).

Настройка параметров классификации

SoundClassifier позволяет управлять точностью и частотой предсказаний. При использовании предобученных моделей важно учитывать требования к частоте дискретизации и длительности аудио.

let options = {
  probabilityThreshold: 0.85 // фильтр предсказаний с низкой уверенностью
};

classifier = ml5.soundClassifier('https://teachablemachine.withgoogle.com/models/YourModelURL/model.json', options, modelReady);

function modelReady() {
  console.log('Модель загружена и готова к работе');
  classifier.classify(gotResult);
}

Рекомендации:

  • Для шумных сред рекомендуется увеличить probabilityThreshold.
  • Можно ограничивать число предсказаний, обрабатываемых в секунду, чтобы снизить нагрузку на CPU.

Визуализация результатов

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

function gotResult(error, results) {
  if (error) {
    console.error(error);
    return;
  }
  
  background(200);
  textSize(24);
  fill(0);
  text(`Звук: ${results[0].label}`, 10, 50);
  text(`Уверенность: ${(results[0].confidence * 100).toFixed(2)}%`, 10, 100);
}

Совет: использовать цветовую индикацию или графики уровня звука для более наглядного интерфейса.

Обработка пользовательских аудиособытий

SoundClassifier легко интегрируется с различными событиями браузера. Например, можно запускать определённые функции при распознавании конкретного звука.

function gotResult(error, results) {
  if (error) {
    console.error(error);
    return;
  }

  let label = results[0].label;

  if (label === 'Аплодисменты') {
    console.log('Включить анимацию конфетти');
  } else if (label === 'Свист') {
    console.log('Запустить звуковой эффект');
  }
}

Поддержка кастомных моделей

ml5.js позволяет использовать кастомные модели, обученные с помощью Teachable Machine или TensorFlow.js. Основные шаги:

  1. Обучить модель для классификации нужных звуков.
  2. Экспортировать модель в формате JSON с весами в формате .bin.
  3. Подключить модель через URL в ml5.soundClassifier.

Пример подключения кастомной модели:

let classifier;
classifier = ml5.soundClassifier('models/customSoundModel/model.json', modelReady);

Практические рекомендации по производительности

  • Ограничивать количество одновременных аудиопотоков.
  • Использовать Web Workers для сложных обработок аудиопотока.
  • Минимизировать визуализацию в реальном времени при слабых устройствах.
  • Периодически очищать объекты results, чтобы не создавать утечки памяти.

Расширенные возможности

  • Множественные классы: классификатор возвращает массив всех возможных классов с вероятностями.
  • Интеграция с другими ml5.js модулями: например, комбинировать SoundClassifier с PoseNet для мультимодальных интерактивных приложений.
  • Онлайн-обучение: некоторые модели позволяют дообучение на новых звуках прямо в браузере.

SoundClassifier в ml5.js является мощным инструментом для создания интерактивных веб-приложений с распознаванием звуков, позволяя подключать как готовые модели, так и кастомные решения с минимальными усилиями и высокой гибкостью.