Для работы с ml5.js необходимо подключить библиотеку к проекту. Обычно это делается через CDN:
<script src="https://cdn.jsdelivr.net/npm/ml5@latest/dist/ml5.min.js"></script>
После подключения библиотеки создаётся объект ml5,
предоставляющий доступ к различным функциям машинного обучения, включая
классификацию звука. Важно убедиться, что подключение происходит
до любых скриптов, которые используют ml5, иначе
возникнет ошибка ml5 is not defined.
Для распознавания звуков используется класс
ml5.soundClassifier. Он позволяет загружать предобученные
модели, предоставленные ml5.js, либо модели, экспортированные из
Teachable Machine. Создание классификатора выглядит следующим
образом:
let classifier;
ml5.soundClassifier('https://teachablemachine.withgoogle.com/models/model.json')
.then(clf => {
classifier = clf;
console.log("Модель загружена");
})
.catch(err => console.error("Ошибка загрузки модели:", err));
Ключевые моменты:
ml5.soundClassifier возвращает
Promise, поэтому для корректной работы необходимо
использовать .then() или async/await..catch().Кроме Promise, ml5.js поддерживает традиционное использование callback:
ml5.soundClassifier('model.json', function(error, clf) {
if (error) {
console.error(error);
return;
}
classifier = clf;
console.log("Классификатор готов к использованию");
});
Особенности подхода через callback:
При загрузке модели можно передать объект с опциями:
let options = {
probabilityThreshold: 0.7,
overlapFactor: 0.5
};
ml5.soundClassifier('model.json', options)
.then(clf => {
classifier = clf;
});
Описание параметров:
probabilityThreshold — минимальная вероятность, при
которой класс считается распознанным.overlapFactor — степень перекрытия фрагментов
аудиосигнала для анализа. Более высокий коэффициент повышает точность,
но снижает производительность.Классификатор требует доступ к микрофону для захвата звука в реальном
времени. Для этого используется встроенный объект браузера
navigator.mediaDevices.getUserMedia:
navigator.mediaDevices.getUserMedia({ audio: true })
.then(stream => {
console.log("Микрофон подключен");
})
.catch(err => console.error("Ошибка доступа к микрофону:", err));
ml5.js автоматически обрабатывает поток аудио при вызове
classifier.classify(). Если микрофон не предоставлен,
классификация работать не будет.
После загрузки модели и инициализации микрофона можно запускать процесс распознавания:
classifier.classify(gotResult);
function gotResult(error, results) {
if (error) {
console.error(error);
return;
}
console.log(results);
}
Особенности работы метода classify:
Вызывает callback gotResult каждый раз, когда модель
получает новый фрагмент аудио.
Параметр results — массив объектов, где каждый
объект содержит:
label — название распознанного класса.confidence — вероятность распознавания в диапазоне от 0
до 1.При работе с длинными аудиопотоками важно учитывать нагрузку на процессор и задержки:
probabilityThreshold).stream.getTracks().forEach(track => track.stop()).Этот подход позволяет строить устойчивую систему распознавания звуков с высокой точностью и низкой задержкой.