File size: 2,204 Bytes
d92d4c0
31ffbac
f292242
31ffbac
f292242
31ffbac
3ff88ec
f292242
60386d3
31ffbac
60386d3
 
 
 
 
 
 
 
efcf4de
60386d3
 
 
 
 
efcf4de
31ffbac
f292242
60386d3
31ffbac
efcf4de
31ffbac
 
efcf4de
60386d3
31ffbac
60386d3
31ffbac
 
60386d3
efcf4de
31ffbac
 
 
60386d3
 
31ffbac
 
60386d3
31ffbac
 
f38c6aa
f292242
60386d3
f292242
31ffbac
 
60386d3
31ffbac
 
8d7001b
efcf4de
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
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 in modo consistente con l'addestramento
def preprocess_image(image):
    # Convertire l'immagine in formato PIL se non lo è già
    image = Image.fromarray(image)  
    
    # Converti in RGB per evitare problemi di canali
    image = image.convert("RGB")
    
    # Ridimensiona l'immagine
    image = image.resize((64, 64))

    # Converti l'immagine in array NumPy e normalizza
    image_array = np.array(image) / 255.0  # Normalizza i pixel tra 0 e 1
    
    # Aggiungi una dimensione batch
    image_array = np.expand_dims(image_array, axis=0)  # (1, 64, 64, 3)
    
    return image_array

# Funzione di classificazione con stampa delle predizioni
def classify_image(image):
    # Preprocessare l'immagine
    image_array = preprocess_image(image)
    
    # Fare la predizione
    prediction = model.predict(image_array)[0]  # Prendi la prima riga della predizione
    
    # Verificare le predizioni grezze
    print(f"Raw model predictions: {prediction}")
    
    # Trova l'indice della classe con il punteggio più alto
    predicted_class_idx = np.argmax(prediction)
    
    # Classi (Chihuahua o Muffin)
    class_labels = ['Chihuahua', 'Muffin']
    
    # Stampa per verificare la classe e la confidenza
    print(f"Predicted class: {class_labels[predicted_class_idx]} with confidence {prediction[predicted_class_idx]}")
    
    # Restituisci le percentuali di confidenza per ciascuna classe
    confidence_scores = {class_labels[i]: float(prediction[i]) for i in range(len(class_labels))}
    
    return class_labels[predicted_class_idx]

# 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 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()