import streamlit as st import os from werkzeug.utils import secure_filename import cv2 import numpy as np from tensorflow.keras.models import load_model from tensorflow.keras.preprocessing import image # Load the trained model model = load_model("Bone_fracture_classifier_model.h5") # Function to check if the file extension is allowed def allowed_file(filename): return '.' in filename and filename.rsplit('.', 1)[1].lower() in {'jpg', 'jpeg', 'png'} # Function to preprocess the image def preprocess_image(file_path): img = image.load_img(file_path, target_size=(200, 200)) img_array = image.img_to_array(img) img_array = np.expand_dims(img_array, axis=0) img_array /= 255.0 # Normalize the image return img_array def main(): st.title("Bone Fracture Detection App") uploaded_file = st.file_uploader("Choose an image...", type=["jpg", "jpeg", "png"]) if uploaded_file is not None: # Check if the file extension is allowed if allowed_file(uploaded_file.name): # Display the selected image st.image(uploaded_file, caption="Uploaded Image", use_column_width=True) # Save the uploaded image temporarily temp_image_path = "temp_image.jpg" with open(temp_image_path, "wb") as temp_image: temp_image.write(uploaded_file.read()) # Preprocess the image img_array = preprocess_image(temp_image_path) # Make prediction prediction = model.predict(img_array)[0, 0] result = "Broken" if prediction > 0.5 else "Not Broken" st.write(f"Prediction: {result}") st.write(f"Confidence: {prediction:.2%}") # Remove the temporary image file os.remove(temp_image_path) else: st.warning("Invalid file format. Please upload an image with a valid format (jpg, jpeg, or png).") if __name__ == "__main__": main()