from PIL import Image import numpy as np import gradio as gr from tensorflow.keras.models import load_model # Carica il modello salvato in formato Keras .h5 model = load_model('mio_modello.h5') def preprocess_image(image): image = Image.fromarray(image) image = image.resize((64, 64)) #image_array = np.array(image) / 255.0 image_array = np.expand_dims(image_array, axis=0) return image_array # Classificazione: Definire una funzione per fare la predizione con le percentuali di confidenza def classify_image(image): image_array = preprocess_image(image) # Fare la predizione e prendere la prima riga dei risultati prediction = model.predict(image_array)[0] # Aggiungi un print per vedere le predizioni grezze print(f"Raw model predictions: {prediction}") # Verificare che i valori di prediction siano distribuiti correttamente predicted_class_idx = np.argmax(prediction) # Indice della classe con il punteggio più alto # Classi (Chihuahua o Muffin) class_labels = ['Chihuahua', 'Muffin'] # Verificare quale classe è predetta con il suo punteggio print(f"Predicted class: {class_labels[predicted_class_idx]} with confidence {prediction[predicted_class_idx]}") # Creare un dizionario con le percentuali di confidenza confidence_scores = {class_labels[i]: float(prediction[i]) for i in range(len(class_labels))} return confidence_scores # Restituire le percentuali per ciascuna classe # Definire l'interfaccia di Gradio gr.Interface( fn=classify_image, # Funzione di classificazione inputs=gr.Image(type="numpy"), # Input: immagine in formato numpy outputs=gr.Label(num_top_classes=2), # Output: label con le percentuali per le due classi title="Chihuahua vs Muffin Classifier", description="Carica un'immagine e scopri se è un Chihuahua o un Muffin, con percentuali di confidenza!" ).launch()