Spaces:
Runtime error
Runtime error
| import gradio as gr | |
| import tensorflow as tf | |
| import numpy as np | |
| from tensorflow.keras.preprocessing import image | |
| from huggingface_hub import hf_hub_download | |
| from tensorflow.keras.applications.inception_v3 import preprocess_input | |
| import plotly.graph_objects as go | |
| # Descarga el modelo a tu máquina local | |
| model_path = hf_hub_download(repo_id="franklc/InceptionV3_72", filename="InceptionV3_72.keras") | |
| # Cargar tu modelo de TensorFlow en formato .keras | |
| model = keras.models.load_model(model_path) | |
| # Etiquetas de clase para el modelo de fitoplancton | |
| class_labels = ['acanthoica', 'akashiwo', 'alexandrium', 'amoeba', 'amphidinium', 'amylax', | |
| 'apedinella', 'asterionellopsis', 'bacillaria', 'bacteriastrum', 'biddulphia', | |
| 'calciopappus', 'cerataulina', 'ceratium', 'chaetoceros', 'chrysochromulina', | |
| 'cochlodinium', 'corethron', 'corymbellus', 'coscinodiscus', 'cryptophyta', | |
| 'cylindrotheca', 'dactyliosolen', 'delphineis', 'dictyocha', 'dinobryon', | |
| 'dinophysis', 'ditylum', 'emiliania', 'ephemera', 'eucampia', 'euglena', | |
| 'gonyaulax', 'guinardia', 'gyrodinium', 'hemiaulus', 'heterocapsa', 'karenia', | |
| 'katodinium', 'kryptoperidinium', 'laboea', 'lauderia', 'leptocylindrus', | |
| 'licmophora', 'nanoneis', 'odontella', 'ophiaster', 'ostreopsis', 'oxytoxum', | |
| 'paralia', 'parvicorbicula', 'phaeocystis', 'pleuronema', 'pleurosigma', | |
| 'polykrikos', 'prorocentrum', 'proterythropsis', 'protoperidinium', 'pseudo-nitzschia', | |
| 'pseudochattonella', 'pyramimonas', 'rhabdolithes', 'rhizosolenia', 'scrippsiella', | |
| 'skeletonema', 'stephanopyxis', 'syracosphaera', 'thalassionema', 'thalassiosira', | |
| 'trichodesmium', 'vicicitus', 'warnowia'] | |
| # Función de clasificación de imágenes | |
| def classify_image(img): | |
| # Preprocesar la imagen | |
| img = img.resize((299, 299)) | |
| img_array = image.img_to_array(img) | |
| img_array = np.expand_dims(img_array, axis=0) | |
| img_array = preprocess_input(img_array) | |
| # Realizar la predicción | |
| predictions = model.predict(img_array)[0] | |
| # Obtener las 10 clases con mayor probabilidad | |
| top_indices = np.argsort(predictions)[-10:][::-1] | |
| top_classes = [class_labels[i] for i in top_indices] | |
| top_probabilities = [predictions[i] * 100 for i in top_indices] | |
| # Crear un gráfico de barras para los resultados | |
| fig = go.Figure(data=go.Bar(x=top_probabilities, y=top_classes, orientation='h', marker=dict(color='skyblue'))) | |
| fig.update_layout( | |
| title="Top 10 Predicciones", | |
| xaxis_title="Probabilidad (%)", | |
| yaxis_title="Género de Fitoplancton", | |
| height=500, | |
| margin=dict(l=150, r=50, b=50, t=50) | |
| ) | |
| # Devolver resultados como texto y gráfico | |
| return {top_classes[i]: f"{top_probabilities[i]:.2f}%" for i in range(10)}, fig | |
| # Configurar la interfaz de Gradio | |
| iface = gr.Interface( | |
| fn=classify_image, | |
| inputs=gr.Image(type="pil"), | |
| outputs=[gr.Label(num_top_classes=10), gr.Plot()], | |
| title="Clasificador de Fitoplancton", | |
| description="Sube una imagen de fitoplancton para identificar los géneros principales.", | |
| ) | |
| iface.launch() | |