Библиотека ml5.js предоставляет высокоуровневый интерфейс для работы с моделями машинного обучения в браузере, включая возможности обработки аудио. Она строится поверх TensorFlow.js и облегчает интеграцию нейросетевых моделей в проекты на JavaScript, включая работу с микрофоном, аудиопотоками и классификацией звука в реальном времени.
Для начала необходимо подключить библиотеку через CDN:
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.6.0/p5.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.6.0/addons/p5.sound.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/ml5/2.3.0/ml5.min.js"></script>
Инициализация микрофона происходит с помощью объекта
p5.AudioIn:
let mic;
function setup() {
createCanvas(400, 200);
mic = new p5.AudioIn();
mic.start();
}
Ключевым моментом является вызов mic.start(), который
запрашивает доступ к устройству ввода и начинает поток аудио для
дальнейшей обработки.
ml5.js предлагает высокоуровневую модель SoundClassifier для распознавания аудио в реальном времени. Основные шаги:
Пример использования:
let classifier;
function preload() {
const options = { probabilityThreshold: 0.7 };
classifier = ml5.soundClassifier('SpeechCommands18w', options);
}
function setup() {
createCanvas(400, 200);
classifier.classify(gotResult);
}
function gotResult(error, results) {
if (error) {
console.error(error);
return;
}
console.log(results[0].label, results[0].confidence);
}
Пояснение ключевых моментов:
'SpeechCommands18w' — предобученная модель для
распознавания голосовых команд.probabilityThreshold позволяет фильтровать результаты с
низкой вероятностью.results[0] содержит наиболее вероятную метку и её
доверие (confidence).Для реального времени часто требуется не только классификация, но и визуализация уровня громкости и частоты звука. p5.js предоставляет удобные инструменты для этого:
let mic, fft;
function setup() {
createCanvas(600, 400);
mic = new p5.AudioIn();
mic.start();
fft = new p5.FFT();
fft.setInput(mic);
}
function draw() {
background(0);
let spectrum = fft.analyze();
noStroke();
fill(0, 255, 0);
for (let i = 0; i < spectrum.length; i++) {
let x = map(i, 0, spectrum.length, 0, width);
let h = -height + map(spectrum[i], 0, 255, height, 0);
rect(x, height, width / spectrum.length, h);
}
}
Ключевые моменты:
p5.FFT() позволяет анализировать спектр аудио в
реальном времени.fft.analyze() возвращает массив амплитуд для
каждой частоты.rect() с map() помогает
визуализировать спектр на канвасе.С помощью ml5.js аудиопоток может быть использован для:
Пример простого взаимодействия:
function gotResult(error, results) {
if (error) return console.error(error);
let label = results[0].label;
if (label === 'clap') {
background(random(255), random(255), random(255));
} else if (label === 'snap') {
ellipse(random(width), random(height), 50, 50);
}
}
Здесь звуковые команды «clap» и «snap» вызывают динамическое изменение визуального отображения, что демонстрирует потенциал реального времени в интерактивной среде.
transfer learning. Например, можно создать свою модель для
классификации специфических звуков.ml5.js предоставляет удобный и мощный инструмент для работы с аудио в реальном времени, позволяя объединять машинное обучение и интерактивную графику на JavaScript без необходимости глубокого погружения в низкоуровневое программирование нейросетей.