valencar commited on
Commit
68d8ddb
verified
1 Parent(s): 2d15e51

Upload 7 files

Browse files
.gitattributes CHANGED
@@ -33,3 +33,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ Model_2021_CNN_Xception-V09.hdf5 filter=lfs diff=lfs merge=lfs -text
Model_2021_CNN_Xception-V09.hdf5 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:95d36d811b2876ca2608cbaae73edd1a38e8f8b18e9c15a2745c1465f3f4e46e
3
+ size 95097856
Procfile ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ web: python app.py
2
+
3
+
app.py ADDED
@@ -0,0 +1,176 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ from flask import Flask, flash, request, redirect, url_for, render_template
3
+ from werkzeug.utils import secure_filename
4
+ import math
5
+
6
+ # export FLASK_APP=app
7
+ # flask run
8
+
9
+ arquivo_modelo = 'Model_2021_CNN_Xception-V09.hdf5' #'Model_2021_CNN_VGG19-V01.hdf5' # 'model_Titan-v02.hdf5' S贸 CCN
10
+
11
+
12
+ UPLOAD_FOLDER = '/tmp'
13
+ ALLOWED_EXTENSIONS = {'txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'}
14
+
15
+ def escolhe_lesao_aleatoria():
16
+ import glob
17
+ from random import seed
18
+ from random import randint
19
+
20
+ arquivos = list(glob.glob("static/tmp/*.*"))
21
+ arquivos = [ arquivo.split('/')[2] for arquivo in arquivos]
22
+
23
+ lesao = randint(0,len(arquivos)-1)
24
+ print(lesao)
25
+ return arquivos[lesao]
26
+
27
+
28
+ def prever_doencas_de_pele(model, file):
29
+ import numpy as np
30
+ from PIL import Image
31
+ import pandas as pd
32
+
33
+ folder = 'static/tmp/'
34
+
35
+ dict_idx_doenca = {0: ['Actinic keratoses', 'Queratose Act铆nica'],
36
+ 1: ['Basal cell carcinoma', 'Carcinoma de C茅lulas Basais' ],
37
+ 2: ['Benign keratosis-like lesions ', 'Queratoses Benignas'],
38
+ 3: ['Dermatofibroma', 'Dermatofibroma'], # (Histiocitoma Fibroso Benigno)' ],
39
+ 4: ['Melanocytic nevi', 'Nevo Melan贸cito (Sinal)'], # (Nevo Pigmentado, Sinal)
40
+ 5: [ 'Melanoma', 'Melanoma'],
41
+ 6: ['Vascular lesions', 'Les玫es de Pele Vasculares'],
42
+ 7: ['Acne', 'Acne'],
43
+ 8: ['AlopeciaAreata', 'AlopeciaAreata']}
44
+
45
+ indices = []
46
+ doencas_en = []
47
+ doencas_pt = []
48
+ for idx, doenca in (dict_idx_doenca.items()):
49
+ indices.append(idx)
50
+ doencas_en.append(doenca[0])
51
+ doencas_pt.append(doenca[1])
52
+
53
+ media_scale_image = 158.4125188825441
54
+ std_scale_image = 47.42283803971779
55
+
56
+
57
+ x = folder + file
58
+ #x_pred = np.asarray(Image.open(x).resize((100,75)))
59
+
60
+ SIZE = 299 # 224
61
+ x_pred = np.asarray(Image.open(x).resize((SIZE,SIZE)))
62
+ x_pred = x_pred.reshape(1, SIZE, SIZE, 3)
63
+ x_pred = (x_pred - media_scale_image) / std_scale_image
64
+ #classe = model.predict_classes(x_pred)[0]
65
+ pred = np.argmax(model.predict(x_pred), axis=-1)
66
+ probs = model.predict(x_pred)[0]
67
+
68
+ probs = np.array(probs) * 100
69
+ df = pd.DataFrame()
70
+ df['probs'] = probs
71
+ print('probs:', probs )
72
+ df['probs'] = df['probs'].apply(lambda x : int(x))
73
+ df['doenca_en'] = doencas_en
74
+ df['doenca_pt'] = doencas_pt
75
+ df['idx'] = indices
76
+ df_ordenado = df.sort_values(by=['probs'], ascending=False).reset_index()
77
+ df_ordenado = df_ordenado[ df_ordenado.probs > 0]
78
+
79
+ numero_probilidades_maior_que_zero = len(df_ordenado)
80
+ if numero_probilidades_maior_que_zero > 3:
81
+ numero_probilidades_maior_que_zero = 3
82
+ probs = df_ordenado['probs'][:numero_probilidades_maior_que_zero]
83
+ doencas = df_ordenado['doenca_pt'][:numero_probilidades_maior_que_zero]
84
+
85
+ #probs = df_ordenado['probs'][:3]
86
+ #doencas = df_ordenado['doenca_pt'][:3]
87
+
88
+ #print('diagn贸stico:', doenca, ' - prob:', prob)
89
+ #print(doenca)
90
+ #print(prob)
91
+
92
+ return doencas, probs
93
+
94
+
95
+ def allowed_file(filename):
96
+ return '.' in filename and \
97
+ filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
98
+
99
+
100
+ app = Flask(__name__, template_folder='templates')
101
+ app.secret_key = "super secret key"
102
+
103
+ app.config['UPLOAD_FOLDER'] = 'static/tmp'
104
+ app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024
105
+
106
+
107
+ probs = []
108
+ classesprev = []
109
+ model = None
110
+
111
+ app.add_url_rule('/static', view_func=app.send_static_file)
112
+ @app.route('/', methods=['GET', 'POST'])
113
+ def upload_file():
114
+ #from app import model
115
+ global model
116
+ import numpy as np
117
+ import tensorflow as tf
118
+
119
+ #from keras.models import load_model
120
+
121
+
122
+ if model is None:
123
+ print('carregando o modelo...')
124
+ file_model = arquivo_modelo
125
+
126
+ from tensorflow import keras
127
+ # model = keras.models.load_model(file_model)
128
+ model = tf.keras.models.load_model(file_model,
129
+ custom_objects={'Functional':tf.keras.models.Model})
130
+
131
+
132
+
133
+ #model = tf.keras.models.load_model(file_model)
134
+ #model = load_model(file_model)
135
+ print('modelo carregado.')
136
+
137
+
138
+ UPLOAD_FOLDER = '/tmp'
139
+ ALLOWED_EXTENSIONS = {'txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'}
140
+
141
+ if request.method == 'POST':
142
+ print('request == POST')
143
+ d = request.form.to_dict(flat=False)
144
+ print(d)
145
+
146
+ if "photo" in d.keys() and "prever_lesao" in d.keys() and d['photo'][0] != '': # request.form["prever_lesao"]:
147
+ file = request.form['photo']
148
+ doencas, probs = prever_doencas_de_pele(model, file)
149
+
150
+ return render_template("index.html", file='tmp/'+file, probs=probs, classesprev=doencas)
151
+
152
+ else:
153
+ file = escolhe_lesao_aleatoria()
154
+ print(file)
155
+ doencas, probs = prever_doencas_de_pele(model, file)
156
+
157
+ return render_template("index.html", file='tmp/'+file, probs=probs, classesprev=doencas)
158
+
159
+
160
+ else:
161
+ print("elsseeeeee")
162
+ file = escolhe_lesao_aleatoria()
163
+ doencas, probs = prever_doencas_de_pele(model, file)
164
+
165
+ return render_template("index.html", file='tmp/'+file, probs=probs, classesprev=doencas) #, upload_file=global_file)
166
+
167
+ @app.route('/about/')
168
+ def about():
169
+ return render_template('About.html')
170
+
171
+ if __name__ == "__main__":
172
+
173
+ app.config['SESSION_TYPE'] = 'filesystem'
174
+ port = int(os.environ.get("PORT", 5000))
175
+ app.debug = True
176
+ app.run(host='0.0.0.0', port=port)
requirements-ORIGINAL.txt ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ Flask==1.1.2
2
+ tensorflow==2.0.0
3
+ werkzeug==1.0.1
4
+ pandas==1.0.3
5
+ numpy==1.18.1
6
+ Pillow==7.1.2
requirements.txt ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ Flask==2.0.2
2
+ numpy==1.19.5
3
+ pandas==1.3.4
4
+ Pillow==8.4.0
5
+ tensorflow_cpu==2.5.0
6
+ Werkzeug==2.0.2
run_app.sh ADDED
@@ -0,0 +1 @@
 
 
1
+ flask --app app.py run
runtime.txt ADDED
@@ -0,0 +1 @@
 
 
1
+ python-3.7.10