xxxxxxxxxx
106
let featureExtractor;
let regressor;
let video;
let loss;
let slider;
let addSample;
let samples;
let positionX;
let t;
var boxSize = 100;
var lineThick = 3;
function rotateDraw(depth) {
push();
translate(400, 0, 200);
noFill();
stroke(255,100,100);
strokeWeight(lineThick);
rotateZ(frameCount * .001);
rotateX(frameCount * .001);
rotateY(frameCount * .001);
box(boxSize, boxSize,depth);
pop();
}
function setup() {
createCanvas(1024, 768, WEBGL);
ortho();
video = createCapture(VIDEO);
video.hide();
featureExtractor = ml5.featureExtractor('MobileNet', modelReady);
regressor = featureExtractor.regression(video);
createButtons();
positionX = 140;
samples = 0;
t = 0;
}
function draw() {
background(255);
for (var i=0; i<width; i++) {
stroke(255 * noise(0.025 * i, t), 255 * slider.value(), 150*slider.value());
line(i, 0, i, height);
}
t += (0.1 * slider.value());
texture(video);
translate(-250, -250, 0);
plane(500);
rotateDraw(depth=255 * slider.value());
translate(0,0,-500)
}
// A function to be called when the model has been loaded
function modelReady() {
select('#loading').html('Model loaded!');
}
// Classify the current frame.
function predict() {
regressor.predict(gotResults);
}
// A util function to create UI buttons
function createButtons() {
slider = select('#slider');
// When the Dog button is pressed, add the current frame
// from the video with a label of "dog" to the classifier
addSample = select('#addSample');
addSample.mousePressed(function() {
regressor.addImage(slider.value());
select('#amountOfSamples').html(samples++);
});
// Train Button
train = select('#train');
train.mousePressed(function() {
regressor.train(function(lossValue) {
if (lossValue) {
loss = lossValue;
select('#loss').html('Loss: ' + loss);
} else {
select('#loss').html('Done Training! Final Loss: ' + loss);
}
});
});
// Predict Button
buttonPredict = select('#buttonPredict');
buttonPredict.mousePressed(predict);
}
// Show the results
function gotResults(err, result) {
if (err) {
console.error(err);
}
positionX = map(result, 0, 1, 0, width);
slider.value(result);
predict();
}