sisdpele / app.py
valencar's picture
Upload 7 files
68d8ddb verified
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)