Tema 27

Classificació d'objectes (I)

Ensenya a la màquina a reconèixer el que veu. Utilitza MobileNet amb ml5.js per classificar objectes en imatges i vídeo en temps real, i crea art que reacciona al que l'envolta.

Què és la classificació d'imatges?

La classificació d'imatges és la capacitat d'un algorisme per assignar una o més etiquetes a una imatge. Per exemple, donada una foto, el model pot dir: "això és un gat", "això és una cadira", "això és un cotxe".

MobileNet és un model pre-entrenat que pot reconèixer més de 1.000 categories d'objectes diferents: animals, vehicles, mobles, instruments musicals, aliments...

Idea clau: Per a cada imatge, MobileNet retorna una llista d'etiquetes amb una confiança (0-1). Com més alta és la confiança, més segur està el model de la seva predicció.

MobileNet amb ml5.js

El patró per utilitzar MobileNet amb ml5.js és el que vam veure al Tema 21. Aquí el repassem amb més detall:

let classifier;
let img;

function preload() {
  img = loadImage('gat.jpg');
}

function setup() {
  createCanvas(400, 300);
  classifier = ml5.imageClassifier('MobileNet', modelReady);
}

function modelReady() {
  classifier.classify(img, gotResults);
}

function gotResults(error, results) {
  if (error) { console.error(error); return; }
  // results és un array d'objectes {label, confidence}
  println(results[0].label);        // 'tabby cat'
  println(results[0].confidence);   // 0.95
}

results és un array ordenat per confiança decreixent. results[0] és la millor predicció, results[1] la segona millor, etc.

Classificació simulada: formes i etiquetes

Simulem el comportament de MobileNet: segons la forma que "veu" (controlada pel ratolí), el sistema assigna una etiqueta i un color diferent.

let zona = floor(map(mouseX, 0, width, 0, 5));
let etiquetes = ['Gat', 'Gos', 'Ocell', 'Cotxe', 'Cadira'];
let confiances = [0.95, 0.87, 0.72, 0.68, 0.55];

fill(colors[zona]);
ellipse(width/2, 120, 120, 120);
text('Predicció: ' + etiquetes[zona], 20, 30);
text('Confiança: ' + (confiances[zona]*100) + '%', 20, 55);

Art generatiu basat en classificació

La classificació d'objectes pot ser el motor d'una obra generativa: cada objecte detectat genera un tipus diferent de formes, colors o partícules.

if (zona === 0) { // Gat: partícules que pugen
  particules.push({ x: random(width), y: random(height),
    vy: random(-2, -0.5), col: color(255, 200, 100) });
} else if (zona === 1) { // Gos: partícules que es dispersen
  particules.push({ x: random(width), y: random(height),
    vx: random(-2, 2), vy: random(-1, 1), col: color(100, 200, 255) });
} // ...

Exemples creatius pas a pas

Gràfic de confiança

Visualitza les 5 millors prediccions amb barres de confiança, simulant la sortida de MobileNet.

for (let i = 0; i < 5; i++) {
  let c = confiances[i];
  fill(lerpColor(color(255, 0, 0), color(0, 255, 0), c));
  rect(100, y, c * 200, 25);
  text(etiquetes[i], 10, y + 18);
  text(nf(c * 100, 1, 0) + '%', 310, y + 18);
}

Visor classificador

Simula un visor de càmera que classifica el que "veu" i ho mostra amb un marc de color.

let zona = floor(map(mouseX, 0, width, 0, 6));
let objectes = ['Fons buit', 'Persona', 'Gat', 'Gos', 'Planta', 'Tassa'];
stroke(colorsMarc[zona]); strokeWeight(3); noFill();
rect(40, 40, 240, 120);
text(objectes[zona], 60, 80);

Consells per treballar amb MobileNet

  • Categories: MobileNet reconeix 1.000 categories de ImageNet. Consulta la llista completa per saber què pot detectar.
  • Mida de la imatge: el model espera imatges de 224x224 píxels. ml5.js redimensiona automàticament.
  • Confiança: no et quedis només amb la primera predicció. Explora les 5 primeres per veure si hi ha ambigüitat.
  • Vídeo en temps real: pots classificar cada pocs frames per no sobrecarregar el processador.
  • Combina amb creativitat: utilitza l'etiqueta detectada com a paràmetre per a colors, formes, sons o comportaments.

Exercicis per practicar

  1. Crea un simulador de classificació: 5 zones del llenç representen 5 objectes diferents, amb etiquetes i colors.
  2. Implementa un gràfic de barres de confiança per a 5 categories, que canviï segons la posició del ratolí.
  3. Dissenya un generador de partícules on cada "objecte detectat" generi un tipus diferent de partícula (color, direcció, forma).
  4. Fes un visor classificador amb marc de color i text que identifiqui l'objecte simulat.
  5. Repte: Investiga la llista de categories de MobileNet i prepara un sketch que utilitzi almenys 10 categories diferents amb comportaments visuals únics.

Reflexió artística

La classificació d'objectes és la base de la visió artificial. Quan un model reconeix un gat, un cotxe o una tassa, està fent el que els humans fem de manera instintiva: posar etiquetes al món. Però la classificació també és un acte creatiu. Què passa si el model s'equivoca? Què passa si veu un gat on nosaltres veiem un núvol? Aquestes "al·lucinacions" de la màquina poden ser una font d'inspiració artística. Com a artista-programador, pots jugar amb les prediccions del model: acceptar-les, subvertir-les, amplificar-les. Pots crear obres que mostrin com la màquina veu el món, o que qüestionin la mateixa idea de classificar. Perquè classificar és, en el fons, una manera de simplificar la realitat. I l'art, sovint, consisteix a mostrar-ne la complexitat.

Mini-projecte del Tema 27

Crea un "Classificador visual generatiu" amb les següents característiques:

  • Defineix almenys 6 categories d'objectes simulades (zones del ratolí).
  • Cada categoria ha de tenir un color, forma i comportament de partícules diferent.
  • Mostra un panell d'informació amb l'etiqueta detectada i la confiança (en percentatge).
  • Inclou un gràfic de barres amb les 3 millors prediccions i les seves confiances.
  • Prepara l'estructura de codi per a MobileNet amb els callbacks modelReady i gotResults.