File size: 2,646 Bytes
930fdb1
 
821e0e3
 
930fdb1
1823132
 
 
 
 
 
930fdb1
821e0e3
1823132
 
 
 
930fdb1
821e0e3
930fdb1
821e0e3
 
 
 
930fdb1
 
f054439
821e0e3
 
 
 
 
f054439
821e0e3
 
 
 
 
 
 
 
 
 
 
 
 
930fdb1
 
821e0e3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import streamlit as st
import numpy as np
import cv2
from tensorflow.keras.models import load_model


from tensorflow.keras.layers import InputLayer

# Custom object scope to handle InputLayer configuration
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()

# Define the labels
LABELS = ['Normal (N)', 'Diabetes (D)', 'Glaucoma (G)', 'Cataract (C)', 
          'Age related Macular Degeneration (A)', 'Hypertension (H)', 
          'Pathological Myopia (M)', 'Other diseases/abnormalities (O)']

# Preprocess the image
def preprocess_image(image, img_size=128):  # Change img_size to 128
    img = cv2.resize(image, (img_size, img_size))
    img = img / 255.0  # Normalize
    img = np.expand_dims(img, axis=0)  # Add batch dimension
    return img


# Predict diseases based on left and right images
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

# Streamlit UI
st.title("Ocular Disease Prediction")
st.write("Upload left and right eye images to predict ocular diseases.")

# Image upload widgets
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:
    # Load images
    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...")
    
    # Predict diseases
    disease_predictions = predict_diseases(left_image, right_image, model)
    
    # Display predictions
    st.write("Predictions:")
    for disease, score in disease_predictions.items():
        st.write(f"{disease}: {score:.4f}")

# Information about the model
st.write("**Model Information:**")
st.write("This model predicts various ocular diseases based on left and right fundus images.")