Для работы с ml5.js необходимо подключить библиотеку в проект на JavaScript. Самый простой способ — использовать CDN:
Это позволит использовать все возможности библиотеки без установки дополнительных пакетов. Также рекомендуется использовать современный браузер с поддержкой Web Audio API, поскольку классификация звуков напрямую зависит от захвата аудиопотока с микрофона.
Для классификации звуков требуется доступ к микрофону. Используется стандартный API браузера:
let mic;
function setup() {
mic = new p5.AudioIn();
mic.start();
}
Объект p5.AudioIn() создаёт поток с микрофона. Метод
start() запускает захват аудио. Этот поток впоследствии
будет передаваться в классификатор для обучения.
ml5.js предоставляет функционал soundClassifier для
распознавания аудио. Для создания пользовательского классификатора
используется transfer learning, позволяющий дообучать
предобученные модели на новых звуках. Пример создания
классификатора:
let classifier;
async function initClassifier() {
classifier = await ml5.soundClassifier('https://teachablemachine.withgoogle.com/models/YOUR_MODEL/model.json', {
probabilityThreshold: 0.7
});
}
Ключевые моменты:
probabilityThreshold задаёт минимальный
уровень уверенности для распознавания.Для создания собственного классификатора необходимо собрать
аудиоданные для каждого класса. Используется функция
addExample:
function recordExample(label) {
classifier.addExample(mic.getLevel(), label);
}
Особенности:
mic.getLevel() возвращает текущий уровень громкости, но
для более точного обучения лучше использовать спектрограмму.Сбор данных выполняется циклически: пользователь воспроизводит звук, программа фиксирует его и присваивает метку.
После накопления примеров вызывается метод train:
classifier.train((lossValue) => {
if (lossValue) {
console.log('Потеря на текущем шаге:', lossValue);
} else {
console.log('Обучение завершено');
}
});
Особенности:
loss) на текущей итерации.lossValue равен null, обучение
завершено.Можно отслеживать динамику обучения, чтобы определить, достаточно ли данных для стабильного распознавания.
После обучения можно использовать модель для классификации звуков в реальном времени:
classifier.classify(mic, (err, results) => {
if (err) {
console.error(err);
return;
}
console.log('Распознанный звук:', results[0].label, 'с вероятностью', results[0].confidence);
});
Особенности:
results[0] содержит наиболее вероятный класс.confidence отражает уровень уверенности
классификатора.classify можно вызывать циклически или в виде
события при каждом новом аудиофрейме.Для удобства лучше хранить список классов и их меток:
let labels = ['Аплодисменты', 'Свист', 'Постукивание'];
labels.forEach(label => {
let button = document.createElement('button');
button.innerText = `Записать ${label}`;
button.oncl ick = () => recordExample(label);
document.body.appendChild(button);
});
Это позволяет накапливать примеры для каждого звука и визуализировать процесс сбора данных.
После обучения и тестирования классификатор можно интегрировать в интерактивное веб-приложение:
classifier.classify(mic, (err, results) => {
if (!err) {
document.getElementById('output').innerText = `${results[0].label} (${(results[0].confidence * 100).toFixed(1)}%)`;
}
});
Таким образом, можно создать интерфейс, который реагирует на звуки в реальном времени, изменяет элементы страницы, запускает события или управляет мультимедиа.