File size: 3,258 Bytes
adb3499
2e8f08d
 
6d524ca
1e811a4
136473c
728557c
2e8f08d
adb3499
58ee212
 
 
 
 
 
 
 
2d545e7
58ee212
e59318c
 
 
 
 
 
2e8f08d
e59318c
2e8f08d
8a99c3d
2e8f08d
7f130f8
 
 
a1f95f0
 
e35d792
 
 
 
 
 
 
ae8b95a
 
a1f95f0
4bd15f4
 
 
4d22a83
4bd15f4
 
0841896
a1f95f0
 
 
75f9fa6
a1f95f0
8571a86
75f9fa6
 
 
 
a1f95f0
6df8d12
 
 
a1f95f0
 
 
e35d792
2e8f08d
fca1311
8f36aa3
fca1311
728557c
21af319
1e811a4
06c43f4
5c0355a
3d8a117
94f1da6
d1dfaf3
21af319
728557c
 
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
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import cv2
import keras
import gradio as gr

SHAPE = (224, 224, 3)

predictor_disease_risk = keras.models.load_model('predictor_Disease_Risk.h5')
predictor_dr = keras.models.load_model('predictor_DR.h5')
predictor_mh = keras.models.load_model('predictor_MH.h5')
predictor_odc = keras.models.load_model('predictor_ODC.h5')
predictor_tsln = keras.models.load_model('predictor_TSLN.h5') 
predictor_dn = keras.models.load_model('predictor_DN.h5')
predictor_armd = keras.models.load_model('predictor_ARMD.h5')
predictor_mya = keras.models.load_model('predictor_MYA.h5')
predictor_brvo = keras.models.load_model('predictor_BRVO.h5')


def cut_and_resize(image):
  LOW_TOL = 20
  img_bw = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
  img_bw[img_bw<=LOW_TOL] = 0
  y_nonzero, x_nonzero = np.nonzero(img_bw)
  image = image[np.min(y_nonzero):np.max(y_nonzero), np.min(x_nonzero): np.max(x_nonzero), ]
  return cv2.resize(image, SHAPE[:2], interpolation = cv2.INTER_LINEAR)
 
def simple_normalizer(X):
  return X / 255.0

def predict (image_path):
  image = simple_normalizer(cut_and_resize(cv2.imread(image_path)))
  result = predictor_disease_risk.predict(np.array([image]))[0][0] 
  
  dr = predictor_dr.predict(np.array([image]))[0][0]  
  mh = predictor_mh.predict(np.array([image]))[0][0]
  odc = predictor_odc.predict(np.array([image]))[0][0] 
  tsln = predictor_tsln.predict(np.array([image]))[0][0]
  dn = predictor_dn.predict(np.array([image]))[0][0]
  armd = predictor_armd.predict(np.array([image]))[0][0]
  mya = predictor_mya.predict(np.array([image]))[0][0]
  brvo = predictor_brvo.predict(np.array([image]))[0][0]
  
  diseases = {
      'DR'  : float(dr),
      'MH'  : float(mh),
      'ODC' : float(odc),
      'DN'  : float(dn),
      'TSLN': float(tsln),
      'ARMD': float(armd),
      'MYA' : float(mya),
      'BRVO': float(brvo)    
  }
  
  to_delete = []
  for k,v in diseases.items():
    if v < 0.05:
      to_delete.append(k)
  
  for k in to_delete:
    del diseases[k]
  
  if len(diseases) == 0:
    diseases = {'No specific disease': 0.0}
  
  
  return (
    {'Enferma': float(result), 'Sana': 1 - float(result)}, diseases
  )
 
title = 'Retinal Disease Predictor'
description = 'Modelo de deep learning que permite clasificar im谩genes de la retina en patol贸gicas y no patol贸gicas. Si detecta una retina enferma, realiza un diagn贸stico de la enfermedad concreta entre las siguientes: Diabetic Retinopathy (DR), Media Haze (MH), Optic Disk Cupping (ODC), Drusen (DN), Tessellation (TSLN), Age Related Macular Disease (ARMD), Myopia (MYA), Branch Retinal Vein Occlusion (BRVO)  . Las im谩genes deben tener fondo negro.'
article = 'Proyecto HORUS (Helping Oftalmoscopy of Retina Using Supervised Learning'

interface = gr.Interface(
  predict,
  inputs = [gr.inputs.Image(source="upload",type="filepath", label="Imagen")],
  outputs= [gr.outputs.Label(num_top_classes=2, label='Retina'), gr.outputs.Label(num_top_classes=4, label='Enfermedad')],
  title = title, description = description, article = article,
  theme = 'peach',
  examples = ['10.png', '82.png', '15.png', '25.png', '48.png', '61.png', '37.png', '631.png', '23.png', '8.png']
)

interface.launch()