valanga commited on
Commit
60386d3
·
verified ·
1 Parent(s): efcf4de

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +24 -23
app.py CHANGED
@@ -1,59 +1,60 @@
1
  from PIL import Image
2
  import numpy as np
3
- import os
4
  import gradio as gr
5
  from tensorflow.keras.models import load_model
6
 
7
  # Carica il modello salvato in formato Keras .h5
8
  model = load_model('mio_modello.h5')
9
 
10
- # Definire la dimensione target delle immagini (coerente con il training)
11
- target_size = (64, 64)
12
-
13
- # Preprocessare l'immagine come fatto con ImageDataGenerator
14
  def preprocess_image(image):
15
- # Convertire l'immagine in RGB e ridimensionare
16
- image = Image.fromarray(image).convert("RGB")
17
- image = image.resize(target_size, Image.NEAREST)
18
-
19
- # Convertire l'immagine in array numpy e normalizzare
20
- image_array = np.array(image) / 255.0 # Normalizzazione tra 0 e 1
 
 
21
 
22
- # Espandere la dimensione per aggiungere la dimensione del batch
23
- image_array = np.expand_dims(image_array, axis=0)
 
 
 
24
 
25
  return image_array
26
 
27
- # Classificazione: Definire una funzione per fare la predizione con le percentuali di confidenza
28
  def classify_image(image):
29
  # Preprocessare l'immagine
30
  image_array = preprocess_image(image)
31
 
32
  # Fare la predizione
33
- prediction = model.predict(image_array)[0]
34
 
35
- # Aggiungi un print per vedere le predizioni grezze
36
  print(f"Raw model predictions: {prediction}")
37
 
38
- # Indice della classe con il punteggio più alto
39
  predicted_class_idx = np.argmax(prediction)
40
 
41
  # Classi (Chihuahua o Muffin)
42
  class_labels = ['Chihuahua', 'Muffin']
43
-
44
- # Verificare la classe predetta con il suo punteggio
45
  print(f"Predicted class: {class_labels[predicted_class_idx]} with confidence {prediction[predicted_class_idx]}")
46
 
47
- # Creare un dizionario con le percentuali di confidenza
48
  confidence_scores = {class_labels[i]: float(prediction[i]) for i in range(len(class_labels))}
49
 
50
- return confidence_scores # Restituire le percentuali per ciascuna classe
51
 
52
- # Definire l'interfaccia di Gradio
53
  gr.Interface(
54
  fn=classify_image, # Funzione di classificazione
55
  inputs=gr.Image(type="numpy"), # Input: immagine in formato numpy
56
- outputs=gr.Label(num_top_classes=2), # Output: label con le percentuali per le due classi
57
  title="Chihuahua vs Muffin Classifier",
58
  description="Carica un'immagine e scopri se è un Chihuahua o un Muffin, con percentuali di confidenza!"
59
  ).launch()
 
1
  from PIL import Image
2
  import numpy as np
 
3
  import gradio as gr
4
  from tensorflow.keras.models import load_model
5
 
6
  # Carica il modello salvato in formato Keras .h5
7
  model = load_model('mio_modello.h5')
8
 
9
+ # Preprocessare l'immagine in modo consistente con l'addestramento
 
 
 
10
  def preprocess_image(image):
11
+ # Convertire l'immagine in formato PIL se non lo è già
12
+ image = Image.fromarray(image)
13
+
14
+ # Converti in RGB per evitare problemi di canali
15
+ image = image.convert("RGB")
16
+
17
+ # Ridimensiona l'immagine
18
+ image = image.resize((64, 64))
19
 
20
+ # Converti l'immagine in array NumPy e normalizza
21
+ image_array = np.array(image) / 255.0 # Normalizza i pixel tra 0 e 1
22
+
23
+ # Aggiungi una dimensione batch
24
+ image_array = np.expand_dims(image_array, axis=0) # (1, 64, 64, 3)
25
 
26
  return image_array
27
 
28
+ # Funzione di classificazione con stampa delle predizioni
29
  def classify_image(image):
30
  # Preprocessare l'immagine
31
  image_array = preprocess_image(image)
32
 
33
  # Fare la predizione
34
+ prediction = model.predict(image_array)[0] # Prendi la prima riga della predizione
35
 
36
+ # Verificare le predizioni grezze
37
  print(f"Raw model predictions: {prediction}")
38
 
39
+ # Trova l'indice della classe con il punteggio più alto
40
  predicted_class_idx = np.argmax(prediction)
41
 
42
  # Classi (Chihuahua o Muffin)
43
  class_labels = ['Chihuahua', 'Muffin']
44
+
45
+ # Stampa per verificare la classe e la confidenza
46
  print(f"Predicted class: {class_labels[predicted_class_idx]} with confidence {prediction[predicted_class_idx]}")
47
 
48
+ # Restituisci le percentuali di confidenza per ciascuna classe
49
  confidence_scores = {class_labels[i]: float(prediction[i]) for i in range(len(class_labels))}
50
 
51
+ return predicted_class_idx
52
 
53
+ # Interfaccia di Gradio
54
  gr.Interface(
55
  fn=classify_image, # Funzione di classificazione
56
  inputs=gr.Image(type="numpy"), # Input: immagine in formato numpy
57
+ outputs=gr.Label(num_top_classes=2), # Output: label con percentuali per le due classi
58
  title="Chihuahua vs Muffin Classifier",
59
  description="Carica un'immagine e scopri se è un Chihuahua o un Muffin, con percentuali di confidenza!"
60
  ).launch()