File size: 5,375 Bytes
68d8ddb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
import os
from flask import Flask, flash, request, redirect, url_for, render_template
from werkzeug.utils import secure_filename
import math

#  export FLASK_APP=app
#  flask run

arquivo_modelo = 'Model_2021_CNN_Xception-V09.hdf5' #'Model_2021_CNN_VGG19-V01.hdf5' # 'model_Titan-v02.hdf5' S贸 CCN


UPLOAD_FOLDER = '/tmp'
ALLOWED_EXTENSIONS = {'txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'}

def escolhe_lesao_aleatoria():
    import glob
    from random import seed
    from random import randint

    arquivos = list(glob.glob("static/tmp/*.*"))
    arquivos = [ arquivo.split('/')[2] for arquivo in arquivos]

    lesao = randint(0,len(arquivos)-1)
    print(lesao)
    return arquivos[lesao]


def prever_doencas_de_pele(model, file):
    import numpy as np
    from PIL import Image
    import pandas as pd

    folder = 'static/tmp/'

    dict_idx_doenca = {0: ['Actinic keratoses', 'Queratose Act铆nica'],
     1: ['Basal cell carcinoma', 'Carcinoma de C茅lulas Basais' ],
     2: ['Benign keratosis-like lesions ', 'Queratoses Benignas'],
     3: ['Dermatofibroma', 'Dermatofibroma'], # (Histiocitoma Fibroso Benigno)' ],
     4: ['Melanocytic nevi', 'Nevo Melan贸cito (Sinal)'], # (Nevo Pigmentado, Sinal)
     5: [ 'Melanoma', 'Melanoma'],
     6: ['Vascular lesions', 'Les玫es de Pele Vasculares'],
     7: ['Acne', 'Acne'],
     8: ['AlopeciaAreata', 'AlopeciaAreata']}

    indices = []
    doencas_en = []
    doencas_pt = []
    for idx, doenca in (dict_idx_doenca.items()):
        indices.append(idx)
        doencas_en.append(doenca[0])
        doencas_pt.append(doenca[1])

    media_scale_image = 158.4125188825441
    std_scale_image = 47.42283803971779


    x = folder + file
    #x_pred = np.asarray(Image.open(x).resize((100,75)))

    SIZE = 299 # 224
    x_pred = np.asarray(Image.open(x).resize((SIZE,SIZE)))
    x_pred = x_pred.reshape(1, SIZE, SIZE, 3)
    x_pred = (x_pred - media_scale_image) / std_scale_image
    #classe = model.predict_classes(x_pred)[0]
    pred = np.argmax(model.predict(x_pred), axis=-1)
    probs = model.predict(x_pred)[0]

    probs = np.array(probs) * 100
    df = pd.DataFrame()
    df['probs'] = probs
    print('probs:', probs )
    df['probs'] = df['probs'].apply(lambda x : int(x))
    df['doenca_en'] = doencas_en
    df['doenca_pt'] = doencas_pt
    df['idx'] = indices
    df_ordenado = df.sort_values(by=['probs'], ascending=False).reset_index()
    df_ordenado = df_ordenado[ df_ordenado.probs > 0]

    numero_probilidades_maior_que_zero = len(df_ordenado)
    if numero_probilidades_maior_que_zero > 3:
        numero_probilidades_maior_que_zero = 3
    probs = df_ordenado['probs'][:numero_probilidades_maior_que_zero]
    doencas = df_ordenado['doenca_pt'][:numero_probilidades_maior_que_zero]

    #probs = df_ordenado['probs'][:3]
    #doencas = df_ordenado['doenca_pt'][:3]

    #print('diagn贸stico:', doenca, ' - prob:', prob)
    #print(doenca)
    #print(prob)

    return doencas, probs


def allowed_file(filename):
    return '.' in filename and \
           filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS


app = Flask(__name__, template_folder='templates')
app.secret_key = "super secret key"

app.config['UPLOAD_FOLDER'] = 'static/tmp'
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024


probs = []
classesprev = []
model = None

app.add_url_rule('/static', view_func=app.send_static_file)
@app.route('/', methods=['GET', 'POST'])
def upload_file():
    #from app import model
    global model
    import numpy as np
    import tensorflow as tf

    #from keras.models import load_model


    if model is None:
        print('carregando o modelo...')
        file_model = arquivo_modelo

        from tensorflow import keras
        # model = keras.models.load_model(file_model)
        model = tf.keras.models.load_model(file_model,
                custom_objects={'Functional':tf.keras.models.Model})

    

        #model = tf.keras.models.load_model(file_model)
        #model = load_model(file_model)
        print('modelo carregado.')


    UPLOAD_FOLDER = '/tmp'
    ALLOWED_EXTENSIONS = {'txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'}

    if request.method == 'POST':
        print('request == POST')
        d = request.form.to_dict(flat=False)
        print(d)

        if "photo" in d.keys() and  "prever_lesao" in d.keys() and d['photo'][0] != '': # request.form["prever_lesao"]:
            file  = request.form['photo']
            doencas, probs = prever_doencas_de_pele(model, file)

            return render_template("index.html",  file='tmp/'+file,  probs=probs, classesprev=doencas)

        else:
            file = escolhe_lesao_aleatoria()
            print(file)
            doencas, probs = prever_doencas_de_pele(model, file)

            return render_template("index.html",  file='tmp/'+file,  probs=probs, classesprev=doencas)


    else:
        print("elsseeeeee")
        file = escolhe_lesao_aleatoria()
        doencas, probs = prever_doencas_de_pele(model, file)

        return render_template("index.html",  file='tmp/'+file,  probs=probs, classesprev=doencas) #, upload_file=global_file)

@app.route('/about/')
def about():
    return render_template('About.html')

if __name__ == "__main__":

    app.config['SESSION_TYPE'] = 'filesystem'
    port = int(os.environ.get("PORT", 5000))
    app.debug = True
    app.run(host='0.0.0.0', port=port)