xxxxxxxxxx
87
//posenet code from dan's posenet tutorial
let video;
let poseNet;
let pose;
let noseLerp;
let rightLerp;
let leftLerp;
let emitter;
function setup() {
createCanvas(640, 480);
video = createCapture(VIDEO);
video.size(width, height);
video.hide();
let poseNet = ml5.poseNet(video, modelReady);
poseNet.on('pose', gotPoses);
noseLerp = createVector();
rightLerp = createVector();
leftLerp = createVector();
emitter = new Emitter(width/2, height/2);
}
function gotPoses(poses) {
if (poses.length > 0) {
pose = poses[0].pose;
}
}
function modelReady() {
console.log('model loaded');
}
function draw() {
image(video, 0, 0, width, height);
if (pose) {
let percent = 0.1;
let nose = pose.keypoints[0].position;
noseLerp.x = lerp(noseLerp.x, nose.x, percent);
noseLerp.y = lerp(noseLerp.y, nose.y, percent);
let rightEye = pose.keypoints[1].position;
rightLerp.x = lerp(rightLerp.x, rightEye.x, percent);
rightLerp.y = lerp(rightLerp.y, rightEye.y, percent);
let leftEye = pose.keypoints[2].position;
leftLerp.x = lerp(leftLerp.x, leftEye.x, percent);
leftLerp.y = lerp(leftLerp.y, leftEye.y, percent);
let d = dist(rightLerp.x, rightLerp.y, noseLerp.x, noseLerp.y);
fill(255,10);
noStroke();
ellipse(noseLerp.x, noseLerp.y, d);
let rightV = createVector(rightLerp.x - noseLerp.x, rightLerp.y - noseLerp.y);
let leftV = createVector(leftLerp.x - noseLerp.x, leftLerp.y - noseLerp.y);
rightV.mult(3.5).add(noseLerp.x, noseLerp.y);
leftV.mult(3.5).add(noseLerp.x, noseLerp.y);
let mid = p5.Vector.add(rightV, leftV).div(2);
let diff = p5.Vector.sub(rightV, leftV);
let angle = diff.heading();
let x = 0;
let y = -d;
push();
translate(mid.x, mid.y);
rotate(angle);
// fill(0);
// rectMode(CENTER);
// rect(0,-d, diff.mag()/2, d*2, 10);
// rect(0, 0, diff.mag(), d, 20);
emitter.updatePosition(0, -d);
emitter.emit(4);
emitter.show();
emitter.update();
noStroke();
fill('grey');
ellipse(x,y,60,50);
ellipse(x+30,y-10,60,50);
ellipse(x+80,y,60,50);
ellipse(x+20,y+20,60,50);
ellipse(x+60,y+15,60,50);
pop();
}
}