Uso de MobileNet y TensorFlow JS para Clasificación de Imágenes
Clase 19 de 21 • Curso de TensorFlow.js
Contenido del curso
Clase 19 de 21 • Curso de TensorFlow.js
Contenido del curso
Alejandro Santamaria
Sergio Correa Lopez
Javier Fuentes Mora
Javier Fuentes Mora
Enmanuel Castillo
Marcos Plata
Mateo Aquino
Alejandro Santamaria
Daniel Méndez Amutari
FELIX DAVID CORDOVA GARCIA
Alejandro Santamaria
Javier Fuentes Mora
Alejandro Santamaria
Kengya Moncada
Kengya Moncada
José Luis Marrugo Madrid
José Luis Marrugo Madrid
archivo index_imagen.html
<!DOCTYPE html> <html lang="es"> <head> <meta charset="UTF-8"> <title> Modelo Regresion </title> <!-- Importar TensorFlow.js --> <script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs"></script> <script src="https://cdn.jsdelivr.net/npm/@tensorflow-models/mobilenet"></script> </head> <body> <img id="img" crossorigin src="https://i.imgur.com/JlUvsxa.jpg" width="227" heigh="227"> <div id="descripcion_imagen"></div> <button onclick="cambiarImagen();">Cambiar imagen</button> <!-- Importar el archivo principal --> <script src="scripts.js"></script> </body> </html>
luego aqui esta el archivo scripts.js
let net; const imgEl = document.getElementById('img'); const descEl = document.getElementById('descripcion_imagen'); async function app(){ net = await mobilenet.load(); var result = await net.classify(imgEl); console.log(result); displayImagePrediction(); } imgEl.onload = async function(){ displayImagePrediction(); } async function displayImagePrediction(){ try{ result = await net.classify(imgEl); descEl.innerHTML = JSON.stringify(result); }catch(error){ } }; count = 0; async function cambiarImagen(){ count = count + 1 imgEl.src = "https://picsum.photos/200/300?random=" + count; } app();
Mi pregunta es como funciono count si ni siquiera lo definio ¡? jaja
Aqui otra manera de escribir el codigo usando ECMA6 y quitando unas cosas que no se usan
let net; const imgEl = document.getElementById('img') const descripcion = document.getElementById('descripcion_imagen') const app = async () => { net = await mobilenet.load() displayImagePrediction() } imgEl.onload = async () => { displayImagePrediction() } const cambiarImagen = async ()=>{ let count = 0; count++ imgEl.src = 'https://picsum.photos/200/300?random=' + count } const displayImagePrediction = async () => { try { const result = await net.classify(imgEl) console.log(result) descripcion.innerHTML = JSON.stringify(result) } catch (error) { console.log(error) } } app()
Esta clase me gustó muchísimo, creo que voy entendiendo un poco más sobre el curso y respecto a mi comentario anterior de que estaba perdido, al parecer era yo mismo, creo que he venido tomando las clases con la energía errónea y eso ha generado que no entienda muy bien al profesor. Gracias por leerme :3
Muy buena clase, y en mi opinión, esto es lo mas útil de tensorflow.js, es decir, utilizar modelos entrenados en ambientes mas controlados o con mas recursos (python, nodejs), para poder consumirlos en el navegador y ofrecerle al usuario experiencias increíbles basadas en inteligencia artificial.
Es posible generar transferencia de conocimiento con mi google fotos para que logre detectar a familia, amigos y a mí?
Si es posible pero identificar personas tiene varios retos que debes resolver de manera incremental, por ejemplo, si quisieras hacer un ejemplo tan sencillo como el que hicimos, tendrías que asegurarte de que las fotos siempre fueran de una sola persona, de otra manera tendrías que utilizar antes un modelo de detección de caras y encima de ese probar el de transferencia de conocimiento que vimos aquí. En general para la identificación de personas hay modelos más avanzados que pueden detectar primero las caras, luego obtener la orientación aproximada de la cara (hacia dónde está volteando) y en base a ello generan un vector que después puede compararse mucho con el que usamos con el knnClassifier y que te dirá a cuál de las etiquetas que inicialmente usaste para el entrenamiento corresponde cada cara. Esos modelos son especializados y pueden generar vectores mucho más precisos que el que obtenemos con Mobilenet (el modelo que estamos usando para transferencia del conocimiento), ya que mobilenet permite clasificar objetos en general, te dejo un artículo donde describen el proceso completo de manera sencilla, parte de lo que usan es una red neuronal convolucional que puede mapear cualquier rostro con un vector y después aplicarle un algoritmo de búsqueda (en el artículo mencionan el SVM). Pero el principio es muy parecido al que utilizamos sin embargo escala de manera más sencilla (puede manejara y distinguir diferencias más sutiles entre unas imágenes y otras)
alguien conoce un proyecto para el reconocimiento de lenguaje de señas, quiero hacer uno y busque en internet pero tengo problemas con el codigo que descargue
Me parece que en el nuevo curso Profesional de TensorFlow hay un proyecto de ese tema
échale un ojo a este repo en github: https://github.com/syauqy/handsign-tensorflow-gatsby
a alguien mas le sale que no encuentra la libreria ? de tensorflow ??
DevTools failed to load SourceMap: Could not load content for https://cdn.jsdelivr.net/npm/@tensorflow/tf.min.js.map: HTTP error: status code 404, net::ERR_HTTP_RESPONSE_CODE_FAILURE
:O lo acabo de probar pero no me sale el error, me puedes platicar un poco sobre el entorno donde lo estás corriendo y quizás mandarme un screenshot? Te dejo mi dirección de correo: alexsmx+platzi@gmail.com
Saludos!
y para los que le da error con la primera carga de la imagen o sea que no se muestra sino despues del click coloqué esto: <img id="img" crossorigin src="https://picsum.photos/200/300" width="227" height="227">```js <img id="img" crossorigin src="https://picsum.photos/200/300" width="227" height="227">
Hola Gente!!!
Hice el ejercicio guiado del profesor pero persistia un problema con el net y classify. investigué mi codigo quedó asi.
let imgEl = document.getElementById("img"); let descEl = document.getElementById("descripcion_imagen"); async function app() { try { console.log("Loading Model..."); const net = await mobilenet.load(); console.log(net, "Modelo cargado correctamente"); imgEl.onload = async function () { const result = await net.classify(imgEl); displayImagePrediction(result); }; if (imgEl.complete) { const result = await net.classify(imgEl); displayImagePrediction(result); } } catch (err) { console.error("Error al cargar el modelo:", err); } } async function displayImagePrediction(result) { if (result) { descEl.innerHTML = JSON.stringify(result, null, 2); console.log(result); } else { console.log( "El modelo no se cargó o el método classify no está disponible" ); } } let count = 0; async function cambiarImagen() { count = count + 1; imgEl.src = "https://picsum.photos/200/300?random=" + count; } app();
Creo que en este no se está aplicando el transfer learning, estamos es probando la MobileNet. Para el transferLearning debemos reentrenar la ultima capa de clasificación. De todas formas muy sencilla y rápida la implementación.
En la clase siguiente lo explican Xd