File size: 4,064 Bytes
b7f151e 00635be b7f151e e2ff206 b7f151e d8efe75 b7f151e d01b907 b7f151e 00635be b7f151e |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
import streamlit as st
st.set_page_config(
page_title="Brain Tumor Prediction",
page_icon="🦠",
layout="centered",
initial_sidebar_state="expanded",
menu_items={
'Get Help': 'https://iot.neu.edu.tr',
'Report a bug': "https://iot.neu.edu.tr",
'About': "# This is a Brain Tumor Predition App using *CNN* Deep Learning Technique."
}
)
import json
import requests
from PIL import Image
import os
#option 2
import numpy as np
from tensorflow.keras.models import load_model
import cv2
def load_image(image):
img = Image.open(image)
return img
def save_uploadedfile(uploadedfile):
with open(os.path.join("images/img",uploadedfile.name),"wb") as f:
f.write(uploadedfile.getbuffer())
uploaded_location = os.path.join("images/img",uploadedfile.name)
return uploaded_location#st.success("Saved File:{} to {}".format(uploadedfile.name, uploaded_location))
def image_predict (image_file):
model_path = 'application/models/multi_3_brainTumor89.h5'
h5_model = load_model(model_path)
image = cv2.imread(image_file)
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
image = cv2.resize(image, (512, 512))
image = np.array(image) / 255
image = np.expand_dims(image, axis=0)
h5_prediction = h5_model.predict(image)
answer = np.argmax(h5_prediction)
classes = ['Meningioma tumor', 'Glioma tumor', 'Pituitary tumor']
prediction =classes[int(answer)-1]
print ('Prediction is ', prediction )
print('Prediction from h5 model: {}'.format(prediction))
return prediction
st.title("🦠 Brain Tumor Prediction App from MRI Images")
col1, spacer, col2 = st.columns([6,1,3], gap="medium")
with col1:
image = st.file_uploader("Upload CT Scan", type=["png","jpg","jpeg"])
if image is not None:
# To See details
file_details = {"filename":image.name, "filetype":image.type,
"filesize":image.size}
st.write(file_details)
#View Uploaded Image
st.image(load_image(image),width=160)
#save image to disk
saved = save_uploadedfile(image)
#OPTION 1 - with F-API..
#if st.button ('Analyze'):
#test_file = open(os.path.join("images/img", image.name), "rb")
#response = requests.post('http://127.0.0.1:8000/predict/image', files={'file': test_file })
#prediction = response.json()##json_object["prediction"]
#st.write(prediction)
#st. subheader (f"Response from BrainTumor Analyzer API = {prediction}")
#OPTION 2 - NON API..
if st.button ('Analyze'):
with st.spinner('Analyzing...'):
prediction = image_predict(saved)
#st.write(prediction)
st. subheader (f"Image Prediction = {prediction}")
st.success(f"Image Prediction = {prediction}", icon="✅")
with col2:
#with st.sidebar:
st.write("Developed by AI & IOT Lab https://iot.neu.edu.tr by Olusegun Odewole (oooladeleodewole(at)gmail) ")
#st.header("Sample MRI Image")
st.image( "https://res.cloudinary.com/segestic/image/upload/v1670497190/covid/images/Y99_ntvrog.jpg", width=200, caption='Sample Brain MRI Image')
hide_menu_and_footer_style = """
<style>
#MainMenu {visibility: hidden;}
footer {visibility: hidden;}
footer:after {
content:'AI IOT app';
visibility: visible;
display: block;
position: relative;
#background-color: red;
color: blue;
padding: 5px;
top: 2px;
</style>
"""
st.markdown(hide_menu_and_footer_style, unsafe_allow_html=True)
#streamlit run app.py
#RUN BOTH for F-API...
#uvicorn application.server.main:app
#if __name__ == "__main__":
#import uvicorn
#uvicorn.run("application.server.main:app", host="0.0.0.0", port=8000, reload=False, log_level="debug", workers=1, limit_concurrency=1, limit_max_requests=1)
|