COVIDPrediction / app.py
segestic's picture
Update app.py
279f468
import subprocess
#port = $PORT
#subprocess.run("uvicorn application.server.main:app --host 0.0.0.0 --port 7860", shell=True)
import streamlit as st
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
#Hide Made with streamlit
st.markdown(
'''<style>
#MainMenu{visibility: hidden;} footer{visibility: hidden;}
#root>div:nth-child(1)>div>div>div>div>section>div{padding-top: .2rem;
</style>''', unsafe_allow_html=True
)
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/resnet_ct.h5'
h5_model = load_model(model_path)
image = cv2.imread(image_file)
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
image = cv2.resize(image, (224, 224))
image = np.array(image) / 255
image = np.expand_dims(image, axis=0)
h5_prediction = h5_model.predict(image)
print('Prediction from h5 model: {}'.format(h5_prediction))
print(h5_prediction)
probability = h5_prediction[0]
print("H5 Predictions:")
print (probability)
if probability[0] > 0.5:
covid_chest_pred = str('%.2f' % (probability[0] * 100) + '% COVID-Positive')
probability = (probability[0] * 100)
else:
covid_chest_pred = str('%.2f' % ((1 - probability[0]) * 100) + '% COVID-Negative')
probability = ((1 - probability[0]) * 100)
return covid_chest_pred
st.title("Covid Prediction App from CT Images")
#taking user inputs
st.write("")
#converting input to json
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)
#image1 = Image.open(image)
#img_array = np.array(image1)
#View Uploaded Image
st.image(load_image(image),width=250)
#save image to disk
saved = save_uploadedfile(image)
#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 Covid 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="βœ…")
#RUN BOTH...
#streamlit run app.py
#uvicorn application.server.main:app
#OPTION 2....