xxxxxxxxxx
115
var serial;
var portName = '/dev/tty.usbmodem141401';
var inData;
var outByte = 0;
var video;
let timestamp = 0;
let capture;
var high = 1;
var low = 0;
let posX = 0;
let posY = 0;
let oldX = 0;
let oldY = 0;
let ardX = 0;
let ardY = 0;
let oldArdX = 0;
let oldArdY = 0;
let poseNet;
let poses = [];
function setup() {
createCanvas(640, 480);
video = createCapture(VIDEO);
video.size(width, height);
video.hide();
serial = new p5.SerialPort(); // make a new instance of the serialport library
serial.on('data', serialEvent); // callback for when new data arrives
serial.on('error', serialError); // callback for errors
serial.open(portName);
poseNet = ml5.poseNet(video, 'single', modelReady); //from multiple
poseNet.on('pose', function(results) {
poses = results;
})
posX = width / 2;
posY = height / 2;
}
function modelReady() {
select("#status").html("Model Loaded");
}
function draw() {
image(video, 0, 0, width, height);
drawKeypoints();
//drawSkeleton();
}
// A function to draw ellipses over the detected keypoints
function drawKeypoints() {
// Loop through all the poses detected
for (let i = 0; i < poses.length; i += 1) {
// For each pose detected, loop through all the keypoints
const pose = poses[i].pose;
if (pose.leftShoulder.confidence > 0.2 && pose.rightShoulder.confidence > 0.2) {
//map tracking to body midpoint
var dx = (pose.leftShoulder.x + pose.rightShoulder.x) / 2;
var dy = (pose.leftShoulder.y + pose.rightShoulder.y) / 2;
oldX = posX;
oldY = posY;
//map posX & posY to new variables for Arduino
posX += (dx - oldX) * 0.08; //was 0.1
posY += (dy - oldY) * 0.08;
//send to Arduino
oldArdX = ardX
oldArdY = ardY
ardX = int(map(posY, 0, width, 0, 50));
ardY = int(map(posX, 0, height, 0, 50));
fill('teal');
stroke('red');
strokeWeight(2);
ellipse(posX, posY, 30, 30);
if (oldArdX != ardX || oldArdY != ardY) {
if (pose.leftShoulder.x && pose.leftShoulder.y > 0) {
serial.write(high + ',' + ardX + ',' + ardY + '\n')
console.log(high + ',' + ardX + ',' + ardY + '\n');
// console.log('H');
} else {
serial.write(low + ',' + ardX + ',' + ardY + '\n');
console.log(low + ',' + ardX + ',' + ardY + '\n');
// console.log('L');
}
}
}
}
}
function serialEvent() {
// read a byte from the serial port:
var inByte = serial.read();
// store it in a global variable:
inData = inByte;
// console.log(inData);
}
function serialError(err) {
console.log('Something went wrong with the serial port. ' + err);
}
// if (poses <= 0) {
// outByte = 0
// }