Week 7 Assignment Refinement
Exploring merging and changing codes to perform different functions.
With Sayjel’s help (big thanks), I manage to change PoseNet code allowing the viewer to see their face while the snowflakes fall and accumulates on the detected face(s).
*Thanks to my beautiful model @DaniaAbdulkarim
let video;
let poseNet;
let poses = [];
let skeletons = [];
let snowflakes = [];
var faceX, faceY
function setup() {
createCanvas(innerWidth, innerHeight);
video = createCapture(VIDEO);
video.size(width, height);
poseNet = ml5.poseNet(video, modelReady);
poseNet.on('pose', function (results) {
poses = results;
});
video.hide();
faceX = width/2
faceY = height/2
function modelReady() {
select('#status').html('Model Loaded');
}
var count = 0
var r = 0.22414
var g = 0.1234124
var b = 0.623623
function drawKeypoints() {
if (poses.length > 0){
let keypoint = poses[0].pose.keypoints[0];
if (keypoint.score > 0.2) {
fill(255, 0, 0);
noStroke();
fill(255)
faceX = keypoint.position.x
faceY = keypoint.position.y
}
function bearFace(x,y){
image(video, 0, 0, width, height);
for (let i = 0; i < random(5); i++) {
snowflakes.push(new snowflake());
}
var diameter = 200
for (let flake of snowflakes) {
if (dist(flake.posX,flake.posY,faceX,faceY)>diameter/2){
flake.update(t);
}
flake.display();
}
this.posX = 0;
this.posY = random(-50, 0);
this.initialangle = random(0, 2 * PI);
this.size = random(2, 5);
this.radius = sqrt(random(pow(width / 2, 2)));
this.update = function(time) {
let w = 0.6;
let angle = w * time + this.initialangle;
this.posX = width / 2 + this.radius * sin(angle);
this.posY += pow(this.size, 0.5);
if (this.posY > height) {
let index = snowflakes.indexOf(this);
snowflakes.splice(index, 1);
}
};
this.display = function() {
noStroke()
fill(255)
ellipse(this.posX, this.posY, this.size);
};
}
function drawSkeleton() {
for (let i = 0; i < poses.length; i++) {
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);
line(partA.position.x, partA.position.y, partB.position.x, partB.position.y);
}
}
}