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...
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
- Crea un simulador de classificació: 5 zones del llenç representen 5 objectes diferents, amb etiquetes i colors.
- Implementa un gràfic de barres de confiança per a 5 categories, que canviï segons la posició del ratolí.
- Dissenya un generador de partícules on cada "objecte detectat" generi un tipus diferent de partícula (color, direcció, forma).
- Fes un visor classificador amb marc de color i text que identifiqui l'objecte simulat.
- 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
modelReadyigotResults.