import gradio as gr import numpy as np import tensorflow as tf from tensorflow.keras.models import load_model # Image dimensions required by your model img_height, img_width = 180, 180 # 1. Load the model # We use compile=False to avoid errors with optimizers since we are only running predictions. try: model_flower = load_model('model_flower.h5', compile=False) except Exception as e: print(f"Error loading model: {e}") raise class_names = ['daisy', 'dandelion', 'roses', 'sunflowers', 'tulips'] def predict_image(img): if img is None: return None # 2. Resize the image to match the training size img_resized = tf.image.resize(img, (img_height, img_width)) # 3. Add the batch dimension (1, 180, 180, 3) img_array = tf.expand_dims(img_resized, 0) # 4. Predict prediction = model_flower.predict(img_array)[0] # 5. Apply Softmax # Since your model was trained with from_logits=True, the output is raw scores. # We apply softmax to convert them into percentages (0.0 to 1.0). score = tf.nn.softmax(prediction) return {class_names[i]: float(score[i]) for i in range(len(class_names))} # 6. Define the Interface # Note: 'image_mode' is removed in Gradio 4.0+. It defaults to RGB automatically. image = gr.Image(label="Upload Image") label = gr.Label(num_top_classes=5) gr.Interface( fn=predict_image, inputs=image, outputs=label, title="Flower Classification", description="Upload an image to classify it as a daisy, dandelion, rose, sunflower, or tulip." ).launch()