|
import streamlit as st |
|
import numpy as np |
|
import keras |
|
from keras.preprocessing import image |
|
from huggingface_hub import from_pretrained_keras |
|
import random |
|
|
|
|
|
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) |
|
|
|
|
|
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 |
|
|
|
|
|
|
|
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) |
|
|