modelo_raios_x / app.py
valencar's picture
te
3fd6242
import streamlit as st
import numpy as np
import keras
from keras.preprocessing import image
from huggingface_hub import from_pretrained_keras
import random
# Remove whitespace from the top of the page
reduce_header_height_style = """
<style> .stDeployButton {visibility: hidden;} </style>
<style> div[class^='block-container'] { padding-top: 1rem; } </style>
"""
st.markdown(reduce_header_height_style, unsafe_allow_html=True)
def predict_image(file_name):
IMAGE_HEIGHT, IMAGE_WIDTH = 299, 299
categories = ['Normal', 'Tuberculose']
img = img_orig = image.load_img(file_name, target_size = (IMAGE_HEIGHT, IMAGE_WIDTH))
img = image.img_to_array(img)
img = np.expand_dims(img, axis = 0)
img = img/255.0
pred = st.session_state.model.predict(img)
classe = np.argmax(pred)
nome_classe = categories[classe]
prob = np.max(pred)
# col1.image(img_orig, width=450)
mensagem = "Previsão: " + categories[classe] + ' - ' + str(round(prob * 100)) + '%'
str_prob = ' - ' + f"{(prob*100):.3f}"[:-2] + '%'
if int(classe) == 0:
classe_prevista = ':blue[Normal]'
else:
classe_prevista = ':red[Tuberculose]'
msg = 'Previsão: ' + classe_prevista + str_prob
#col1.header(msg)
#print(mensagem)
return msg
titulo = 'Classificação - Doenças Pulmonares'
st.markdown(f'<div style="padding-top:30px; padding-bottom:2px; font-size:40px;font-weight:bold">{titulo}</div>',
unsafe_allow_html=True)
@st.cache_data
def inicializa_modelo():
print('carregando o modelo...')
file = "valencar/modelo_raios_x"
model = from_pretrained_keras(file)
print('modelo carregado.')
return model
def escolher_imagem():
imagens = ['CHNCXR_0342_1.png', 'CHNCXR_0022_0.png', 'CHNCXR_0006_0.png', 'CHNCXR_0004_0.png', 'CHNCXR_0338_1.png', 'CHNCXR_0340_1.png', 'CHNCXR_0020_0.png', 'CHNCXR_0019_0.png', 'CHNCXR_0024_0.png', 'CHNCXR_0344_1.png', 'CHNCXR_0002_0.png', 'CHNCXR_0327_1.png', 'CHNCXR_0346_1.png', 'CHNCXR_0005_0.png', 'CHNCXR_0021_0.png', 'CHNCXR_0341_1.png', 'CHNCXR_0339_1.png', 'CHNCXR_0023_0.png', 'CHNCXR_0343_1.png', 'CHNCXR_0007_0.png', 'CHNCXR_0003_0.png', 'CHNCXR_0347_1.png', 'CHNCXR_0345_1.png', 'CHNCXR_0025_0.png', 'CHNCXR_0018_0.png', 'CHNCXR_0001_0.png', 'CHNCXR_0328_1.png', 'CHNCXR_0350_1.png', 'CHNCXR_0014_0.png', 'CHNCXR_0331_1.png', 'CHNCXR_0349_1.png', 'CHNCXR_0016_0.png', 'CHNCXR_0333_1.png', 'CHNCXR_0337_1.png', 'CHNCXR_0012_0.png', 'CHNCXR_0335_1.png', 'CHNCXR_0010_0.png', 'CHNCXR_0009_0.png', 'CHNCXR_0332_1.png', 'CHNCXR_0017_0.png', 'CHNCXR_0351_1.png', 'CHNCXR_0329_1.png', 'CHNCXR_0348_1.png', 'CHNCXR_0330_1.png', 'CHNCXR_0015_0.png', 'CHNCXR_0011_0.png', 'CHNCXR_0334_1.png', 'CHNCXR_0008_0.png', 'CHNCXR_0013_0.png', 'CHNCXR_0336_1.png']
imagem = random.sample(imagens, k=1)[0]
return imagem
if 'model' not in st.session_state:
with st.spinner('carregando o modelo...'):
st.session_state.model = inicializa_modelo()
with st.container():
col1 = st.container()
if st.button('Raios-X Diversos'):
nome_imagem = escolher_imagem()
imagem = image.load_img(name_image)
col1.image(imagem)
col1.header(predict_image(nome_imagem))
file_upload = st.file_uploader("Carregue uma Imagem de Raios-X:", type="png")
if file_upload is not None:
imagem = image.load_img(file_upload)
col1.image(imagem)
col1.header(predict_image(file_upload))
else:
name_image = "doencas_pulmonares.jpg"
imagem = image.load_img(name_image)
col1.image(imagem, width=700)
st.write("")
st.write("")
st.write("")
st.write("")
st.write("")
aviso = "ESTE RESULTADO NÃO SUBSTITUI A AVALIAÇÃO DO MÉDICO. Este é um sistema para auxílio diagnóstico de doenças usando deep learning. Todo o processamento é feito no seu dispositivo e as imagens não são enviadas para o seu servidor. Ao continuar, você assume toda a responsabilidade com o uso."
st.markdown(f'<div style="color: #856404; background-color: #fff3cd; border-color: #ffeeba; padding-top:10px; padding-top:10px; padding-bottom:10px; padding-left:10px; padding-right:10px;">{aviso}</div>',
unsafe_allow_html=True)
st.write("")
st.write("")
st.write("")
st.write("")
st.write("")
st.write("")
st.write("")
footer="\
<div > \
<p>Sistema de Apoio ao Diagnóstico de Doenças Pulmonares versão 1.0.2.<br> \
Desenvolvido por Prof. Dr. Vladimir Costa de Alencar e Equipe de Pesquisadores do LANA/UEPB. <br> \
Campina Grande, Paraíba, Brasil, 2024.<br> \
<a href='https://www.valencar.com' target='_blank'>www.valencar.com</a></p>"
st.markdown(footer, unsafe_allow_html=True)
name_image = "LANA_Card.png"
imagem = image.load_img(name_image)
st.image(imagem, width=300)