File size: 2,246 Bytes
d92d4c0
31ffbac
f292242
31ffbac
f292242
31ffbac
 
f292242
31ffbac
 
 
 
 
f292242
31ffbac
 
 
 
 
f292242
31ffbac
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f292242
31ffbac
 
 
 
 
 
 
f292242
31ffbac
f292242
31ffbac
 
 
 
 
8d7001b
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
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')

# Preprocessare l'immagine
def preprocess_image(image):
    image = Image.fromarray(image)  # Assumendo che 'image' sia un array numpy
    image = image.resize((64, 64))  # Ridimensionare l'immagine a 64x64
    image_array = np.array(image) / 255.0  # Normalizzare i pixel (da 0 a 1)

    # Verificare la forma dell'immagine preprocessata
    print(f"Image shape after resizing and normalization: {image_array.shape}")
    
    image_array = np.expand_dims(image_array, axis=0)  # Aggiungi una dimensione batch
    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()