Skip to content

Instantly share code, notes, and snippets.

@mjdargen
Created February 11, 2020 15:43
Show Gist options
  • Save mjdargen/fa8d6d75c5bdc8333860b03560af5772 to your computer and use it in GitHub Desktop.
Save mjdargen/fa8d6d75c5bdc8333860b03560af5772 to your computer and use it in GitHub Desktop.
tm
// More API functions here:
// https://github.com/googlecreativelab/teachablemachine-community/tree/master/libraries/image
let model, webcam, labelContainer, maxPredictions;
// Load the image model and setup the webcam
async function init() {
const URL = "https://teachablemachine.withgoogle.com/models/uSXPV8Y2/";
const modelURL = URL + 'model.json';
const metadataURL = URL + 'metadata.json';
model = await tmImage.load(modelURL, metadataURL);
// load the model, weights, and metadata
// load files from a file picker or from local hard drive
// Note: the pose library adds "tmImage" object to your window (window.tmImage)
const uploadModel = document.getElementById('uploaded-model');
const uploadWeights = document.getElementById('uploaded-weights');
const uploadMetadata = document.getElementById('uploaded-metadata');
//model = await tmImage.loadFromFiles(uploadModel.files[0], uploadWeights.files[0], uploadMetadata.files[0]);
maxPredictions = model.getTotalClasses();
// Convenience function to setup a webcam
const flip = true; // whether to flip the webcam
webcam = new tmImage.Webcam(400, 400, flip); // width, height, flip
await webcam.setup(); // request access to the webcam
await webcam.play();
window.requestAnimationFrame(loop);
// append elements to the DOM
document.getElementById("webcam-container").appendChild(webcam.canvas);
labelContainer = document.getElementById("label-container");
for (let i = 0; i < maxPredictions; i++) { // and class labels
labelContainer.appendChild(document.createElement("div"));
}
}
async function loop() {
webcam.update(); // update the webcam frame
await predict();
window.requestAnimationFrame(loop);
}
// run the webcam image through the image model
async function predict() {
// predict can take in an image, video or canvas html element
const prediction = await model.predict(webcam.canvas);
for (let i = 0; i < maxPredictions; i++) {
// show name with percentage of confidence prediction
const classPrediction =
prediction[i].className + ": " + (prediction[i].probability.toFixed(4) * 100).toFixed(2) + '%';
labelContainer.childNodes[i].innerHTML = classPrediction;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment