| | import streamlit as st |
| | import numpy as np |
| | import cv2 |
| | import tensorflow as tf |
| | from PIL import Image |
| | from sklearn.preprocessing import LabelEncoder |
| |
|
| | |
| | model = tf.keras.models.load_model('brain_tumor_model.h5') |
| |
|
| | |
| | class_labels = ['glioma', 'pituitary', 'meningioma', 'healthy'] |
| | label_encoder = LabelEncoder() |
| | label_encoder.fit(class_labels) |
| |
|
| | |
| | def load_and_preprocess_image(uploaded_file): |
| | img = Image.open(uploaded_file) |
| | img = img.convert("RGB") |
| | img = np.array(img) |
| | img = cv2.resize(img, (224, 224)) |
| | img = img / 255.0 |
| | img = np.reshape(img, (1, 224, 224, 3)) |
| | return img |
| |
|
| | |
| | def predict_image(img): |
| | predictions = model.predict(img) |
| | predicted_class_index = np.argmax(predictions[0]) |
| | return predicted_class_index |
| |
|
| | |
| | def get_class_label(predicted_class_index): |
| | return label_encoder.inverse_transform([predicted_class_index])[0] |
| |
|
| | |
| | st.title("Brain Tumor using CNN 🧠") |
| | st.write("Upload a brain scan (JPG format), and the model will predict its class.") |
| |
|
| | |
| | uploaded_file = st.file_uploader("Choose a JPG image...", type="jpg") |
| |
|
| | if uploaded_file is not None: |
| | |
| | col1, col2 = st.columns([2, 1]) |
| |
|
| | with col1: |
| | st.image(uploaded_file, caption="Uploaded Image", use_column_width=True) |
| | |
| | with col2: |
| | |
| | if st.button("Detect"): |
| | st.write("Detecting...") |
| | |
| | processed_image = load_and_preprocess_image(uploaded_file) |
| | |
| | |
| | predicted_class_index = predict_image(processed_image) |
| | |
| | |
| | predicted_class_label = get_class_label(predicted_class_index) |
| | |
| | |
| | st.markdown(f"<h3 style='color: #4CAF50; text-align: center;'>The Prediction is : <strong>{predicted_class_label}</strong></h3>", unsafe_allow_html=True) |
| |
|
| |
|