Detecció de poses (I)
Aprèn a detectar el cos humà amb PoseNet i ml5.js. Identifica punts clau com els ulls, les espatlles, els colzes i els canells per crear art que balla amb tu.
Què és la detecció de poses?
La detecció de poses (pose estimation) és la capacitat d'un algorisme per identificar la posició de les articulacions del cos humà en una imatge o vídeo. PoseNet és un model de Google que detecta 17 punts clau:
- Cap: nas, ulls, orelles.
- Tronc: espatlles, malucs.
- Braços: colzes, canells.
- Cames: genolls, turmells.
Amb aquests punts podem dibuixar un esquelet, crear ombres corporals, o fer que elements visuals segueixin el moviment del cos.
Els 17 punts clau de PoseNet
PoseNet detecta 17 parts del cos. Aquí tens una representació visual amb el nom de cada punt:
// 17 punts clau de PoseNet (ordre oficial)
0: nas
1: ull esquerre 2: ull dret
3: orella esquerra 4: orella dreta
5: espatlla esq. 6: espatlla dreta
7: colze esq. 8: colze dret
9: canell esq. 10: canell dret
11: maluc esq. 12: maluc dret
13: genoll esq. 14: genoll dret
15: turmell esq. 16: turmell dret
Estructura del codi amb PoseNet
El patró per utilitzar PoseNet amb ml5.js és similar al de FaceMesh, però amb una llista de 17 punts per persona:
let posenet;
let video;
let poses = [];
async function setup() {
createCanvas(640, 480);
video = await createCapture({ video: true });
video.hide();
posenet = ml5.poseNet(video, modelReady);
}
function modelReady() {
posenet.on('pose', (results) => {
poses = results;
});
}
function draw() {
image(video, 0, 0, width, height);
for (let persona of poses) {
for (let punt of persona.pose.keypoints) {
if (punt.score > 0.5) {
ellipse(punt.position.x, punt.position.y, 10, 10);
}
}
}
}
poses és un array de persones. Cada persona té .pose.keypoints, un array de 17 objectes amb .position.x, .position.y i .score (confiança).
Connectar punts: dibuixar l'esquelet
Un cop tenim els punts clau, podem connectar-los amb línies per dibuixar un esquelet. PoseNet defineix unes connexions predeterminades entre punts.
// Connexions de l'esquelet (índexs de punts)
let connexions = [
[5,6], [5,7], [6,8], [7,9], [8,10], // braços
[5,11], [6,12], [11,12], // tronc
[11,13], [12,14], [13,15], [14,16] // cames
];
for (let c of connexions) {
line(punts[c[0]].x, punts[c[0]].y, punts[c[1]].x, punts[c[1]].y);
}
Exemples creatius pas a pas
Partícules que segueixen les mans
Simulem partícules que emanen dels canells, seguint la posició del ratolí com a metàfora del moviment de les mans.
// Partícules que emanen del canell (posició del ratolí)
let canell = { x: mouseX, y: mouseY };
particules.push({
x: canell.x + random(-10, 10),
y: canell.y + random(-10, 10),
vx: random(-1, 1), vy: random(-3, -1), vida: 255
});
Ones corporals
Simulem ones de color que connecten els punts clau del cos, creant una silueta vibrant.
for (let i = 0; i < connexions.length; i++) {
let to = map(i, 0, connexions.length, 0, 360);
stroke(to, 80, 90, 200); // color arc de Sant Martí
line(a.x, a.y, b.x, b.y);
}
Consells per treballar amb PoseNet
- Cos sencer: PoseNet funciona millor quan es veu el cos complet. Per a primers plans, utilitza FaceMesh.
- Confiança: utilitza
punt.score > 0.5per filtrar deteccions poc fiables. - Múltiples persones: PoseNet pot detectar diverses persones. Cada element de
posesés una persona diferent. - Il·luminació: com amb la càmera, una bona llum i un fons contrastat milloren la detecció.
- Rendiment: processar múltiples persones a 60 fps pot ser exigent. Considera reduir la mida del vídeo.
Exercicis per practicar
- Dibuixa una figura humana simplificada amb els 17 punts clau i les connexions de l'esquelet.
- Crea un rastre de llum que connecti les posicions anteriors dels canells amb línies de colors (simula amb el ratolí).
- Implementa un indicador de moviment: calcula la distància entre el canell actual i l'anterior i mostra un cercle proporcional a la velocitat.
- Dissenya un avatar digital: substitueix cada punt clau per una forma geomètrica (estrella, triangle, cercle) de mida variable.
- Repte: Prepara l'estructura de codi per a PoseNet amb ml5.js i simula dades de poses per dibuixar un esquelet complet amb connexions.
Reflexió artística
El cos és el nostre instrument més antic d'expressió. Amb la detecció de poses, el teu art pot convertir el moviment humà en pinzellades de llum, en escultures efímeres, en partitures visuals. Cada gest, cada passa, cada salt es tradueix en dades que alimenten la teva creativitat. Pensa en la dansa com a codi, en el cos com a interfície. Des de les instal·lacions interactives de Rafael Lozano-Hemmer fins als espectacles de dansa amb projeccions en temps real, la detecció de poses obre un camp infinit per a l'art performàtic digital. Ara tens les eines per crear obres que ballen amb l'espectador, que respiren amb el seu moviment, que existeixen només en la trobada entre el cos i el codi.
Mini-projecte del Tema 23
Crea un "Cos generatiu interactiu" amb les següents característiques:
- Dibuixa una silueta humana amb almenys 10 punts clau i les connexions principals (esquelet).
- Fes que els punts clau es moguin amb el ratolí (simulant el moviment corporal).
- Afegeix partícules o efectes visuals que emanen dels canells i dels turmells.
- Utilitza colors dinàmics que canviïn segons la velocitat del moviment o la posició.
- Inclou un indicador de confiança visual (mida o opacitat) per a cada punt clau.