xxxxxxxxxx
116
/*
//Adaptted from serial stream example by from Andreas Refsgaard.
//https://editor.p5js.org/AndreasRef/sketches/zMEfp6YP
//adapted by j3nsykes to work with webUSB and remove need for p5serial app running.
need this arduino code to work -->
https://github.com/j3nsykes/creativeML2020/tree/master/PhysicalTeachableMachines/ML5_neuralNet/Arduino/AnalogInput_WebUSB/webUSB_singleInputsend
*/
// The neural network is the brain
let brain;
var sensorData = 0;
var data = 0; //give initial values.
let sensorValueInt = 0;
let latestData = "waiting for data"; // you'll use this to write incoming data to the canvas
function setup() {
let canvas = createCanvas(256, 256);
// Only when clicking on the canvas
//canvas.mousePressed(addData);
// Create the model
const options = {
inputs: ['sensorValue'],
outputs: ['label'], // TODO: support ['label']
debug: true,
task: 'classification'
}
brain = ml5.neuralNetwork(options);
// Train Model button
select('#train').mousePressed(trainModel);
background(0);
}
// Add a data record
function addData() {
// Get frequency
let label = select('#label').value();
// Add data
brain.addData({
sensorValue: sensorValueInt
}, {
label
});
}
// 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: 100
}, finishedTraining);
}
// When the model is trained
function finishedTraining() {
brain.classify([sensorValueInt], gotResults);
}
// Got a result
function gotResults(error, results) {
if (error) {
console.error(error);
return;
}
// Show classification
select('#classification').html(results[0].label);
// Predict again
brain.classify([sensorValueInt], gotResults);
}
// There is data available to work with
function gotData() {
// console.log(sensorData);
if (sensorData != 0) { //allow for Serial to start stream at beginning.
data = JSON.parse(sensorData);
console.log(data.sensor);
latestData = data.sensor; // save it for the draw method
//parse string into int
sensorValueInt = int(latestData);
}
}
function draw() {
//maybe add setinterval to control more?
gotData();//get the webUSB serial information!!!
if (mouseIsPressed) {
addData();
let label = select('#label').value();
background(0, 255, 0);
text("Adding training data for " + label + ": " + sensorValueInt, 10, 50);
} else {
background(0);
}
}