В ml5.js работа с изображениями является фундаментальной частью для
задач классификации, генерации и трансформации визуальных данных.
Основные форматы изображений — JPEG и PNG. Для загрузки изображения
используется объект HTMLImageElement или тег
<img> в HTML, после чего изображение передается в
модель ml5.
Пример создания и загрузки изображения для классификации:
let classifier;
let img;
function preload() {
img = loadImage('path/to/image.jpg');
classifier = ml5.imageClassifier('MobileNet');
}
function setup() {
createCanvas(400, 400);
classifier.classify(img, gotResult);
}
function gotResult(error, results) {
if (error) {
console.error(error);
return;
}
console.log(results);
}
Ключевые моменты:
ml5.imageClassifier может использовать предобученные
модели, такие как MobileNet, или пользовательские модели
TensorFlow.js.Использование камеры позволяет получать поток изображений в реальном
времени. В ml5.js поток захватывается через объект
p5.Video, который обеспечивает удобный интерфейс для
интеграции с canvas.
Пример захвата видео с камеры и классификации кадров:
let classifier;
let video;
function setup() {
createCanvas(400, 400);
video = createCapture(VIDEO);
video.size(400, 400);
video.hide();
classifier = ml5.imageClassifier('MobileNet', video, modelReady);
}
function modelReady() {
console.log('Модель загружена');
classifyVideo();
}
function classifyVideo() {
classifier.classify(gotResult);
}
function gotResult(error, results) {
if (error) {
console.error(error);
return;
}
console.log(results);
classifyVideo();
}
function draw() {
image(video, 0, 0);
}
Особенности работы с веб-камерой:
video.hide() скрывает HTML-элемент видео,
оставляя только canvas для отображения.Для анализа готовых видео можно применять createVideo()
из библиотеки p5.js. Видео можно воспроизводить в цикле или по кадрам,
извлекая отдельные фреймы для обработки ml5.js.
Пример обработки видеофайла:
let classifier;
let video;
function setup() {
createCanvas(400, 400);
video = createVideo(['path/to/video.mp4'], videoLoaded);
video.size(400, 400);
video.hide();
}
function videoLoaded() {
classifier = ml5.imageClassifier('MobileNet', video, modelReady);
video.loop();
}
function modelReady() {
classifyVideo();
}
function classifyVideo() {
classifier.classify(gotResult);
}
function gotResult(error, results) {
if (error) {
console.error(error);
return;
}
console.log(results);
classifyVideo();
}
function draw() {
image(video, 0, 0);
}
Особенности работы с видеофайлами:
loop()) или
воспроизводить кадр за кадром с помощью time() и
pause().Перед подачей изображений или кадров из видео важно учитывать размер, цветовую модель и нормализацию данных. Ml5.js чаще всего автоматически нормализует входные данные, однако в случае пользовательских моделей может понадобиться собственная предобработка:
resize() в p5.js
позволяет привести изображения к нужной ширине и высоте.filter(GRAY) или
преобразование в RGB при необходимости.Мгновенная обработка данных из разных источников требует согласования кадров с моделью:
classifier.classify().gotResult.Такой подход обеспечивает гибкую работу с визуальными источниками данных в ml5.js и позволяет строить как простые приложения классификации изображений, так и сложные системы обработки потокового видео.