ByronSP commited on
Commit
64fa254
verified
1 Parent(s): 4bd0180

Upload 2 files

Browse files
Files changed (2) hide show
  1. app.py +62 -0
  2. requirements.txt +5 -0
app.py ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ from PIL import Image
3
+ import numpy as np
4
+ import tensorflow as tf
5
+ import matplotlib.pyplot as plt
6
+
7
+ # Definir los nombres de las clases de CIFAR-10 (limitado a las 3 clases seleccionadas)
8
+ class_names = ['airplane', 'automobile', 'bird', 'cat', 'deer']
9
+
10
+ # Cargar el modelo preentrenado (aseg煤rate de que est茅 disponible en el Space)
11
+ model = tf.keras.models.load_model('final_model.keras')
12
+
13
+ # Definir las medias y desviaciones est谩ndar para la normalizaci贸n
14
+ mean = np.array([0.4914, 0.4822, 0.4465])
15
+ std = np.array([0.2470, 0.2435, 0.2616])
16
+
17
+ # Funci贸n para cargar y preprocesar la imagen
18
+ def load_and_preprocess_image(image):
19
+ img = Image.open(image) # Abrir la imagen
20
+ img = img.resize((32, 32)) # Redimensionar la imagen a 32x32 p铆xeles
21
+ img = np.array(img) # Convertir la imagen en un array de NumPy
22
+
23
+ # Asegurarse de que la imagen tenga 3 canales (RGB)
24
+ if img.ndim == 2: # Si es una imagen en escala de grises
25
+ img = np.stack([img] * 3, axis=-1)
26
+
27
+ img = img.astype('float32') # Asegurarse de que la imagen sea de tipo float32
28
+ img = (img / 255.0 - mean) / std # Normalizar la imagen
29
+
30
+ # A帽adir una dimensi贸n adicional para representar el batch (1 imagen)
31
+ img = np.expand_dims(img, axis=0)
32
+ return img
33
+
34
+ # Funci贸n para predecir una imagen cargada
35
+ def predict_image(image):
36
+ # Cargar y preprocesar la imagen
37
+ img = load_and_preprocess_image(image)
38
+
39
+ # Hacer la predicci贸n
40
+ prediction = model.predict(img)
41
+
42
+ # Obtener las probabilidades de todas las clases
43
+ probabilities = tf.nn.softmax(prediction[0]).numpy()
44
+
45
+ # Crear un diccionario con las probabilidades de cada clase
46
+ results = {class_names[i]: float(probabilities[i]) * 100 for i in range(len(class_names))}
47
+
48
+ # Formatear el resultado como una cadena de texto
49
+ result_str = "\n".join([f"{class_name}: {prob:.2f}%" for class_name, prob in results.items()])
50
+ return result_str
51
+
52
+ # Crear la interfaz de Gradio
53
+ interface = gr.Interface(
54
+ fn=predict_image, # Funci贸n que realiza la predicci贸n
55
+ inputs=gr.Image(type="filepath", label="Sube una imagen"), # Entrada: imagen
56
+ outputs=gr.Textbox(label="Probabilidades"), # Salida: texto con las probabilidades
57
+ title="Clasificador de im谩genes CIFAR-10",
58
+ description="Sube una imagen de un avi贸n, autom贸vil o p谩jaro para ver las probabilidades de cada clase."
59
+ )
60
+
61
+ # Lanzar la aplicaci贸n
62
+ interface.launch()
requirements.txt ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ tensorflow
2
+ gradio
3
+ numpy
4
+ Pillow
5
+ matplotlib