| import os |
| from flask import Flask, flash, request, redirect, url_for, render_template |
| from werkzeug.utils import secure_filename |
| import math |
|
|
| |
| |
|
|
| arquivo_modelo = 'Model_2021_CNN_Xception-V09.hdf5' |
|
|
|
|
| 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'], |
| 4: ['Melanocytic nevi', 'Nevo Melanócito (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 |
| |
|
|
| SIZE = 299 |
| 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 |
| |
| 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] |
|
|
| |
| |
|
|
| |
| |
| |
|
|
| 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(): |
| |
| global model |
| import numpy as np |
| import tensorflow as tf |
|
|
| |
|
|
|
|
| if model is None: |
| print('carregando o modelo...') |
| file_model = arquivo_modelo |
|
|
| from tensorflow import keras |
| |
| model = tf.keras.models.load_model(file_model, |
| custom_objects={'Functional':tf.keras.models.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] != '': |
| 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) |
|
|
| @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) |
|
|