Использование модели SpeechCommands

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


Подключение и инициализация

Для работы с SpeechCommands необходимо подключить библиотеку ml5.js к проекту. Обычно это делается через CDN:

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

let classifier;

function setup() {
  classifier = ml5.soundClassifier('SpeechCommands18w', modelReady);
}

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

Ключевые моменты:

  • Используется предобученная модель 'SpeechCommands18w', которая поддерживает распознавание 18 стандартных команд на английском языке.
  • Функция modelReady вызывается после загрузки модели.
  • Метод classify начинает непрерывное прослушивание аудио с микрофона и вызывает callback для обработки результатов.

Обработка результатов распознавания

Функция обратного вызова получает объект с информацией о распознанной команде:

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

Объект results представляет собой массив объектов с ключами:

  • label – распознанная команда (например, 'up', 'down', 'stop').
  • confidence – степень уверенности модели в распознавании, значение от 0 до 1.

Для практических целей часто выбирают команду с наибольшей уверенностью:

let command = results[0].label;
let confidence = results[0].confidence;

if (confidence > 0.8) {
  console.log(`Распознана команда: ${command}`);
}

Настройка порога чувствительности

Модель может реагировать на шумы или слабый голос, поэтому важно фильтровать низкоуверенные предсказания. Например:

const THRESHOLD = 0.75;

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

  const topResult = results[0];
  if (topResult.confidence >= THRESHOLD) {
    executeCommand(topResult.label);
  }
}

function executeCommand(label) {
  switch (label) {
    case 'up':
      moveUp();
      break;
    case 'down':
      moveDown();
      break;
    case 'left':
      moveLeft();
      break;
    case 'right':
      moveRight();
      break;
  }
}

Особенности:

  • Порог THRESHOLD помогает уменьшить количество ложных срабатываний.
  • Использование switch позволяет легко масштабировать обработку для новых команд.

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

Модель SpeechCommands использует микрофон браузера через Web Audio API. Важно запросить разрешение пользователя:

navigator.mediaDevices.getUserMedia({ audio: true })
  .then(stream => {
    console.log('Микрофон активирован');
  })
  .catch(err => {
    console.error('Ошибка доступа к микрофону:', err);
  });

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

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

Расширение функционала

Модель можно интегрировать с другими элементами интерфейса. Например, создание визуального отображения команды:

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

  const label = results[0].label;
  const confidence = results[0].confidence;

  if (confidence > 0.8) {
    document.getElementById('commandDisplay').textContent = `Команда: ${label}`;
  }
}

Также возможна интеграция с анимацией, играми или управлением устройствами IoT, где каждая команда запускает определённое действие.


Использование кастомных моделей

Помимо предобученной модели 'SpeechCommands18w', ml5.js позволяет загружать пользовательские модели TensorFlow.js, обученные на специфических командах. Процесс аналогичен:

classifier = ml5.soundClassifier('путь_к_модели/model.json', modelReady);

Важные моменты при создании кастомной модели:

  • Должен соблюдаться формат TensorFlow.js.
  • Рекомендуется использовать не более 20–30 команд для стабильного распознавания.
  • Обучение проводится заранее на разнообразных аудиозаписях для повышения точности.

Совместимость и производительность

  • Поддерживается всеми современными браузерами с Web Audio API.
  • Работает полностью на клиенте, без необходимости серверной обработки.
  • Использование модели на слабых устройствах может увеличивать нагрузку на CPU и GPU, поэтому рекомендуется оптимизация порогов и частоты обновления интерфейса.

Рекомендации по точности

  • Для повышения точности распознавания использовать чистую аудиозапись без фоновых шумов.
  • Обеспечить разнообразие голоса и интонации при обучении кастомных моделей.
  • Постоянно проверять уверенность (confidence) перед выполнением критических действий.