#-----Make all the Necessary imports----- from fastai.vision import * from fastai.imports import * from fastai.learner import * from fastai.vision.all import * import streamlit as st import numpy as np import matplotlib.image as mpimg import os import time from PIL import Image import requests from io import BytesIO import pathlib # st.set_page_config(layout="wide") #for windows deployment # temp = pathlib.PosixPath # pathlib.PosixPath = pathlib.WindowsPath #For linux deployment plt = platform.system() if plt == 'Linux': pathlib.WindowsPath = pathlib.PosixPath path = Path('.') with open('style.css') as f: st.markdown(f'', unsafe_allow_html=True) #------Create/Define all functions def get_x(r): return image_path/r['train_image_name'] def get_y(r): return r['class'] def load_model(): model = load_learner(path/'binary_model.pkl') return model model = load_model() def display_image(display_img): st.image(display_img, width=400) # use_column_width=True def make_pred(model, img): # Temporarily displays a message while executing with st.spinner('Performing Diagnosis...'): time.sleep(1) pred, pred_idx, prob = model.predict(img) pred_prob = f'{prob[pred_idx]*100:.0f}%' # Display the prediction if pred == '1': pred_state = 'Presence of Diabetic Retinopathy' # st.success("Presence of Diabetic Retinopathy.") if prob[pred_idx]*100 <= 85.0: rec_action = 'Please visit an Opthalmologist to confirm your Daignosis' else: rec_action = 'Please visit an Opthalmologist for prompt treatment.' else: pred_state = 'Absence of Diabetic Retinopathy' # st.success("Absence of Diabetic Retinopathy.") if prob[pred_idx]*100 <= 85.0: rec_action = 'Please visit an Opthalmologist to confirm your Daignosis' else: rec_action = 'Please be sure to go for Diagnosis once a year.' return pred_state, rec_action, pred_prob ########--------Setup Diagnosis Page--------######## # if selected_nav == 'Diagnosis': ########-------Create Side Bar---------######## #For image upload img_upload = st.sidebar.file_uploader(label = 'Upload a Fundus Image for Diagnosis', type=['png', 'jpg', 'jpeg']) # For image selection test_images = os.listdir(path/'sample') img_selected = st.sidebar.selectbox( 'Please Select a Sample Fundus Image:', test_images) if img_selected: # Read the image file_path = path/'sample'/img_selected # Get the image to display display_img = Image.open(file_path) # display_img = display_img.resize((244,224)) img = PILImage.create(file_path) if img_upload: display_img = Image.open(img_upload) img = PILImage.create(img_upload) st.markdown("""
Instruction: Please upload a fundus image (using the sidebar) for diagnosis or select a sample image
""", unsafe_allow_html=True) with st.container(): left_col, right_col = st.columns((2,1)) with left_col: display_image(display_img) with right_col: pred_state, rec_action, pred_prob = make_pred(model, img) # st.markdown("##") if pred_state=="Presence of Diabetic Retinopathy": st.markdown(f"""Diagnosis Result:
{pred_state}
""" , unsafe_allow_html=True) else: st.markdown(f"""Diagnosis Result:
{pred_state}
""" , unsafe_allow_html=True) st.markdown(f"""Diagnosis Confidence:
{pred_prob}
""", unsafe_allow_html=True) # st.markdown(f" **Diagnosis Confidence:** {pred_prob}") st.markdown(f"""Recommendaton:
{rec_action}
""", unsafe_allow_html=True)