-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
c0a8c7b
commit 24a65b1
Showing
1 changed file
with
59 additions
and
0 deletions.
There are no files selected for viewing
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
<div>Teachable Machine Image Model</div> | ||
<button type="button" onclick="init()">Start</button> | ||
<div id="webcam-container"></div> | ||
<div id="label-container"></div> | ||
<script src="https://cdn.jsdelivr.net/npm/@tensorflow/[email protected]/dist/tf.min.js"></script> | ||
<script src="https://cdn.jsdelivr.net/npm/@teachablemachine/[email protected]/dist/teachablemachine-image.min.js"></script> | ||
<script type="text/javascript"> | ||
// More API functions here: | ||
// https://github.com/googlecreativelab/teachablemachine-community/tree/master/libraries/image | ||
|
||
// the link to your model provided by Teachable Machine export panel | ||
const URL = "https://github.com/Snipeur060/SpaceAI/tree/main/web/model/"; | ||
|
||
let model, webcam, labelContainer, maxPredictions; | ||
|
||
// Load the image model and setup the webcam | ||
async function init() { | ||
const modelURL = URL + "model.json"; | ||
const metadataURL = URL + "metadata.json"; | ||
|
||
// load the model and metadata | ||
// Refer to tmImage.loadFromFiles() in the API to support files from a file picker | ||
// or files from your local hard drive | ||
// Note: the pose library adds "tmImage" object to your window (window.tmImage) | ||
model = await tmImage.load(modelURL, metadataURL); | ||
maxPredictions = model.getTotalClasses(); | ||
|
||
// Convenience function to setup a webcam | ||
const flip = true; // whether to flip the webcam | ||
webcam = new tmImage.Webcam(200, 200, 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++) { | ||
const classPrediction = | ||
prediction[i].className + ": " + prediction[i].probability.toFixed(2); | ||
labelContainer.childNodes[i].innerHTML = classPrediction; | ||
} | ||
} | ||
</script> |