import gradio as gr import tensorflow as tf from tensorflow.keras.applications import ResNet152, preprocess_input, decode_predictions from tensorflow.keras.preprocessing.image import img_to_array from PIL import Image import numpy as np # Load the pre-trained ResNet152 model MODEL_PATH = "resnet152-image-classifier.h5" # Directory where the model is saved model = tf.keras.models.load_model(MODEL_PATH) def predict_image(image): """ This function processes the uploaded image and returns the top 3 predictions. """ # Preprocess the image image = image.resize((224, 224)) # ResNet152 expects 224x224 input image_array = img_to_array(image) image_array = preprocess_input(image_array) # Normalize the image image_array = np.expand_dims(image_array, axis=0) # Add batch dimension # Get predictions predictions = model.predict(image_array) decoded_predictions = decode_predictions(predictions, top=3)[0] # Format predictions as a dictionary results = {label: f"{confidence * 100:.2f}%" for _, label, confidence in decoded_predictions} return results # Create the Gradio interface interface = gr.Interface( fn=predict_image, inputs=gr.Image(type="pil"), # Accepts an image input outputs=gr.Label(num_top_classes=3), # Shows top 3 predictions with confidence title="ResNet152 Image Classifier", description="Upload an image, and the model will predict what's in the image.", examples=["dog.jpg", "cat.jpg"], # Example images for users to test ) # Launch the Gradio app if __name__ == "__main__": interface.launch()