Teachable Machine

Teachable Machine és una eina molt útil i versàtil que pot afegir funcionalitat i interactivitat a la teva web. Aquí tens algunes idees de projectes que podries implementar:

Classificador d'Imatges

Entrena un model per reconèixer diferents categories d'imatges, com ara mascotes, tipus de menjar, plantes, etc.

Aplicació a la teva web: Els usuaris poden pujar una imatge i el model els dirà a quina categoria pertany. Això podria ser útil per a llocs web de comerç electrònic, blogs de cuina, o llocs d'educació sobre la natura.

Reconeixement de Gestos

Entrena un model per reconèixer gestos amb la mà o moviments corporals.

Aplicació a la teva web: Podries implementar controls basats en gestos per navegar per la teva web, jugar a jocs, o realitzar tasques específiques com canviar diapositives en una presentació.

Classificació d'Àudio

Entrena un model per reconèixer sons específics, com ara aplaudiments, veu humana, o sons d'animals.

Aplicació a la teva web: Els usuaris poden carregar un clip d'àudio i el model l'identificarà. Això pot ser útil per a llocs web de música, aplicacions de reconeixement de veu, o eines d'educació musical.

Reconeixement Facial

Entrena un model per reconèixer expressions facials com somriure, sorpresa, o tristesa.

Aplicació a la teva web: Els usuaris podrien fer servir la seva càmera per interactuar amb el lloc basat en les seves expressions facials, per exemple, somriure per activar una funció específica.

Classificador de Text

Entrena un model per classificar textos en diferents categories, com ara comentaris positius/negatius, temes específics, etc.

Aplicació a la teva web: Podries utilitzar aquest model per moderar comentaris en un fòrum, classificar correus electrònics, o recomanar contingut basat en les preferències de l'usuari.

Implementació a la Teva Web

  1. Entrenament del Model:
    1. Utilitza Teachable Machine per entrenar el model desitjat.
    2. Exporta el model entrenat a un format que es pugui utilitzar amb TensorFlow.js.
  2. Integració amb la Web:
    1. Afegeix TensorFlow.js al teu lloc web per carregar i executar el model.
    2. Desenvolupa una interfície d'usuari que permeti als usuaris interactuar amb el model (carregar imatges, enregistrar àudio, etc.).
    3. Utilitza JavaScript per gestionar la comunicació entre la interfície d'usuari i el model.
  3. Prova i Optimització:
    1. Prova el model amb diferents tipus d'entrada per assegurar-te que funciona correctament.
    2. Optimitza el rendiment de la teva web per assegurar una experiència d'usuari fluida.

Recursos Addicionals

Aquestes idees poden afegir una capa de interactivitat i personalització molt atractiva a la teva web. Tria la que millor s'adapti a les teves necessitats i interessos!

Exemple Pedra, Paper i Tisores

Aquí tens una guia pas a pas per crear un joc senzill de gestos utilitzant Teachable Machine i integrar-lo a la teva web:

Joc: Pedra, Paper, Tisores amb Gestos

Objectiu: Crear un joc de Pedra, Paper, Tisores on els usuaris puguin jugar contra l'ordinador utilitzant gestos amb les mans.

Pas 1: Entrenament del Model a Teachable Machine

  1. Accedeix a Teachable Machine
  2. Crear un projecte nou:
    1. Selecciona "Get Started" i després "Image Project".
    2. Tria "Standard image model".
  3. Configurar classes:
    1. Crea tres classes: "Pedra", "Paper" i "Tisores".
    2. Utilitza la càmera web per enregistrar múltiples exemples per a cadascuna de les classes. Pots fer-ho mostrant la mà en la posició corresponent per a cada gest.
  4. Entrenar el model:
    1. Un cop enregistrats els exemples, fes clic a "Train Model" per començar l'entrenament.
  5. Exportar el model:
    1. Després d'entrenar, selecciona "Export Model" i tria "TensorFlow.js". Descarrega l'arxiu zip i descomprimeix-lo per obtenir els fitxers del model.

Pas 2: Integració del Model a la Teva Web

  1. Configurar el projecte web:
    1. Crea una nova carpeta pel teu projecte i dins d'aquesta carpeta, crea els següents fitxers:
    2. index.html
    3. script.js
    4. style.css
  2. <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Pedra, Paper, Tisores</title>
        <link rel="stylesheet" href="style.css">
    </head>
    <body>
        <h1>Pedra, Paper, Tisores amb Gestos</h1>
        <div id="webcam-container"></div>
        <div id="label-container"></div>
        <button id="start-button">Començar Joc</button>
        <div id="result"></div>
        <script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs"></script>
        <script src="script.js"></script>
    </body>
    </html>
            
  3. body {
        font-family: Arial, sans-serif;
        display: flex;
        flex-direction: column;
        align-items: center;
        justify-content: center;
        height: 100vh;
        background-color: #f0f0f0;
    }
    
    #webcam-container {
        margin-top: 20px;
    }
    
    #label-container {
        margin-top: 10px;
        font-size: 24px;
    }
    
    #start-button {
        margin-top: 20px;
        padding: 10px 20px;
        font-size: 16px;
        cursor: pointer;
    }
    
    #result {
        margin-top: 20px;
        font-size: 24px;
    }
            
  4. let model, webcam, labelContainer, maxPredictions;
    
    // Load the image model and setup the webcam
    async function init() {
        const modelURL = 'model.json';
        const metadataURL = 'metadata.json';
    
        // Load the model and metadata
        model = await tmImage.load(modelURL, metadataURL);
        maxPredictions = model.getTotalClasses();
    
        // Setup webcam
        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);
    
        let highestProbability = 0;
        let gesture = '';
    
        for (let i = 0; i < maxPredictions; i++) {
            const classPrediction = prediction[i].className + ': ' + prediction[i].probability.toFixed(2);
            labelContainer.childNodes[i].innerHTML = classPrediction;
    
            if (prediction[i].probability > highestProbability) {
                highestProbability = prediction[i].probability;
                gesture = prediction[i].className;
            }
        }
    
        return gesture;
    }
    
    function startGame() {
        const userGesture = await predict();
        const computerGesture = ['Pedra', 'Paper', 'Tisores'][Math.floor(Math.random() * 3)];
        let result = '';
    
        if (userGesture === computerGesture) {
            result = 'Empat!';
        } else if (
            (userGesture === 'Pedra' && computerGesture === 'Tisores') ||
            (userGesture === 'Paper' && computerGesture === 'Pedra') ||
            (userGesture === 'Tisores' && computerGesture === 'Paper')
        ) {
            result = 'Guanyes!';
        } else {
            result = 'Perds!';
        }
    
        document.getElementById('result').innerHTML = `Vas fer ${userGesture}, Ordinador va fer ${computerGesture}: ${result}`;
    }
    
    document.getElementById('start-button').addEventListener('click', startGame);
    
    init();
    

Explicació:

  1. HTML (index.html): Defineix l'estructura de la pàgina amb un contenidor per a la webcam, un botó per començar el joc i un lloc per mostrar el resultat.

  2. CSS (style.css): Dona estil a la pàgina per fer-la més atractiva.

  3. JavaScript (script.js): Gestiona la càrrega del model, la configuració de la webcam, la predicció de gestos, i la lògica del joc. La funció init() carrega el model i configura la webcam. La funció predict() fa prediccions basades en el vídeo de la webcam. La funció startGame() compara el gest de l'usuari amb el de l'ordinador i mostra el resultat.

Finalització

Amb aquests passos, hauràs creat un joc interactiu de Pedra, Paper, Tisores basat en gestos, utilitzant Teachable Machine i integrat a la teva web. Experimenta amb els models i afegeix més funcionalitats per fer el joc més divertit i interactiu!