brain-mri / case_study_deploy.py
harshnandwana's picture
firdt
2b3cb99
Raw
History Blame Contribute Delete
2.53 kB
import tensorflow as tf
from tensorflow.keras.models import load_model
import warnings
warnings.filterwarnings("ignore")
import matplotlib.pyplot as plt
import streamlit as st
import cv2
import numpy as np
import pandas as pd
import base64
import imgaug.augmenters as iaa
aug = iaa.Sharpen(alpha=(1.0), lightness=(1.5))
from st_clickable_images import clickable_images
st.title('Brain MR Image segmentation ')
data_load_state = st.text('Loading data...')
gdown --id 1UQIRoLzDCM2vAp0fiQwwuhDXVocPrGXd
unet=load_model('unet.h5',compile=False)
data_load_state.text('Loading data...done!')
st.subheader('Select a image in which you wish to detect tumor')
#=============================================================================
def plot_final(Data,return_image=False):
image1=cv2.imread(Data)
image = aug.augment_image(image1)
image=image[:,:,1]
image[image <0.2]=0.5
image = image / 255
predicted = unet.predict(image[np.newaxis,:,:])
predicted[predicted <0.25]=0
img = predicted[0,:,:,0]
mean,std=cv2.meanStdDev(img)
pixels = cv2.countNonZero(img)
image_area = img.shape[0] * img.shape[1]
area_ratio = (pixels / image_area) * 100
img = img*255
img[img<1]=1
img[img>100]=255
M= cv2.moments(img)
cX = int(M["m10"] / M["m00"])
cY = int(M["m01"] / M["m00"])
if return_image:
return img,area_ratio,std,(cX,cY)
else:
return area_ratio,std,(cX,cY)
#===========================================================================
images = []
for file in ["1.jpeg", "2.jpeg","3.jpeg", "4.jpeg", "5.jpeg"]:
with open(file, "rb") as image:
encoded = base64.b64encode(image.read()).decode()
images.append(f"data:image/jpeg;base64,{encoded}")
clicked = clickable_images(
images,
titles=[f"Image #{str(i)}" for i in range(2)],
div_style={"display": "flex", "justify-content": "center", "flex-wrap": "wrap"},
img_style={"margin": "5px", "height": "200px"},
)
#===========================================================================
if clicked>-1:
mask,area,std,coordinates = plot_final(str(clicked)+".tif",return_image=True)
fig = plt.figure()
plt.imshow(cv2.imread(str(clicked)+".tif"))
plt.imshow(mask,alpha=0.4,cmap='gray')
if area==0.0:
plt.title("No tumor detected", fontsize=20)
else:
plt.title("Area={} \n STD={} \n Centroid={}".format(area,std,(coordinates[0],coordinates[1])))
plt.xticks([])
plt.yticks([])
st.pyplot(fig)
else:
st.markdown("No Image selected")