https://teachablemachine.withgoogle.com/ (์ด ์ฌ์ดํธ์์ ํ์ต)
https://github.com/googlecreativelab/teachablemachine-community/tree/master/libraries/image
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>๋ถ๋ ์ฌ๊ณผ(๊ฐ์ฒด) ๊ฐ์ง ์์คํ
</title>
</head>
<body>
<div>๋ถ๋ ์ฌ๊ณผ(๊ฐ์ฒด) ๊ฐ์ง ์์คํ
_์ฒด๋ฆฌํผ์ปค</div>
<button type="button" onclick="init()">Start</button>
<div id="webcam-container"></div>
<div id="label-container"></div>
<div id="label-container2"></div>
<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@1.3.1/dist/tf.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@teachablemachine/image@0.8/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 = "./my_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"));
}
labelContainer2 = document.getElementById("label-container2");
}
cnt = 0;
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);
if(prediction[0].className == "apple" && prediction[0].probability.toFixed(2) == 1.00){
labelContainer.childNodes[0].innerHTML = "์ ์ ์ฌ๊ณผ ์
๋๋ค."
} else if(prediction[1].className == "rotten_apple" && prediction[1].probability.toFixed(2) == 1.00){
cnt++
labelContainer2.innerHTML = "๊ฐ์ง๋ ๋ถ๋ ์ฌ๊ณผ ์:"+cnt;
labelContainer.childNodes[0].innerHTML = "๋ถ๋ ์ฌ๊ณผ ์
๋๋ค."
var audio = new Audio('rotten.mp3');
audio.play();
} else {
labelContainer.childNodes[0].innerHTML = "์ ์ ์์ต๋๋ค."
}
// for (let i = 0; i < maxPredictions; i++) {
// const classPrediction =
// prediction[i].className + ": " + prediction[i].probability.toFixed(2);
// labelContainer.childNodes[i].innerHTML = classPrediction;
// }
}
</script>
</body>
</html>
๋ถ๋ ํ์ง์ mp3ํ์ผ (https://clova.ai/voice)
๋ถ๋+๊ฐ์ฒด+ํ์ง+์์คํ
.mp3
0.04MB
'๋ฅ๋ฌ๋๐ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ถ ์ด๋ฏธ์ง ๋ผ๋ฒจ๋ง(label) ์ํค๊ธฐ (1) | 2023.01.06 |
---|---|
DB๋ฅผ Flask-SQLAlchemy ORM Model (0) | 2022.04.25 |
Python Face Recognition in Real Time - ํ์ด์ฌ ์ผ๊ตด ์ธ์ (0) | 2022.04.25 |
haarcascade ๋ฅผ ์ด์ฉํ์ฌ ์ค์๊ฐ ์ผ๊ตด ์ธ์ ์คํ์์ผ๋ณด๊ธฐ (4) | 2022.04.02 |
mvnw ์คํ (1) | 2022.03.23 |