xxxxxxxxxx
192
// ml5.js: Pose Estimation with PoseNet
// The Coding Train / Daniel Shiffman
// https://thecodingtrain.com/Courses/ml5-beginners-guide/7.1-posenet.html
// https://youtu.be/OIo-DIOkNVg
// https://editor.p5js.org/codingtrain/sketches/ULA97pJXR
// shoutout to Pauline for helping me so much with debugging!!!
let video;
let poseNet;
let pose;
let skeleton;
var words = [
"this is",
"these",
"sunrays",
"light",
"hugging",
"we are",
"here",
"carry the weight",
"edges",
"my borders",
"give me warmth",
"jelly bracelets",
"bendy road",
"a line",
"little cradle",
"wreath",
"my love",
"I am",
"wrapping paper wrapping you",
"tender circles",
"elastic hairband",
"stretching the seams",
"pushing and pulling",
"open wounds",
"not knowing",
"no standards",
"to be free",
"fluid & chewy",
"soft",
"meet at dawn",
];
function getRandomInt(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min) + min);
}
var randomElementFromArray = function (inputArray) {
let randomIdx = getRandomInt(0, inputArray.length);
return inputArray[int(randomIdx)];
};
var a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p;
function setup() {
createCanvas(640, 480);
video = createCapture(VIDEO);
video.hide();
poseNet = ml5.poseNet(video, modelLoaded);
poseNet.on("pose", gotPoses);
a = randomElementFromArray(words);
words.splice(words.indexOf(a), 1);
b = randomElementFromArray(words);
words.splice(words.indexOf(b), 1);
c = randomElementFromArray(words);
words.splice(words.indexOf(c), 1);
d = randomElementFromArray(words);
words.splice(words.indexOf(d), 1);
e = randomElementFromArray(words);
words.splice(words.indexOf(e), 1);
f = randomElementFromArray(words);
words.splice(words.indexOf(f), 1);
g = randomElementFromArray(words);
words.splice(words.indexOf(g), 1);
h = randomElementFromArray(words);
words.splice(words.indexOf(h), 1);
i = randomElementFromArray(words);
words.splice(words.indexOf(i), 1);
j = randomElementFromArray(words);
words.splice(words.indexOf(j), 1);
k = randomElementFromArray(words);
words.splice(words.indexOf(k), 1);
l = randomElementFromArray(words);
words.splice(words.indexOf(l), 1);
m = randomElementFromArray(words);
words.splice(words.indexOf(m), 1);
n = randomElementFromArray(words);
words.splice(words.indexOf(n), 1);
o = randomElementFromArray(words);
words.splice(words.indexOf(o), 1);
p = randomElementFromArray(words);
words.splice(words.indexOf(p), 1);
q = randomElementFromArray(words);
words.splice(words.indexOf(q), 1);
console.log("chosen words:");
console.log(a, b, c, d, e, f, g, h, i, l, m, n, o, p, q);
}
function gotPoses(poses) {
//console.log(poses);
if (poses.length > 0) {
pose = poses[0].pose;
skeleton = poses[0].skeleton;
}
}
function modelLoaded() {
console.log("poseNet ready");
}
function draw() {
image(video, 0, 0);
// background('white');
// filter(GRAY);
// nose: Object
// leftEye: Object
// rightEye: Object
// leftEar: Object
// rightEar: Object
// leftShoulder: Object
// rightShoulder: Object
// leftElbow: Object
// rightElbow: Object
// leftWrist: Object
// rightWrist: Object
// leftHip: Object
// rightHip: Object
// leftKnee: Object
// rightKnee: Object
// leftAnkle: Object
// rightAnkle: Object
if (pose) {
let eyeR = pose.rightEye;
let eyeL = pose.leftEye;
// let d = dist(eyeR.x, eyeR.y, eyeL.x, eyeL.y);
fill("black");
stroke("white");
strokeWeight(2);
textSize(15);
textAlign(CENTER);
text(a, pose.leftShoulder.x, pose.leftShoulder.y);
text(b, pose.rightShoulder.x, pose.rightShoulder.y);
text(c, pose.nose.x, pose.nose.y);
text(d, pose.leftEye.x, pose.leftEye.y);
text(e, pose.rightEye.x, pose.rightEye.y);
text(f, pose.leftWrist.x, pose.leftWrist.y);
text(g, pose.rightWrist.x, pose.rightWrist.y);
text(h, pose.leftEar.x, pose.leftEar.y);
text(i, pose.rightEar.x, pose.rightEar.y);
text(j, pose.leftElbow.x, pose.leftElbow.y);
text(k, pose.rightElbow.x, pose.rightElbow.y);
text(l, pose.leftHip.x, pose.leftHip.y);
text(m, pose.rightHip.x, pose.rightHip.y);
text(n, pose.leftKnee.x, pose.leftKnee.y);
text(o, pose.rightKnee.x, pose.rightKnee.y);
text(p, pose.leftAnkle.x, pose.leftAnkle.y);
text(q, pose.rightAnkle.x, pose.rightAnkle.y);
for (let i = 0; i < pose.keypoints.length; i++) {
let x = pose.keypoints[i].position.x;
let y = pose.keypoints[i].position.y;
// fill(0,255,0);
// ellipse(x,y,16,16);
}
for (let i = 0; i < skeleton.length; i++) {
let a = skeleton[i][0];
let b = skeleton[i][1];
// strokeWeight(2);
// stroke(255);
// line(a.position.x, a.position.y,b.position.x,b.position.y);
}
}
}