Библиотека ml5.js предоставляет высокоуровневый интерфейс для работы с машинным обучением в браузере, используя возможности TensorFlow.js. Один из ключевых этапов создания моделей — сбор и подготовка данных. В веб-приложениях наиболее удобным источником данных может быть веб-камера, которая позволяет динамически собирать изображения для обучения моделей классификации, распознавания поз или жестов.
Для работы с камерой используется класс p5.js —
createCapture(). Он позволяет получить поток видео и
выводить его на холст. Пример инициализации:
let video;
function setup() {
createCanvas(640, 480);
video = createCapture(VIDEO);
video.size(640, 480);
video.hide(); // скрывает видео для рисования на canvas
}
Особенности:
createCapture(VIDEO) возвращает объект
p5.MediaElement, который можно использовать для передачи
данных в ml5.Ml5.js предоставляет ImageClassifier и
KNNImageClassifier. Для интерактивного сбора данных чаще
используется KNN-классификатор, так как он позволяет
добавлять новые метки и примеры «на лету», без переобучения модели с
нуля.
let knnClassifier = ml5.KNNImageClassifier(video, () => {
console.log('KNN Classifier готов к сбору данных');
});
Пояснения:
KNNImageClassifier использует внутренние функции
извлечения признаков (feature extractor) на основе предобученной модели
MobileNet.После инициализации классификатора можно добавлять примеры для каждой метки. Важно собирать достаточное количество изображений для стабильного распознавания.
function addExample(label) {
knnClassifier.addImage(video, label);
console.log(`Добавлен пример для метки: ${label}`);
}
Рекомендации:
Для удобства часто создается визуальный интерфейс, отображающий видео и количество примеров для каждой метки.
function draw() {
image(video, 0, 0);
fill(255);
textSize(16);
text(`Примеры "рука": ${knnClassifier.getCount('рука') || 0}`, 10, height - 40);
text(`Примеры "стоп": ${knnClassifier.getCount('стоп') || 0}`, 10, height - 20);
}
Особенности:
getCount(label) возвращает количество примеров,
добавленных для конкретной метки.Встроенный feature extractor автоматически нормализует изображения и преобразует их в тензоры, но при необходимости можно добавлять собственную обработку:
resize).Веб-приложение может предоставлять кнопки для добавления примеров и выбора меток:
document.getElementById('addHand').addEventListener('click', () => addExample('рука'));
document.getElementById('addStop').addEventListener('click', () => addExample('стоп'));
Такой подход позволяет динамически обучать модель прямо в браузере без сервера и длительной подготовки данных.
video.size(320, 240)).knnClassifier.save('myKNNData.json');
knnClassifier.load('myKNNData.json', () => {
console.log('Данные загружены');
});
Эта структура позволяет создавать интерактивные приложения для распознавания жестов, объектов или поз, полностью работая в браузере и используя возможности ml5.js для быстрого прототипирования.