Classification με την ml5.js (3/5)

Βήμα 1ο: Συλλογή δεδομένων

Αρχικά θα χρησιμοποιήσουμε την μέθοδο της p5, mousePressed() και θα ζωγραφίζουμε έναν κύκλο σε κάθε κλίκ με κέντρο την θέση του ποντικιού και πάντα μέσα στον καμβά. Επίσης στο κέντρο του κάθε κύκλου θα τυπώσουμε το όνομα της εκάστοτε νότας, ξεκινώντας από τη Ντο (C).

function mousePressed() {
  
  drawNote ('C', mouseX, mouseY);
  
}

//helpers
function drawNote (noteName, x, y) {

    stroke(0);
    noFill();
    ellipse(x, y, 24);
    fill(0);
    noStroke();
    textAlign(CENTER, CENTER);
    text(noteName, x, y);

}

Τώρα μπορούμε να ζωγραφίσουμε τη νοτα C  σε μια θέση x,y και αυτό αποτελεί το input μας για το nn. Εμείς βέβαια θέλουμε να μπορούμε να επιλέξουμε τη νότα που θα ζωγραφίσουμε, οπότε κάνουμε το εξής

let nn;
let currentNote = 'C';


//...


function keyPressed() {

  currentNote = key.toUpperCase();

}

function mousePressed() {
  
  drawNote (currentNote, mouseX, mouseY);
  
}

Η μέθοδος keyPressed() είναι φυσικά άλλη μια μαγική μέθοδος της p5, όπως και το αντικείμενο key.

Μέχρι τώρα βέβαια δεν έχουμε συλλέξει κανένα δεδομένο για το nn μας, απλά ζωγραφίζουμε τα δεδομένα. ΄Ηρθε η ώρα να τα τροφοδοτήσουμε στο nn. Επειδη ονομάσαμε τις εισόδους 'x' και 'y' μπορούμε τώρα να τις περάσουμε ως παραμέτρους εισόδου. Και ως κατηγορία (θυμηθείτε κάνουμε κατηγοριοποίηση) θεωρούμε τη νότα. Πάλι μπορούμε να περάσουμε ως παράμετρο την note στην έξοδο μας επειδή την δηλώσαμε έτσι στην αρχικοποίηση του nn μας. Για να περάσουμε τις εισόδους και την έξοδο (κατηγορία) στο nn μας χρησιμοποιούμε την μέθοδο addData().

function mousePressed() {

  let inputValues = {
    x: mouseX,
    y: mouseY
  }


  let outputValue = {
    note: currentNote
  }

  nn.addData(inputValues, outputValue);
  
  drawNote(currentNote, mouseX, mouseY);

}

Με τον παραπάνω κώδικα τροφοδοτούμε το nn μας με δεδομένα προς εκπαίδευση (training data). Η κάθε "εγγραφή" απο δεδομένα περιλαμβάνει τις θέσεις x και y καθώς και μια κατηγορία. Η ml5 έχει την δυνατότητα να υπολογίσει από μόνη της το πλήθος των εξόδων του nn χρησιμοποιώντας τα training data. Αν για παράδειγμα χρησιμοποιήσουμε μόνο τις νότες C και D, τότε η ml5 θα δημιουργήσει 2 εξόδους κοκ.

Αυτό είναι τρομερά βολικό!

Αποτέλεσμα

Δείτε στον p5 editor