xxxxxxxxxx
95
let catFile, rainbowFile, trainFile;
let len = 784;
let catData = [];
let rainbowData = [];
let trainData = [];
let myNN;
let isModelReady = false;
let mySpeech;
function preload() {
catFile = loadBytes("data/cats1000.bin");
rainbowFile = loadBytes("data/rainbows1000.bin");
trainFile = loadBytes("data/trains1000.bin");
}
function prepareData() {
for (let i = 0; i < 1000; i++) {
catData[i] = [];
rainbowData[i] = [];
trainData[i] = [];
for (let j = 0; j < len; j++) {
const catValue = (catFile.bytes[i*len + j]) / 255;
const rainbowValue = (rainbowFile.bytes[i*len + j]) / 255;
const trainValue = (trainFile.bytes[i*len + j]) / 255;
catData[i].push(catValue);
rainbowData[i].push(rainbowValue);
trainData[i].push(trainValue);
}
}
addData();
}
function addData() {
const option = {
inputs: 784,
outputs: 3,
task: 'classification',
debug: true
};
myNN = ml5.neuralNetwork(option);
for (let i = 0; i < 1000; i++) {
myNN.addData(catData[i], ['cat']);
myNN.addData(rainbowData[i], ['rainbow']);
myNN.addData(trainData[i], ['train']);
}
myNN.train({
epochs: 30,
}, doneTraining);
}
function setup() {
createCanvas(400, 400);
background(255);
prepareData();
stroke(0);
strokeWeight(30);
mySpeech = new p5.Speech();
}
function draw() {
if (mouseIsPressed) {
line(pmouseX, pmouseY, mouseX, mouseY);
}
}
function mouseReleased() {
if (isModelReady) {
const myInput = [];
let c = get();
c.resize(28, 28);
c.loadPixels();
for (let i = 0; i < len; i++) {
const value = (255 - c.pixels[i * 4]) / 255;
myInput.push(value);
}
myNN.classify(myInput, gotResults);
}
}
function keyPressed() {
if (keyCode === 32) {
background(255);
}
}
function gotResults(error, results) {
// console.log(results);
mySpeech.speak("I think it is a " + results[0].label);
}
function doneTraining() {
isModelReady = true;
}