Tema 25

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.

Idea clau: La transferència d'estil separa el "què" (contingut) del "com" (estil) d'una imatge. És com si donessis a un pintor famós una foto i li diguessis: "pinta'm això amb el teu estil".

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

  1. Crea tres "filtres d'estil" simulats amb diferents combinacions de formes i colors (tecles 1, 2, 3).
  2. Implementa un control d'intensitat: el ratolí (eix X) controla quina proporció de la imatge rep l'efecte artístic.
  3. Dissenya una composició base (paisatge, retrat, natura morta) i aplica-hi almenys dos estils diferents.
  4. Fes un degradat d'estils: la meitat esquerra de la imatge té un estil, la meitat dreta un altre, amb transició suau al centre.
  5. 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.