| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8"> |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| <title>Teachable Machine Image Model</title> |
| </head> |
| <body> |
| <div>Teachable Machine Image Model</div> |
| <div id="webcam-container"></div> |
| <div id="label-container"></div> |
| <script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@latest/dist/tf.min.js"></script> |
| <script src="https://cdn.jsdelivr.net/npm/@teachablemachine/image@latest/dist/teachablemachine-image.min.js"></script> |
| <script type="text/javascript"> |
| const URL = "https://teachablemachine.withgoogle.com/models/ZPfAhDYCh/"; |
| |
| let model, webcam, labelContainer, maxPredictions; |
| |
| async function init() { |
| const modelURL = URL + "model.json"; |
| const metadataURL = URL + "metadata.json"; |
| |
| model = await tmImage.load(modelURL, metadataURL); |
| maxPredictions = model.getTotalClasses(); |
| |
| const flip = true; |
| webcam = new tmImage.Webcam(200, 200, flip); |
| await webcam.setup(); |
| await webcam.play(); |
| window.requestAnimationFrame(loop); |
| |
| document.getElementById("webcam-container").appendChild(webcam.canvas); |
| labelContainer = document.getElementById("label-container"); |
| for (let i = 0; i < maxPredictions; i++) { |
| labelContainer.appendChild(document.createElement("div")); |
| } |
| } |
| |
| async function loop() { |
| webcam.update(); |
| await predict(); |
| window.requestAnimationFrame(loop); |
| } |
| |
| async function predict() { |
| 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; |
| } |
| } |
| |
| init(); |
| </script> |
| </body> |
| </html> |
|
|