import gradio as gr import tensorflow as tf import numpy as np from tensorflow.keras.preprocessing import image from PIL import Image # Load the trained model model = tf.keras.models.load_model("my_keras_model.h5") # Define image size based on the model's input requirement image_size = (224, 224) # Function to make predictions def predict_image(img): img = img.resize(image_size) # Resize image to model's expected size img_array = image.img_to_array(img) img_array = np.expand_dims(img_array, axis=0) / 255.0 # Normalize prediction = model.predict(img_array) # Assuming binary classification (fractured or normal) class_names = ['Fractured', 'Normal'] predicted_class = class_names[int(prediction[0] > 0.5)] # Threshold at 0.5 return f"Prediction: {predicted_class} (Confidence: {prediction[0][0]:.2f})" # Preloaded images for testing sample_images = [ ("fracture1.jpg", "Fractured Example"), ("fracture2.jpg", "Fractured Example"), ("normal1.jpg", "Normal Example"), ("normal2.jpg", "Normal Example"), ] # Define Gradio Interface interface = gr.Interface( fn=predict_image, inputs=gr.Image(type="pil"), outputs=gr.Textbox(), examples=sample_images, # Preloaded images for testing title="Bone Fracture Detection", description="""
This AI model predicts whether a given X-ray image shows a fracture or not.
Upload an image or select from the provided samples to get a prediction.
""", ) # Launch the Gradio app if __name__ == "__main__": interface.launch()