Transferència d'estil
Fes que les teves imatges s'assemblin a Van Gogh, Picasso o al teu propi estil. Descobreix la transferència d'estil amb ml5.js i crea obres híbrides entre fotografia i pintura.
Què és la transferència d'estil?
La transferència d'estil (style transfer) és una tècnica d'intel·ligència artificial que aplica l'estil visual d'una imatge (per exemple, un quadre de Van Gogh) a una altra imatge (per exemple, una foto teva).
El resultat és una imatge híbrida que manté el contingut de la foto original però amb l'estil (colors, pinzellades, textures) de l'obra de referència.
StyleTransfer amb ml5.js
ml5.js ofereix el model StyleTransfer, que aplica un estil pre-entrenat a qualsevol imatge o vídeo en temps real.
Estructura bàsica del codi:
let style;
let img;
async function setup() {
createCanvas(400, 300);
style = ml5.styleTransfer('models/wave', modelReady);
img = await loadImage('foto.jpg');
}
function modelReady() {
style.transfer(img, (error, result) => {
if (error) { console.error(error); return; }
image(result, 0, 0, width, height);
});
}
ml5.js inclou estils pre-entrenats com 'wave' (Hokusai), 'udnie' (Picasso), 'rain-princess' (Klimt) i 'la-muse' (Matisse).
Simulació visual d'estils artístics
Com que la transferència d'estil real requereix models pesants, simularem diferents efectes d'estil aplicant filtres visuals a una composició, com si fos una foto transformada.
// Simulació de tres "estils" diferents
if (estil === 0) {
r = map(x, 0, width, 255, 100); g = map(y, 0, height, 100, 200);
} else if (estil === 1) {
r = map(y, 0, height, 255, 50); g = map(x, 0, width, 50, 200);
} else {
r = map(sin(x*0.01)*cos(y*0.01), -1, 1, 50, 255);
}
Combinar imatge i estil
La transferència d'estil mescla el contingut d'una imatge amb la textura d'una altra. Simulem aquest efecte superposant una "textura artística" (soroll de Perlin) sobre una imatge simple.
// Textura de soroll de Perlin sobre una imatge
for (let x = 0; x < width; x += 8) {
for (let y = 0; y < height; y += 8) {
let n = noise(x * 0.05, y * 0.05, mouseX * 0.01);
if (n > 0.55) {
fill(color(255, 200, 0, 80));
rect(x, y, 8, 8);
}
}
}
Exemples creatius pas a pas
Galeria d'estils interactiva
Cada tecla activa un "estil" diferent que transforma la composició visual.
function keyPressed() {
if (key === '1') mode = 0; // Cercles grocs
if (key === '2') mode = 1; // Quadrats blaus
if (key === '3') mode = 2; // Triangles rosats
}
Filtre d'estil dinàmic
El ratolí controla la "intensitat" de l'estil aplicat a una imatge base.
let intensitat = map(mouseX, 0, width, 0, 1);
for (let x = 0; x < width; x += 6) {
for (let y = 0; y < height; y += 6) {
if (random(1) < intensitat && noise(x*0.04, y*0.04) > 0.5) {
fill(lerpColor(color(255), color(200,100,0,150), intensitat));
rect(x, y, 6, 6);
}
}
}
Consells per a la transferència d'estil
- Models pre-entrenats: ml5.js inclou models com 'wave', 'udnie', 'rain-princess', 'la-muse'. Prova'ls tots!
- Mida de la imatge: la transferència d'estil és computacionalment costosa. Utilitza imatges petites (màxim 400x400) per a temps de resposta ràpids.
- Precarrega models: els models de style transfer poden trigar uns segons a carregar. Utilitza callbacks per saber quan estan llestos.
- Combina estils: pots aplicar el mateix model a múltiples imatges o vídeos per crear coherència visual.
- Experimenta amb els teus propis estils: amb eines com RunwayML pots entrenar els teus propis models de transferència d'estil.
Exercicis per practicar
- Crea tres "filtres d'estil" simulats amb diferents combinacions de formes i colors (tecles 1, 2, 3).
- Implementa un control d'intensitat: el ratolí (eix X) controla quina proporció de la imatge rep l'efecte artístic.
- Dissenya una composició base (paisatge, retrat, natura morta) i aplica-hi almenys dos estils diferents.
- Fes un degradat d'estils: la meitat esquerra de la imatge té un estil, la meitat dreta un altre, amb transició suau al centre.
- Repte: Investiga quins models de style transfer estan disponibles a ml5.js i prepara l'estructura de codi per carregar-ne un i aplicar-lo a una imatge.
Reflexió artística
La transferència d'estil és com tenir tots els grans mestres de la pintura al teu taller digital. Pots demanar a Van Gogh que pinti la teva foto de vacances, o a Picasso que reinterpreti el teu retrat. Però més enllà de la novetat tècnica, la transferència d'estil obre preguntes profundes sobre l'autoria, l'originalitat i la creativitat. Què vol dir "pintar com Van Gogh" si ho fa un algorisme? On és l'artista: en el model, en les dades d'entrenament, o en qui tria l'estil i la imatge? Com a artista-programador, el teu rol és curar, combinar i donar sentit a aquestes eines. No es tracta de prémer un botó i esperar el resultat, sinó de dialogar amb la màquina, d'explorar les fronteres entre allò humà i allò artificial, de crear obres que cap dels dos podria haver fet sol.
Mini-projecte del Tema 25
Crea un "Laboratori d'estils artístics" amb les següents característiques:
- Dissenya una composició base (pot ser un paisatge, un retrat geomètric, o formes abstractes).
- Implementa almenys 4 estils visuals diferents que es puguin aplicar a la composició base.
- Utilitza tecles per canviar entre estils (per exemple: 1=Impressió solar, 2=Blau picasso, 3=Ona abstracta, 4=Pop art).
- Inclou un control d'intensitat amb el ratolí per mesclar l'estil amb la imatge original.
- Mostra un indicador visual del nom de l'estil actiu i la intensitat actual.