|
|
import streamlit as st |
|
|
import numpy as np |
|
|
from PIL import Image |
|
|
from tensorflow.keras.models import load_model |
|
|
import os |
|
|
import time |
|
|
import requests |
|
|
from io import BytesIO |
|
|
|
|
|
|
|
|
@st.cache_resource |
|
|
def load_vgg_model(): |
|
|
return load_model("brain_tumor_vgg16_model.keras") |
|
|
|
|
|
|
|
|
def run_prediction(image_path, model, img_size): |
|
|
|
|
|
progress_bar = st.progress(0) |
|
|
status_text = st.empty() |
|
|
|
|
|
for i in range(100): |
|
|
progress_bar.progress(i + 1) |
|
|
status_text.text(f"Processing... {i+1}%") |
|
|
time.sleep(0.01) |
|
|
|
|
|
|
|
|
try: |
|
|
|
|
|
if isinstance(image_path, str): |
|
|
image = Image.open(image_path).convert("RGB") |
|
|
else: |
|
|
image = Image.open(image_path).convert("RGB") |
|
|
|
|
|
img_array = np.array(image.resize((img_size, img_size))) |
|
|
img_array = np.expand_dims(img_array, axis=0) |
|
|
img_array = img_array / 255.0 |
|
|
|
|
|
prediction = model.predict(img_array) |
|
|
class_predicted = (prediction > 0.5).astype("int32")[0][0] |
|
|
|
|
|
|
|
|
if class_predicted == 1: |
|
|
st.error(f"Prediction: Tumor Detected (Probability: {100*prediction[0][0]:.2f}%)") |
|
|
else: |
|
|
st.success(f"Prediction: No Tumor Detected (Probability: {100*(1 - prediction[0][0]):.2f}%)") |
|
|
except Exception as e: |
|
|
st.error(f"An error occurred during classification: {e}") |
|
|
|
|
|
|
|
|
progress_bar.empty() |
|
|
status_text.empty() |
|
|
|
|
|
|
|
|
st.title("Brain Tumor MRI Classification App") |
|
|
st.write("Upload your own image to get a prediction.") |
|
|
|
|
|
|
|
|
model = load_vgg_model() |
|
|
|
|
|
|
|
|
img_size = 150 |
|
|
|
|
|
|
|
|
st.subheader("Upload Your Own Image") |
|
|
uploaded_file = st.file_uploader("Choose an image...", type=["jpg", "jpeg", "png"]) |
|
|
|
|
|
if uploaded_file is not None: |
|
|
st.image(uploaded_file, caption='Uploaded MRI Scan', use_container_width=True) |
|
|
|
|
|
|
|
|
if st.button("Check for Brain Tumor"): |
|
|
run_prediction(uploaded_file, model, img_size) |
|
|
|