728x90
 

사이트에 들어가면 이미지 프로젝트, 오디오 프로젝트, 포즈 프로젝트가 있다. 포즈 프로젝트는 홈트 할 때 가벼운 게임 정도 만들면 좋을 것 같다. 이미지 프로젝트에는 표준 이미지 모델과 삽입된 이미지 모델이 있는데 그레이스케일 이미지가 있는 것 보니까 opencv, halcon 등 영상처리 프로그래밍 관련에 어울리는 인터페이스인 것 같다.

캠으로 실시간으로 러닝을 시킬 수 있고 저장된 파일을 업로드하여 러닝을 시킬 수도 있다. 전부 학습시켰으면 모델 학습시키기 버튼을 눌러 학습을 시키고 모델 내보내기를 하여 러닝된 값을 주소화시켜서 제공받거나 프로그램 형태로 다운로드할 수 있다.

나는 검은 바나나와 흰 바나나 두 개를 학습시켰다.

그리고 프로그램에 뜨는 퍼센티지를 활용하여 과일 등급을 선정해 주게 일부 코드를 변경하였다. 아이디어만 많으면 다양하게 코드 활용이 가능해 보인다.

리팩토링된 풀 코드

<!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>Document</title>
</head>
<body>
    <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/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">
        const URL = "./my_model/";

        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; // whether to flip the webcam
            webcam = new tmImage.Webcam(200, 200, flip);
            await webcam.setup(); // request access to the webcam
            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(); // update the webcam frame
            await predict();
            window.requestAnimationFrame(loop);
        }

        async function predict() {
            const prediction = await model.predict(webcam.canvas);
            const probability = prediction[0].probability.toFixed(2);
            const className = prediction[0].className;
            
            let grade = "D급 입니다."; // Default to D grade
            if (className == "pure") {
                if (probability >= 0.99) {
                    grade = "A급 입니다.";
                } else if (probability >= 0.50) {
                    grade = "B급 입니다.";
                } else if (probability > 0) {
                    grade = "C급 입니다.";
                }
            }

            labelContainer.childNodes[0].innerHTML = grade;
        }
    </script>
</body>
</html>

이렇게 앱, 웹 등 다양하게 확인이 가능하다.

사과를 학습 안시키고 돌려보았다.

 

728x90

'인공지능' 카테고리의 다른 글

Teachable Machine를 이용한 검출력 사진 분류  (1) 2024.03.22

+ Recent posts