ml5.js предоставляет простой интерфейс для работы с нейросетями прямо в браузере на языке JavaScript. Один из мощных инструментов библиотеки — StyleTransfer, позволяющий переносить художественный стиль с одного изображения на другое в реальном времени. Модель StyleTransfer построена на основе глубоких сверточных нейронных сетей, способных выделять высокоуровневые особенности изображений: текстуру, цветовую гамму, контуры и композицию.
Для работы с StyleTransfer требуется подключить библиотеку ml5.js:
<script src="https://cdn.jsdelivr.net/npm/ml5@latest/dist/ml5.min.js"></script>
Создание экземпляра модели происходит через конструктор
ml5.styleTransfer. Можно использовать заранее обученные
модели или свои собственные. Пример инициализации с использованием
публичной модели:
let style;
style = ml5.styleTransfer('models/udnie', modelLoaded);
function modelLoaded() {
console.log('Модель загружена и готова к работе');
}
Здесь 'models/udnie' — путь к файлу модели,
modelLoaded — функция обратного вызова, которая вызывается
после успешной загрузки.
Процесс переноса стиля включает два основных этапа:
let inputImg = document.getElementById('inputImage');
style.transfer(inputImg, function(err, result) {
if (err) {
console.error(err);
return;
}
document.getElementById('outputImage').src = result.src;
});
Ключевые моменты:
inputImg может быть элементом <img>
или <video> для динамической обработки.result.src содержит URL с преобразованным
изображением в формате base64.StyleTransfer позволяет применять стиль к видеопотоку с камеры:
let video = document.getElementById('videoElement');
navigator.mediaDevices.getUserMedia({ video: true }).then((stream) => {
video.srcObject = stream;
video.play();
});
style.transfer(video, function(err, result) {
if (err) {
console.error(err);
return;
}
document.getElementById('styledVideo').src = result.src;
});
Особенности работы с видео:
drawImage, обновляя кадры с
интервалом requestAnimationFrame.ml5.js поддерживает использование пользовательских моделей, обученных на фреймворке TensorFlow.js или на PyTorch с последующим преобразованием. Для этого требуется:
model.json и
веса).ml5.styleTransfer('путь_к_модели', callback).Это позволяет переносить уникальный художественный стиль, не ограничиваясь встроенными моделями.
Некоторые версии StyleTransfer поддерживают настройку степени применения стиля:
let options = { amount: 0.5 }; // от 0 до 1
style.transfer(inputImg, options, function(err, result) {
document.getElementById('outputImage').src = result.src;
});
amount = 0 — стиль практически не применяется.amount = 1 — полное применение стиля.Для повышения скорости и уменьшения задержки:
StyleTransfer удобно комбинировать с p5.js для интерактивных приложений:
let video;
let style;
let outputCanvas;
function setup() {
createCanvas(640, 480);
video = createCapture(VIDEO);
video.hide();
style = ml5.styleTransfer('models/udnie', modelLoaded);
outputCanvas = createGraphics(640, 480);
}
function modelLoaded() {
style.transfer(video.elt, function(err, result) {
if (!err) {
outputCanvas.loadPixels();
let img = loadImage(result.src, () => {
outputCanvas.image(img, 0, 0);
});
}
});
}
function draw() {
image(outputCanvas, 0, 0);
}
Такой подход позволяет создавать живые художественные эффекты, изменять стиль динамически и интегрировать перенос стиля в интерактивные инсталляции и веб-приложения.
model.json и весам.<img> или <canvas>
правильно обновляется после получения result.src.ml5.js и StyleTransfer предоставляют простой и мощный инструмент для визуальных экспериментов, сочетая глубокие нейросети с веб-технологиями, открывая возможности интерактивного искусства и генеративной графики прямо в браузере.