Библиотека 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 представляет собой массив объектов с
ключами:
'up', 'down', 'stop').Для практических целей часто выбирают команду с наибольшей уверенностью:
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);
Важные моменты при создании кастомной модели:
confidence) перед
выполнением критических действий.