|
|
import streamlit as st |
|
|
import numpy as np |
|
|
import cv2 |
|
|
from tensorflow.keras.models import load_model |
|
|
|
|
|
|
|
|
from tensorflow.keras.layers import InputLayer |
|
|
|
|
|
|
|
|
custom_objects = {'InputLayer': InputLayer} |
|
|
|
|
|
@st.cache_resource |
|
|
def load_ocular_model(): |
|
|
return load_model('odir_cnn_model.h5', custom_objects=custom_objects) |
|
|
|
|
|
model = load_ocular_model() |
|
|
|
|
|
|
|
|
model = load_ocular_model() |
|
|
|
|
|
|
|
|
LABELS = ['Normal (N)', 'Diabetes (D)', 'Glaucoma (G)', 'Cataract (C)', |
|
|
'Age related Macular Degeneration (A)', 'Hypertension (H)', |
|
|
'Pathological Myopia (M)', 'Other diseases/abnormalities (O)'] |
|
|
|
|
|
|
|
|
def preprocess_image(image, img_size=128): |
|
|
img = cv2.resize(image, (img_size, img_size)) |
|
|
img = img / 255.0 |
|
|
img = np.expand_dims(img, axis=0) |
|
|
return img |
|
|
|
|
|
|
|
|
|
|
|
def predict_diseases(left_image, right_image, model): |
|
|
left_img = preprocess_image(left_image) |
|
|
right_img = preprocess_image(right_image) |
|
|
|
|
|
left_predictions = model.predict(left_img) |
|
|
right_predictions = model.predict(right_img) |
|
|
|
|
|
combined_predictions = (left_predictions + right_predictions) / 2 |
|
|
|
|
|
pred_labels = {label: float(pred) for label, pred in zip(LABELS, combined_predictions[0])} |
|
|
|
|
|
return pred_labels |
|
|
|
|
|
|
|
|
st.title("Ocular Disease Prediction") |
|
|
st.write("Upload left and right eye images to predict ocular diseases.") |
|
|
|
|
|
|
|
|
left_image_file = st.file_uploader("Upload Left Eye Image", type=["jpg", "jpeg", "png"]) |
|
|
right_image_file = st.file_uploader("Upload Right Eye Image", type=["jpg", "jpeg", "png"]) |
|
|
|
|
|
if left_image_file is not None and right_image_file is not None: |
|
|
|
|
|
left_image = cv2.imdecode(np.fromstring(left_image_file.read(), np.uint8), 1) |
|
|
right_image = cv2.imdecode(np.fromstring(right_image_file.read(), np.uint8), 1) |
|
|
|
|
|
st.image(left_image, caption='Left Eye Image', use_column_width=True) |
|
|
st.image(right_image, caption='Right Eye Image', use_column_width=True) |
|
|
|
|
|
st.write("Processing images and predicting diseases...") |
|
|
|
|
|
|
|
|
disease_predictions = predict_diseases(left_image, right_image, model) |
|
|
|
|
|
|
|
|
st.write("Predictions:") |
|
|
for disease, score in disease_predictions.items(): |
|
|
st.write(f"{disease}: {score:.4f}") |
|
|
|
|
|
|
|
|
st.write("**Model Information:**") |
|
|
st.write("This model predicts various ocular diseases based on left and right fundus images.") |
|
|
|