import gradio as gr import numpy as np from PIL import Image import tensorflow as tf import pickle # Carregar modelos def load_models(): global pneumonia_model, malaria_model, diabetes_model pneumonia_model = tf.keras.models.load_model("pneumonia.h5") malaria_model = tf.keras.models.load_model("malaria.h5") with open('diabetes_model.sav', 'rb') as file: diabetes_model = pickle.load(file) # Função de previsão de pneumonia def predict_pneumonia(img): img = Image.fromarray(np.uint8(img)) img = img.convert('L') img = img.resize((36,36)) img = np.asarray(img) img = img.reshape((1,36,36,1)) img = img / 255.0 pred_probs = pneumonia_model.predict(img)[0] pred_class = np.argmax(pred_probs) pred_prob = pred_probs[pred_class] if pred_class == 1: pred_label = "Pneumonia" else: pred_label = "Saudável" return pred_label, pred_prob # Função de previsão de malária def predict_malaria(img): img = Image.fromarray(np.uint8(img)) img = img.resize((36,36)) img = np.asarray(img) img = img.reshape((1,36,36,3)) img = img.astype(np.float64) pred_probs = malaria_model.predict(img)[0] pred_class = np.argmax(pred_probs) pred_prob = pred_probs[pred_class] if pred_class == 1: pred_label = "Infectado" else: pred_label = "Não está infectado" return pred_label, pred_prob # Função de previsão de diabetes def predict_diabetes(Pregnancies, Glucose, BloodPressure, SkinThickness, Insulin, BMI, DiabetesPedigreeFunction, Age): user_input = [Pregnancies, Glucose, BloodPressure, SkinThickness, Insulin, BMI, DiabetesPedigreeFunction, Age] user_input = [float(x) for x in user_input] diab_prediction = diabetes_model.predict([user_input]) if diab_prediction[0] == 1: diab_diagnosis = 'A pessoa é diabética' else: diab_diagnosis = 'A pessoa não é diabética' return diab_diagnosis # Função para exibir a página de Datasets Disponíveis def display_datasets(): datasets = { "Dataset de Malária": "https://www.kaggle.com/datasets/iarunava/cell-images-for-detecting-malaria", "Dataset de Pneumonia": "https://www.kaggle.com/datasets/paultimothymooney/chest-xray-pneumonia", "Dataset de Doenças Cardíacas": "https://github.com/siddhardhan23/multiple-disease-prediction-streamlit-app/blob/main/dataset/heart.csv", "Dataset de Doenças Renais": "https://www.kaggle.com/datasets/mansoordaku/ckdisease", "Dataset de Diabetes": "https://github.com/siddhardhan23/multiple-disease-prediction-streamlit-app/blob/main/dataset/diabetes.csv", "Dataset de Doenças Hepáticas": "https://www.kaggle.com/datasets/uciml/indian-liver-patient-records", "Dataset de Câncer de Mama": "https://www.kaggle.com/datasets/uciml/breast-cancer-wisconsin-data" } markdown_content = "# Datasets Disponíveis\n\n" markdown_content += "Esta página contém links para download e visualização de datasets utilizados na aplicação.\n\n" for dataset_name, dataset_url in datasets.items(): markdown_content += f"**{dataset_name}:** [Download {dataset_name}]({dataset_url})\n\n" return markdown_content # Criar a interface Gradio com guias (Tabs) def create_interface(): with gr.Blocks() as tabbed_interface: with gr.Tab("Página Inicial"): gr.Markdown(""" # Bem-vindo à Aplicação de Previsão de Anomalias Médicas Este é um projeto de previsão de diversas anomalias médicas usando modelos de deep learning e machine learning. É importante observar que os modelos utilizados nesta aplicação foram obtidos de repositórios públicos na internet e, portanto, sua confiabilidade pode variar. Embora tenham sido treinados em grandes conjuntos de dados médicos, é fundamental lembrar que todas as previsões devem ser verificadas por profissionais de saúde qualificados. ## Perguntas Frequentes ### Como a previsão de anomalias é feita? A detecção de pneumonia e malária é feita usando uma rede neural convolucional (CNN), enquanto a seção de diabetes é detectada por um modelo Random Forest. ### Os modelos são precisos? Os modelos foram treinados em grandes conjuntos de dados médicos, mas lembre-se de que todas as previsões devem ser verificadas por profissionais de saúde qualificados. ### Qual é o propósito desta aplicação? Esta aplicação foi desenvolvida para auxiliar na detecção de diversas anomalias médicas em imagens de diferentes partes do corpo. ### Quais tipos de anomalias médicas podem ser detectadas? Os modelos podem detectar várias anomalias, incluindo pneumonia, malária e diabetes. """) with gr.Tab("Previsão de Pneumonia"): gr.Interface( fn=predict_pneumonia, inputs=gr.Image(type="pil", label="Imagem para Predição de Pneumonia"), outputs=[gr.Textbox(label="Diagnóstico"), gr.Textbox(label="Probabilidade")], title="Previsão de Pneumonia", description="Faça o upload de uma imagem para prever se há pneumonia." ) with gr.Tab("Previsão de Malária"): gr.Interface( fn=predict_malaria, inputs=gr.Image(type="pil", label="Imagem para Predição de Malária"), outputs=[gr.Textbox(label="Diagnóstico"), gr.Textbox(label="Probabilidade")], title="Previsão de Malária", description="Faça o upload de uma imagem para prever se há malária." ) with gr.Tab("Previsão de Diabetes"): gr.Interface( fn=predict_diabetes, inputs=[ gr.Textbox(label="Número de Gestações"), gr.Textbox(label="Nível de Glicose"), gr.Textbox(label="Valor da Pressão Arterial"), gr.Textbox(label="Valor da Espessura da Pele"), gr.Textbox(label="Nível de Insulina"), gr.Textbox(label="Valor do IMC"), gr.Textbox(label="Valor da Função de Pedigree de Diabetes"), gr.Textbox(label="Idade da Pessoa") ], outputs=gr.Textbox(label="Diagnóstico"), title="Previsão de Diabetes", description="Insira os dados do paciente para prever se ele tem diabetes." ) with gr.Tab("Datasets Disponíveis"): gr.Markdown(display_datasets()) return tabbed_interface # Inicializar modelos e criar interface load_models() app = create_interface() # Lançar a interface com guias app.launch()