|
|
|
|
|
import io |
|
import numpy as np |
|
from PIL import Image |
|
import streamlit as st |
|
import tensorflow as tf |
|
import matplotlib.pyplot as plt |
|
from tensorflow import keras |
|
|
|
|
|
st.title('Brain \U0001F9E0 Tumor Detector ') |
|
|
|
st.subheader('Find out whether there is a tumor \U0001F534 (Glioma Meningioma Pituarie) in the brain (or) \ |
|
not \U0001F7E2') |
|
|
|
|
|
|
|
|
|
inp_t = st.file_uploader(label='Upload MRI here', accept_multiple_files=True) |
|
|
|
|
|
|
|
def load_img(path): |
|
|
|
img_l = [] |
|
for i in path: |
|
img_byte = i.read() |
|
img = Image.open(io.BytesIO(img_byte)) |
|
img = img.resize((64, 64), Image.ANTIALIAS) |
|
if img.mode != 'L': |
|
img = img.convert('L') |
|
img_arr = np.array(img, dtype='float32')/255 |
|
img_arr = np.expand_dims(img_arr, axis=-1) |
|
img_l.append(img_arr) |
|
img = np.stack(img_l) |
|
return img |
|
|
|
|
|
|
|
|
|
def pred(img): |
|
|
|
model = keras.models.load_model('model2_weights.h5') |
|
result = model.predict(img) |
|
|
|
return result |
|
|
|
|
|
|
|
|
|
if inp_t: |
|
img = load_img(inp_t) |
|
result = ['Glioma', 'Meningioma', 'no tumor', 'Pituarie'] |
|
|
|
st.warning( |
|
'** Uploaded {} images [View images in side Panel]'.format(img.shape[0])) |
|
|
|
res = pred(img) |
|
max_value = res[0][np.argmax(res)]*100 |
|
if (result[np.argmax(res)] == 'no tumor'): |
|
st.subheader("\U0001F7E2 Model predicts there is {} tumor with {:.2f} % confidence].\U0001F7E2".format(result[np.argmax(res)], max_value)) |
|
else: |
|
st.subheader("\U0001F534 Model predicts there is {} tumor with {:.2f} % confidence.\U0001F534 ".format(result[np.argmax(res)], max_value)) |
|
|
|
|
|
st.write('\n') |
|
|
|
st.image(inp_t, width = 400) |
|
|
|
|
|
st.markdown('---') |
|
st.error( |
|
'Dont conclude by looking at predictions, just take them as a reference!!') |
|
|
|
|