Created
February 11, 2020 15:43
-
-
Save mjdargen/fa8d6d75c5bdc8333860b03560af5772 to your computer and use it in GitHub Desktop.
tm
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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