xxxxxxxxxx
234
let video;
let poseNet;
let noseX=0,noseY=0,wristLX=0,wristLY=0,wristRX=0,wristRY=0,elbowLX=0,elbowLY=0,elbowRX=0,elbowRY=0, shoLX=0,shoLY=0,shoRX=0,shoRY=0,kneeLX=0,kneeLY=0,kneeRX=0,kneeRY=0,ankleLX=0,ankleLY=0,ankleRX=0,ankleRY=0,hipLX=0,hipLY=0,hipRX=0,hipRY=0;
//calibration
let bounce1;
var down,up,position0;
let timer = 1;
var x,x2;
//desired spot
var elbowX,elbowX2,elbowY, shoX ,shoX2 ,shoY;
var speed=5;
function preload() {
down = loadImage("down.gif");
up =loadImage("up.gif");
bounce1 = loadImage("basic bounce/loop1.gif");
position0=loadImage("basic bounce/position0.png");
}
function setup() {
createCanvas(640, 480);
video = createCapture(VIDEO);
video.hide();
poseNet = ml5.poseNet(video, modelReady);
poseNet.on('pose', function(results) {
poses = results;
});
poseNet.on('pose', gotPoses);
noStroke();
elbowX = width-230;
elbowX2 =width-370;
elbowY = height-200;
shoX = width-250;
shoX2 = width-350;
shoY = height-300;
x=elbowX;
x2=elbowX2;
}
function gotPoses(poses) {
// console.log(poses);
if (poses.length > 0) {
let nX = poses[0].pose.keypoints[0].position.x;
let nY = poses[0].pose.keypoints[0].position.y;
let slX = poses[0].pose.keypoints[5].position.x;
let slY = poses[0].pose.keypoints[5].position.y;
let srX = poses[0].pose.keypoints[6].position.x;
let srY = poses[0].pose.keypoints[6].position.y;
let elX = poses[0].pose.keypoints[7].position.x;
let elY = poses[0].pose.keypoints[7].position.y;
let erX = poses[0].pose.keypoints[8].position.x;
let erY = poses[0].pose.keypoints[8].position.y;
let wlX = poses[0].pose.keypoints[9].position.x;
let wlY = poses[0].pose.keypoints[9].position.y;
let wrX = poses[0].pose.keypoints[10].position.x;
let wrY = poses[0].pose.keypoints[10].position.y;
let hlX = poses[0].pose.keypoints[11].position.x;
let hlY = poses[0].pose.keypoints[11].position.y;
let hrX = poses[0].pose.keypoints[12].position.x;
let hrY = poses[0].pose.keypoints[12].position.y;
let klX = poses[0].pose.keypoints[13].position.x;
let klY = poses[0].pose.keypoints[13].position.y;
let krX = poses[0].pose.keypoints[14].position.x;
let krY = poses[0].pose.keypoints[14].position.y;
let alX = poses[0].pose.keypoints[15].position.x;
let alY = poses[0].pose.keypoints[15].position.y;
let arX = poses[0].pose.keypoints[16].position.x;
let arY = poses[0].pose.keypoints[16].position.y;
noseX = lerp(noseX, nX, 0.5);
noseY = lerp(noseY, nY, 0.5);
shoLX = lerp(shoLX, slX, 0.5);
shoLY = lerp(shoLY, slY, 0.5);
shoRX = lerp(shoLX, srX, 0.5);
shoRY = lerp(shoRY, srY, 0.5);
elbowLX = lerp(elbowLX, elX, 0.5);
elbowLY = lerp(elbowLY, elY, 0.5);
elbowRX = lerp(elbowRX, erX, 0.5);
elbowRY = lerp(elbowRY, erY, 0.5);
wristLX = lerp(wristLX, wlX, 0.5);
wristLY = lerp(wristLY, wlY, 0.5);
wristRX = lerp(wristRX, wrX, 0.5);
wristRY = lerp(wristRY, wrY, 0.5);
hipRX = lerp(hipRX, hrX,0.5);
hipRY = lerp(hipRY, hrY,0.5);
hipLX = lerp(hipLX, hlX,0.5);
hipLY = lerp(hipLY, hlY,0.5);
kneeRX = lerp(kneeRX, krX,0.5);
kneeRY = lerp(kneeRY, krY,0.5);
kneeLX = lerp(kneeLX, klX,0.5);
kneeLY = lerp(kneeLY, klY,0.5);
ankleRX = lerp(ankleRX, arX,0.5);
ankleRY = lerp(ankleRY, arY,0.5);
ankleLX = lerp(ankleLX, alX,0.5);
ankleLY = lerp(ankleLY, alY,0.5);
}
}
function modelReady() {
console.log('model ready');
}
function draw() {
//flip video
translate(width,0);
scale(-1, 1);
image(video, 0, 0);
//image(bounce1, 50, 20);
//countdown time for calibration
if (timer > 0) {
if (frameCount % 60 == 0) {
timer--;
}
textStyle(NORMAL);
textSize(20);
text('Make sure that you stand in the right place.', 120, 50);
textSize(200);
text(timer, 100, 200);
tint(255, 126);
image(position0,50,20);
}
if (timer <= 0) {
//bounce arrow
// if (noseY<height/2){
// image(down,noseX-50,noseY-200,80,80);
// }else{
// image(up,noseX-50,noseY-200,80,80);
// }
//show the keypoints
polygon(kneeRX, kneeRY, 20, 8);
polygon(kneeLX, kneeLY, 20, 8);
//moving in a range
if ((elbowX-30)< elbowLX && elbowLX<(elbowX+30) && (elbowY-30)<elbowLY && elbowLY<(elbowY+30)){
noFill();
}else{
//blinking(elbowX,elbowY);
x = x-speed;
bouncing(x,elbowY,elbowX,elbowX-50,20);
ellipse(elbowLX, elbowLY, 30,30);
}
if ((elbowX2-30)< elbowRX && elbowRX<(elbowX2+30) && (elbowY-30)<elbowRY && elbowRY<(elbowY+30)){
noFill();
}else{
//blinking(elbowX2,elbowY);
x2 = x2+speed;
bouncing(x2,elbowY,elbowX2+50,elbowX2,20);
ellipse(elbowRX, elbowRY, 30,30);
}
if ((shoX2-30)< shoRX && shoRX<(shoX2+30) && (shoY-30)<shoRY && shoRY<(shoY+30)){
noFill();
}else{
fill(255, 245, 123);
rect(shoX2,shoY, 30,30,10);
fill(254, 204, 81);
rect(shoX2+5, shoY+5, 20,20,5);
rect(shoLX,shoLY,30,30,10);
}
if ((shoX-30)< shoLX && shoLX<(shoX+30) && (shoY-30)<shoLY && shoLY<(shoY+30)){
noFill();
}else{
fill(255, 245, 123);
rect(shoX,shoY, 30,30,10);
fill(254, 204, 81);
rect(shoX+5, shoY+5, 20,20,5);
rect(shoRX,shoRY,30,30,10);
}
}
}
function drawShape(xTarget,yTarget,xKey,yKey,npoints){
if ((xTarget-margin)> xKey && xKey>(xTarget+margin) && (yTarget-margin)>yKey && yKey>(yTarget+margin)){
fill(255, 245, 123);
polygon(xTarget,yTarget,30,npoints);
fill(254, 204, 81);
polygon(xTarget+5, yTarget+5,20,npoints);
polygon(xKey,xKey,30,npoints);
}
else{
noFill();
}
}
function polygon(x, y, radius, npoints) {
let angle = TWO_PI / npoints;
beginShape();
for (let a = 0; a < TWO_PI; a += angle) {
let sx = x + cos(a) * radius;
let sy = y + sin(a) * radius;
vertex(sx, sy);
}
endShape(CLOSE);
}
function blinking(x,y){
fill(255, 245, 123);
tint(255, 126);
ellipse(x,y, 7+random(30,50));
fill(254, 204, 81);
ellipse(x, y, 3+random(20,30));
}
function bouncing(x,y,left,right,size){
if (x > left){
speed *= -1;
}
if (x == right){
speed *= -1 ;
}
ellipse(x, y, size, size);
}