el trabajo tiene nota máxima 7.0, tienen 1 punto base más estos 6 puntos evaluados, 1 punto por cada uno:
la pauta es:
mi equipo de trabajo es <https://github.com/NOMBRE> y <<https://github.com/NOMBRE>>, entregamos en el repositorio en este enlace <https://github.com/disenoUChile/audiv027-2024-1/estudiantes/NOMBRE/clase-06>.
Equipo:
-Javier Burgos
-Nicolás Lagos
-Valentina Soto
El proyecto se centra en la programación de un código que utiliza inteligencia artificial para detectar diferentes colores—rojo, amarillo y azul—mediante una cámara. Para ello, se partió de un código existente en P5.js que controla una figura en movimiento (consultar imagen adjunta). A este código se le integró un modelo de entrenamiento en Teachable Machine, donde se configuraron los colores mencionados. Una vez que la máquina detecta estos colores, la imagen de fondo se sincroniza y los puntos cambian de color de manera acorde.
https://editor.p5js.org/p5/sketches/Interaction:_Wavemaker
REFERENCIAS: https://p5js.org/reference/#Color - https://p5js.org/reference/p5/fill/
https://editor.p5js.org/ml5/sketches/HUm7NYMW3
https://editor.p5js.org/ach549@nyu.edu/sketches/S1u1JKeT7 - WORKING
https://editor.p5js.org/kylemcdonald/sketches/Sy2LCUqnX - NOT WORKING
https://editor.p5js.org/jeffThompson/sketches/30YhUmgVU
https://editor.p5js.org/jibbx/sketches/6i3HbDy2a
PASO 1: Se seleccionan papeles con los colores primarios como muestra de color.
PASO 2: Luego se realizan paletas de colores digitales en ilustrator para subirlo a la plataforma teachable machine y tener una mayor gama de tonos.
PASO 3: Se suben los archivos recopilados y parte el entrenamiento.
// Variable (Iniciamos con ese valor: Screen1) var mode = 1;
// Classifier Variable let classifier;
// Model URL let imageModelURL = “./my_model/”;
// Variable de tiempo let t = 0;
// Asignamos colores para cada etiqueta (label) let colors = { ROJO: “red”, AMARILLO: “yellow”, AZUL: “blue”, };
// Declaramos variable label let label = “”;
// let space = { // ‘ROJO’: 15, // ‘AMARILLO’: 20, // ‘AZUL’: 25, //};
// Agregar Video let video; let flippedVideo;
// Cargamos el modelo entrenado en Teachable Machine function preload() { classifier = ml5.imageClassifier(imageModelURL + “model.json”); }
function setup() { createCanvas(windowWidth, windowHeight); // Create the video video = createCapture(VIDEO); video.size(windowWidth / 2, windowHeight / 2); video.hide(); noStroke();
// Comienza classifying classifyVideo(); }
function draw() { // Codigo que permite intercambiar entre dos modos (dos pantallas) if (mode == 0) { screen1(); } else if (mode == 1) { screen2(); }
// Codigo de lo que se muestra en screen1 function screen1() { background(0); // Draw the video imageMode(CENTER); image(video, windowWidth / 2, windowHeight / 2);
// Escribir label en pantalla (Nombre del color)
fill(0);
textSize(32);
textAlign(CENTER);
text(label, windowWidth / 2, windowHeight / 3); }
// Codigo de lo que se muestra en screen2 function screen2() { background(0, 10); // translucent background (creates trails)
// Determinar el color según la etiqueta
let currentColor = colors[label] || "white"; // Color predeterminado a blanco si no hay etiqueta válida
// let currentCurve = space[label] || 15;
// crear una grilla de círculos de x & y
for (let x = 0; x <= width; x += 30) {
for (let y = 0; y <= height; y += 30) {
const xAngle = map(45, 0, width, -4 * PI, 4 * PI, true);
const yAngle = map(90, height, -4 * PI, 4 * PI, true);
const angle = xAngle * (x / width) + yAngle * (y / height);
const myX = x + 20 * cos(2 * PI * t + angle);
const myY = y + 20 * sin(2 * PI * t + angle);
// Cambiar el color de relleno
fill(currentColor);
// Dibujar círculo
ellipse(myX, myY, 10);
}
}
// Actualizar tiempo
t += 0.01; } }
// Recibir predicción para imagen de video function classifyVideo() { flippedVideo = ml5.flipImage(video); classifier.classify(flippedVideo, gotResult); flippedVideo.remove(); }
// Cuando recibimos resultado function gotResult(error, results) { // Si hay un error if (error) { console.error(error); return; } // Resultados son ordenados por orden de confianza label = results[0].label;
classifyVideo(); }
// Función para cambiar de pantallas al apretar el teclado function keyPressed() { mode = mode + 1; if (mode == 2) { mode = 0;
Durante el desarrollo del proyecto, identificamos una posible aplicación profesional muy interesante. Este sistema podría utilizarse de manera interactiva en eventos de moda, especialmente en pasarelas. La idea es que la máquina detecte los colores de las prendas que llevan los modelos y, en tiempo real, estos colores se proyecten en las visuales del evento.
Por otro lado se podría experimentar con el sonido haciendo que por ejemplo una canción se represente como imagen stereo para acompañar este tipo de eventos.