No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Demos para clasificación de imágenes con Gradio

4/16
Recursos

Aportes 14

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Este es el código que a mi me funciono (dic 2023) con python 3.11 `import gradio as gr` `import tensorflow as tf` `import requests` `from numpy import asarray ` `inception_net = tf.keras.applications.MobileNetV2()` `response = requests.get("https://git.io/JJkYN")` `labels = response.text.split("\n")` `def classify_image(inp):` ` inp = asarray(inp.resize((224, 224)))` ` inp = inp.reshape((-1,) + inp.shape)` ` inp = tf.keras.applications.mobilenet_v2.preprocess_input(inp)` ` prediction = inception_net.predict(inp).flatten()` ` confidences = {labels[k]: float(prediction[k]) for k in range(1000)}` ` return confidences` `demo = gr.Interface(fn=classify_image, inputs=gr.Image(type='pil'), outputs=gr.Label(num_top_classes=3))` `demo.launch()`

Hola, chicos! dos cosas, usen python version inferior al 3.11, yo use 3.9 y no hubo lios(en dic-2022), lo segundo si no les corre gradio en el colab solo coloquen share=True en el launch

demo.launch(share=True)
```js import tensorflow as tf import gradio as gr import requests import numpy as np from PIL import Image from tensorflow.keras.applications.inception_v3 import decode_predictions # Cargar modelo preentrenado inception_net = tf.keras.applications.InceptionV3(weights='imagenet') # Descargar etiquetas response = requests.get("https://git.io/JJkYN") labels = response.text.split("\n") def clasifica_imagen(imagen): # Convertir el array a imagen PIL imagen = Image.fromarray(np.uint8(imagen)) # Redimensionar la imagen a 299x299 imagen = imagen.resize((299, 299)) # Convertir la imagen a un array de NumPy imagen = np.array(imagen) # Asegurarse de que la imagen tiene 3 canales if imagen.ndim == 2: imagen = np.stack([imagen] * 3, axis=-1) # Preprocesar la imagen para el modelo imagen = tf.image.convert_image_dtype(imagen, dtype=tf.float32) imagen = tf.keras.applications.inception_v3.preprocess_input(imagen) # Añadir una dimensión batch imagen = tf.expand_dims(imagen, axis=0) # Realizar la predicción predicciones = inception_net.predict(imagen) confidences = decode_predictions(predicciones, top=3)[0] return {etiqueta: float(confianza) for (_, etiqueta, confianza) in confidences} # Crear la interfaz de Gradio demo = gr.Interface(fn=clasifica_imagen, inputs=gr.Image(), outputs=gr.Label(num_top_classes=3)) demo.launch(debug=True) ```import tensorflow as tfimport gradio as grimport requestsimport numpy as npfrom PIL import Imagefrom tensorflow.keras.applications.inception\_v3 import decode\_predictions \# Cargar modelo preentrenadoinception\_net = tf.keras.applications.InceptionV3(weights='imagenet') \# Descargar etiquetasresponse = requests.get("https://git.io/JJkYN")labels = response.text.split("\n") def clasifica\_imagen(imagen):    # Convertir el array a imagen PIL    imagen = Image.fromarray(np.uint8(imagen))        # Redimensionar la imagen a 299x299    imagen = imagen.resize((299, 299))        # Convertir la imagen a un array de NumPy    imagen = np.array(imagen)        # Asegurarse de que la imagen tiene 3 canales    if imagen.ndim == 2:        imagen = np.stack(\[imagen] \* 3, axis=-1)        # Preprocesar la imagen para el modelo    imagen = tf.image.convert\_image\_dtype(imagen, dtype=tf.float32)    imagen = tf.keras.applications.inception\_v3.preprocess\_input(imagen)        # Añadir una dimensión batch    imagen = tf.expand\_dims(imagen, axis=0)        # Realizar la predicción    predicciones = inception\_net.predict(imagen)    confidences = decode\_predictions(predicciones, top=3)\[0]        return {etiqueta: float(confianza) for (\_, etiqueta, confianza) in confidences} \# Crear la interfaz de Gradiodemo = gr.Interface(fn=clasifica\_imagen, inputs=gr.Image(), outputs=gr.Label(num\_top\_classes=3))demo.launch(debug=True)

La liga con las etiquetas no esta funcionando, en su lugar use:

def classify_imagen(inp):
  inp = inp.reshape((-1, 224, 224, 3))
  inp = tf.keras.applications.mobilenet_v2.preprocess_input(inp)
  # Modificacion en reshape, para que funcione con decode_predictions
  prediction = inception_net.predict(inp).reshape(1,1000)
  # Nuevo metodo para etiquetar predicciones
  pred_labels = tf.keras.applications.mobilenet_v2.decode_predictions(prediction, top=100)
  confidence = {f'{pred_labels[0][i][1]}': float(pred_labels[0][i][2]) for i in range(100)}
  
  return confidence
es la última version: 4.32.0 funciona con este código: ```js gr.load("huggingface/microsoft/swin-tiny-patch4-window7-224").launch(debug=True) ```

Hice la prueba y me arrojo esto:

Importante!! a Dic 2024, shape ya no existe. Pueden usar Height o Width ```js import gradio as gr demo = gr.Interface(fn=clasifica_imagen, inputs = gr.Image(height=400, width=400), outputs = gr.Label(num_top_classes=3)) demo.launch() ```
Ahora que estoy haciendo el curso, encuentro que hay algunas cosas desactualizadas. Dejo aquí los códigos actualizados para los ejemplos de los image\_classifications: Ejemplo 1: `import requestsimport numpy as np` `response = requests.get('https://git.io/JJkYN')labels = response.text.split('\n')` `def image_classification(inp):    inp = tf.image.resize(inp, (224, 224))     inp = tf.keras.applications.mobilenet_v2.preprocess_input(inp.numpy())      inp = np.expand_dims(inp, axis=0)     prediction = inception_net.predict(inp).flatten()      confidences = {labels[i]: float(prediction[i]) for i in range(1000)}    return confidences` `import gradio as gr` `demo = gr.Interface(fn = image_classification,                    inputs=gr.Image(type="numpy"),                    outputs=gr.Label(num_top_classes=3)                    )` `demo.launch()` Ejemplo 2: `from transformers import pipelineimport gradio as gr` `model = pipeline("image-classification", model="microsoft/swin-tiny-patch4-window7-224")` `def classify_image(image):    predictions = model(image)    return {pred["label"]: pred["score"] for pred in predictions}` `title = "Mi primer Demo"description = "Test con Hugging Face y Gradio"` `demo = gr.Interface(    fn=classify_image,    inputs=gr.Image(type="pil", label="Selecciona la imagen"),    outputs=gr.Label(num_top_classes=5),    title=title,    description=description,)` `demo.launch()`
Hola Comunidad. Por favor, su gentil ayuda: import gradio as gr demo = gr.Interface(fn = clasifica\_imagen,                    inputs=gr.Image(shape=(224,224)),                    outputs=gr.Label(num\_top\_classes=3)                    ) demo.launch() Me salió este error: TypeError Traceback (most recent call last) [\<ipython-input-8-9e3da91bb6f7>](https://localhost:8080/#) in \<cell line: 3>() 2 3 demo = gr.Interface(fn = clasifica\_imagen, \----> 4 inputs=gr.Image(shape=(224,224)), 5 outputs=gr.Label(num\_top\_classes=3) 6 ) [/usr/local/lib/python3.10/dist-packages/gradio/component\_meta.py](https://localhost:8080/#) in wrapper(\*args, \*\*kwargs) 153 return None 154 else: \--> 155 return fn(self, \*\*kwargs) 156 157 return wrapper TypeError: Image.\_\_init\_\_() got an unexpected keyword argument 'shape' Muchas gracias.
import tensorflow as tfimport gradio as grimport requestsimport numpy as npfrom PIL import Imagefrom tensorflow.keras.applications.inception\_v3 import decode\_predictions \# Cargar modelo preentrenadoinception\_net = tf.keras.applications.InceptionV3(weights='imagenet') \# Descargar etiquetasresponse = requests.get("https://git.io/JJkYN")labels = response.text.split("\n") def clasifica\_imagen(imagen):    # Convertir el array a imagen PIL    imagen = Image.fromarray(np.uint8(imagen))        # Redimensionar la imagen a 299x299    imagen = imagen.resize((299, 299))        # Convertir la imagen a un array de NumPy    imagen = np.array(imagen)        # Asegurarse de que la imagen tiene 3 canales    if imagen.ndim == 2:        imagen = np.stack(\[imagen] \* 3, axis=-1)        # Preprocesar la imagen para el modelo    imagen = tf.image.convert\_image\_dtype(imagen, dtype=tf.float32)    imagen = tf.keras.applications.inception\_v3.preprocess\_input(imagen)        # Añadir una dimensión batch    imagen = tf.expand\_dims(imagen, axis=0)        # Realizar la predicción    predicciones = inception\_net.predict(imagen)    confidences = decode\_predictions(predicciones, top=3)\[0]        return {etiqueta: float(confianza) for (\_, etiqueta, confianza) in confidences} \# Crear la interfaz de Gradiodemo = gr.Interface(fn=clasifica\_imagen, inputs=gr.Image(), outputs=gr.Label(num\_top\_classes=3))demo.launch(debug=True)
La unica version que me funciona es la 4.15.0, ahorita estamos en la version 4.32.0 pero me da este error: ```js ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() ```
como arreglo este error? ```js Traceback (most recent call last): File "/usr/local/lib/python3.10/dist-packages/gradio/queueing.py", line 521, in process_events response = await route_utils.call_process_api( File "/usr/local/lib/python3.10/dist-packages/gradio/route_utils.py", line 276, in call_process_api output = await app.get_blocks().process_api( File "/usr/local/lib/python3.10/dist-packages/gradio/blocks.py", line 1945, in process_api result = await self.call_function( File "/usr/local/lib/python3.10/dist-packages/gradio/blocks.py", line 1513, in call_function prediction = await anyio.to_thread.run_sync( File "/usr/local/lib/python3.10/dist-packages/anyio/to_thread.py", line 33, in run_sync return await get_asynclib().run_sync_in_worker_thread( File "/usr/local/lib/python3.10/dist-packages/anyio/_backends/_asyncio.py", line 877, in run_sync_in_worker_thread return await future File "/usr/local/lib/python3.10/dist-packages/anyio/_backends/_asyncio.py", line 807, in run result = context.run(func, *args) File "/usr/local/lib/python3.10/dist-packages/gradio/utils.py", line 831, in wrapper response = f(*args, **kwargs) File "/usr/local/lib/python3.10/dist-packages/gradio/external.py", line 371, in query_huggingface_inference_endpoints data = fn(*data) # type: ignore File "/usr/local/lib/python3.10/dist-packages/huggingface_hub/inference/_client.py", line 1021, in image_classification response = self.post(data=image, model=model, task="image-classification") File "/usr/local/lib/python3.10/dist-packages/huggingface_hub/inference/_client.py", line 259, in post response = get_session().post( File "/usr/local/lib/python3.10/dist-packages/requests/sessions.py", line 637, in post return self.request("POST", url, data=data, json=json, **kwargs) File "/usr/local/lib/python3.10/dist-packages/requests/sessions.py", line 568, in request data=data or {}, ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() ```Este es mi código: ```python import gradio as gr titulo = "Mi primer demo con Hugging Face" descripcion = "Este es un demo ejecutado durante la clase" gr.load( "huggingface/microsoft/swin-tiny-patch4-window7-224", inputs=gr.Image(label="Carga una imagen aqui"), title = titulo, description = descripcion ).launch(debug=True) ```Porque como dice @Lina Marcela da error en gr.Interface.load por la version
Si tienen error en gr.Interface.load es porque la version de gradio 4.15.0 tiene algunos cambios. Revisando la documentacion, me funciono quitar la palabra Interface, es decir: ```js import gradio as gr titulo = "Mi primer demo con Hugging Face" descripcion = "Este es un demo ejecutado durante la clase con Platzi." demo1 = gr.load("huggingface/microsoft/swin-tiny-patch4-window7-224", inputs=gr.Image(label="Carga una imagen aquí"), title = titulo, description = descripcion, ).launch() ```![](https://static.platzi.com/media/user_upload/image-5e88d2ce-f3fa-4fc5-aafa-bf760784daed.jpg)
Hola, les dejo el código que me funcionó (enero 2024): Espero les sirva :) ![](https://static.platzi.com/media/user_upload/Captura%20desde%202024-01-10%2006-03-20-aef424b6-8131-4d5e-ae0c-cf333af0db21.jpg) ![](https://static.platzi.com/media/user_upload/Captura%20desde%202024-01-10%2006-05-45-a429e865-7bb5-4239-b6de-af62964c70a2.jpg)