FlavioRubensOttaviani's picture
Upload app.py
7c3ddde verified
# -*- coding: utf-8 -*-
"""
Created on Sun Feb 15 16:14:13 2026
@author: ottav
"""
import tensorflow as tf
import numpy as np
import gradio as gr
from PIL import Image
#CARICAMENTO DEL MODELLO
model = tf.keras.models.load_model('modello_guida_autonoma_cifar10.h5')
#FUNZIONE DI CLASSIFICAZIONE
def classifica_immagine(img):
# img arriva già come oggetto PIL grazie a type="pil" in Gradio
# Ridimensiono a 32x32 (la dimensione usata da CIFAR-10)
img = img.resize((32, 32))
# Convertoo in array e normalizziamo (0-1)
img_array = np.array(img).astype('float32') / 255.0
# Aggiungo la dimensione batch: diventa (1, 32, 32, 3)
img_array = np.expand_dims(img_array, axis=0)
# Predizione
prediction = model.predict(img_array)[0]
# prediction[0] = Veicolo, prediction[1] = Animale
return {
"Veicolo": float(prediction[0]),
"Animale": float(prediction[1])
}
#INTERFACCIA GRAFICA
# sito
interface = gr.Interface(
fn=classifica_immagine, # La funzione da usare
inputs=gr.Image(type="pil", label="Carica un'immagine"), # Input immagine
outputs=gr.Label(num_top_classes=2), # Output barre percentuali
title="Autonomous Driving Recognition",
description="Carica una foto (o prendila da Google). La rete neurale deciderà se è un **Veicolo** o un **Animale**.",
# Esempi pronti da cliccare
examples=[["camion.jpg"], ["gatto.jpg"]]
)
# LANCIO DELL'APP
if __name__ == "__main__":
interface.launch()