File size: 2,398 Bytes
64fa254
 
 
 
 
 
58b3da5
64fa254
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
491ae87
64fa254
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import gradio as gr
from PIL import Image
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt

# Definir los nombres de las clases de CIFAR-10 
class_names = ['airplane', 'automobile', 'bird', 'cat', 'deer']

# Cargar el modelo preentrenado (aseg煤rate de que est茅 disponible en el Space)
model = tf.keras.models.load_model('final_model.keras')

# Definir las medias y desviaciones est谩ndar para la normalizaci贸n
mean = np.array([0.4914, 0.4822, 0.4465])
std = np.array([0.2470, 0.2435, 0.2616])

# Funci贸n para cargar y preprocesar la imagen
def load_and_preprocess_image(image):
    img = Image.open(image)  # Abrir la imagen
    img = img.resize((32, 32))  # Redimensionar la imagen a 32x32 p铆xeles
    img = np.array(img)  # Convertir la imagen en un array de NumPy

    # Asegurarse de que la imagen tenga 3 canales (RGB)
    if img.ndim == 2:  # Si es una imagen en escala de grises
        img = np.stack([img] * 3, axis=-1)

    img = img.astype('float32')  # Asegurarse de que la imagen sea de tipo float32
    img = (img / 255.0 - mean) / std  # Normalizar la imagen

    # A帽adir una dimensi贸n adicional para representar el batch (1 imagen)
    img = np.expand_dims(img, axis=0)
    return img

# Funci贸n para predecir una imagen cargada
def predict_image(image):
    # Cargar y preprocesar la imagen
    img = load_and_preprocess_image(image)

    # Hacer la predicci贸n
    prediction = model.predict(img)

    # Obtener las probabilidades de todas las clases
    probabilities = tf.nn.softmax(prediction[0]).numpy()

    # Crear un diccionario con las probabilidades de cada clase
    results = {class_names[i]: float(probabilities[i]) * 100 for i in range(len(class_names))}

    # Formatear el resultado como una cadena de texto
    result_str = "\n".join([f"{class_name}: {prob:.2f}%" for class_name, prob in results.items()])
    return result_str

# Crear la interfaz de Gradio
interface = gr.Interface(
    fn=predict_image,  # Funci贸n que realiza la predicci贸n
    inputs=gr.Image(type="filepath", label="Sube una imagen"),  # Entrada: imagen
    outputs=gr.Textbox(label="Probabilidades"),  # Salida: texto con las probabilidades
    title="Clasificador de im谩genes CIFAR-10",
    description="Sube una imagen de un avion, vehiculo, pajaro, gato, cirvo para ver las probabilidades de cada clase."
)

# Lanzar la aplicaci贸n
interface.launch()