xxxxxxxxxx
let video;
let poseNet;
let poses = [];
let skeletons = [];
var points = [];
var maxPoints = 1000;
var eye, rightEar, leftEar, nose;
function preload(){
eye = loadImage('eye.png');
leftEar = loadImage('lear.png');
rightEar = loadImage('rear.png');
nose = loadImage('nose.png');
}
function setup() {
createCanvas(640, 480);
video = createCapture(VIDEO);
video.size(width, height);
eye.resize(60, 60);
leftEar.resize(60, 60);
rightEar.resize(60, 60);
nose.resize(60, 60);
// Create a new poseNet method with a single detection
poseNet = ml5.poseNet(video, modelReady);
// This sets up an event that fills the global variable "poses"
// with an array every time new poses are detected
poseNet.on('pose', function (results) {
poses = results;
});
// Hide the video element, and just show the canvas
video.hide();
}
function modelReady() {
}
function draw() {
background(100,40);
// image(video, 0, 0, width, height);
points = points.splice(0,maxPoints);
noFill();
stroke(50, 120, 170, 255);
drawKeypoints();
drawSkeleton();
}
// A function to draw ellipses over the detected keypoints
function drawKeypoints() {
// Loop through all the poses detected
var leftEye = false;
var rightEye = false;
// Loop through all the poses detected
for (let i = 0; i < poses.length; i++) {
// For each pose detected, loop through all the keypoints
// poses[i].pose.keypoints.filter(function(keypoint){
// return keypoint.part == 'rightEye';
// }).map(function(keypoint){
// image(eye,keypoint.position.x, keypoint.position.y);
// });
//nose/
//rightAnkle
//rightHip
//leftWrist
//rightElbow
//rightShoulder
//rightEar
for (let j = 0; j < poses[i].pose.keypoints.length; j++) {
// A keypoint is an object describing a body part (like rightArm or leftShoulder)
let keypoint = poses[i].pose.keypoints[j];
ellipse(keypoint.position.x, keypoint.position.y,10,10);
if(keypoint.part == 'leftEye') {
leftEye = createVector(keypoint.position.x, keypoint.position.y);
//image(eye,keypoint.position.x-30, keypoint.position.y-30);
}
if(keypoint.part == 'rightEye') {
rightEye = createVector(keypoint.position.x, keypoint.position.y);
// image(eye,keypoint.position.x-30, keypoint.position.y-30);
}
if(keypoint.part == 'rightEar') {
// image(leftEar,keypoint.position.x-30, keypoint.position.y-30);
}
if(keypoint.part == 'leftEar') {
// image(rightEar,keypoint.position.x-30, keypoint.position.y-30);
}
if(keypoint.part == 'nose') {
// image(nose,keypoint.position.x-30, keypoint.position.y-30);
}
}
}
// if(leftEye && rightEye){
// var dif = p5.Vector.sub(leftEye, rightEye);
// var centerEye = p5.Vector.add(leftEye, rightEye).mult(0.5);
// console.log(centerEye);
// var m = int(dif.mag());
// // var rEye = eye;
// // rEye.resize(m,m);
// image(eye,centerEye.x,centerEye.y);
// }
}
// 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];
line(partA.position.x, partA.position.y,partB.position.x, partB.position.y)
}
}
}