xxxxxxxxxx
173
// The neural network is the brain
let brain;
let pressed = false;
let confidence;
let classificationResult;
let labelB = '';
let labelA = '';
let labelC = '';
let labelD = '';
let confA = 0;
let confB = 0;
let confC = 0;
let confD = 0;
let classifierLabel;
let training = false;
let lastTraining = false;
let font;
function preload() {
font = loadFont('SourceCodePro-Regular.ttf');
}
function setup() {
let canvas = createCanvas(400, 400);
canvas.parent('sketch-holder');
// Only when clicking on the canvas
//canvas.mousePressed(addData);
//for holding down recording.
canvas.mousePressed(check);
canvas.mouseReleased(uncheck);
// Create ethe model
const options = {
inputs: ['x', 'y'], // TODO: support ['x', 'y']
outputs: ['label'], // TODO: support ['label']
debug: true,
task: 'classification'
}
brain = ml5.neuralNetwork(options);
background(0);
}
function draw() {
addData(); //only put in draw loop if check boolean functions used.
if (training !== lastTraining) { //don't continuously train!
if (training) {
trainModel();
}
}
lastTraining = training; //update last Training.
}
//check if buttons are pressed
function check() {
pressed = true;
}
function uncheck() {
pressed = false;
}
// Add a data record
function addData() {
if (pressed) {
// Get label
let label = classifierLabel;
// Add data
brain.addData({
x: mouseX,
y: mouseY
}, {
label
});
// Draw circle to visualize training data
push();
stroke(255);
noFill();
ellipse(mouseX, mouseY, 32);
fill(255);
textSize(16);
textAlign(CENTER, CENTER);
text(label, mouseX, mouseY);
pop();
}
}
// Train the model
function trainModel() {
// ml5 will normalize data to a range between 0 and 1 for you.
brain.normalizeData();
// Train the model
// Epochs: one cycle through all the training data
brain.train({
epochs: 20
}, finishedTraining);
}
// When the model is trained
function finishedTraining() {
brain.classify([mouseX, mouseY], gotResults);
}
// Got a result
function gotResults(error, results) {
if (error) {
// console.error(error);
return;
}
// Show classification
confidence = nf(results[0].confidence, 0, 2);
classificationResult = results[0].label;
console.log(confidence);
updateClassification(results);
// Predict again
brain.classify([mouseX, mouseY], gotResults);
}
//filter array function for specific labels.
function updateClassification(results) {
//filter the results
var idA = results.filter(function(e) {
return e.label == 'A';
});
// console.log(idA[0].confidence);
labelA = idA[0].label;
confA = idA[0].confidence;
var idB = results.filter(function(e) {
return e.label == 'B';
});
// console.log(idB[0].confidence);
labelB = idB[0].label;
confB = idB[0].confidence;
var idC = results.filter(function(e) {
return e.label == 'C';
});
// console.log(idB[0].confidence);
labelC = idC[0].label;
confC = idC[0].confidence;
var idD = results.filter(function(e) {
return e.label == 'D';
});
// console.log(idB[0].confidence);
labelD = idD[0].label;
confD = idD[0].confidence;
}