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)