xxxxxxxxxx
85
let video;
let poseNet;
let poses = [];
let skeletons = [];
let keypoint = [];
function setup() {
canvas = createCanvas(screen.width, screen.height);
video = createCapture(VIDEO);
video.size(width, height);
poseNet = ml5.poseNet(video, modelReady);
poseNet.on('pose', function (results) {
poses = results;
});
video.hide();
}
function modelReady() {
select('#status').html('Model Loaded');
}
function draw() {
background(0,10);
// image(video, 0, 0, width, height);
drawKeypoints();
drawSkeleton();
}
function drawKeypoints() {
for (let i = 0; i < poses.length; i++) {
// For each pose detected, loop through all the keypoints
for (let j = 0; j < poses[i].pose.keypoints.length; j++) {
let keypoint = poses[i].pose.keypoints[j];
// Only draw an ellipse is the pose probability is bigger than 0.2
if (keypoint.score > 0.2) {
fill (255, random(0, 255), 0);
// fill(255, 0, 0);
noStroke();
ellipse(keypoint.position.x, keypoint.position.y, random(10, 40));
}
}
}
}
// A function to draw the skeletons
function drawSkeleton() {
// Loop through all the skeletons detected
for (let i = 0; i < poses.length; i++) {
// For every skeleton, loop through all body connections
for (let j = 0; j < poses[i].skeleton.length; j++) {
let partA = poses[i].skeleton[j][0];
let partB = poses[i].skeleton[j][1];
stroke(255, 0, 0);
strokeWeight(random(2,6));
line(partA.position.x, partA.position.y, partB.position.x, partB.position.y);
}
}
}
function keyTyped() {
if (key === 's') {
save('myCanvas.jpg');
}
}
if (mouseIsPressed){
image(video, 0, 0, width, height);
fill(255, 0, 0);
noStroke();
ellipse(keypoint.position.x, keypoint.position.y, 10, 10);
noFill();
stroke(255, 0, 0);
// strokeWeight(random (2,10));
ellipse(keypoint.position.x, keypoint.position.y, 20, 20);
}