import os import utils import numpy as np import gradio as gr import tensorflow as tf import matplotlib.pyplot as plt from ttictoc import tic,toc from urllib.request import urlretrieve # '''--------------------------- Preprocesamiento ----------------------------''' # tic() # 3D U-Net\ if not os.path.exists("unet.h5"): urlretrieve("https://dl.dropboxusercontent.com/s/ay5q8caqzlad7h5/unet.h5?dl=0", "unet.h5") if not os.path.exists("resnet_50_23dataset.pth"): urlretrieve("https://dl.dropboxusercontent.com/s/otxsgx3e31d5h9i/resnet_50_23dataset.pth?dl=0", "resnet_50_23dataset.pth") path_3d_unet = 'unet.h5' with tf.device("cpu:0"): model_unet = utils.import_3d_unet(path_3d_unet) # # Cargar imagen # img = utils.load_img('F:/Downloads/ADNI_002_S_0295_MR_MP-RAGE__br_raw_20070525135721811_1_S32678_I55275.nii') # # Extraer cerebro # with tf.device("cpu:0"): # brain = utils.brain_stripping(img, model_unet) # print(toc()) # '''---------------------------- Procesamiento ------------------------------''' # # Med net # weight_path = 'resnet_50_23dataset.pth' # device_ids = [0] # mednet = utils.create_mednet(weight_path, device_ids) # # Extraer características # features = utils.get_features(brain, mednet) def load_img(file): sitk, array = utils.load_img(file.name) # Redimención mri_image = np.transpose(array) mri_image = np.append(mri_image, np.zeros((192-mri_image.shape[0],256,256,)), axis=0) # Rotación mri_image = mri_image.astype(np.float32) mri_image = np.rot90(mri_image, axes=(1,2)) return sitk, mri_image def show_img(img, mri_slice): fig = plt.figure() plt.imshow(img[mri_slice,:,:], cmap='gray') return fig, gr.update(visible=True) # def show_brain(brain, brain_slice): # fig = plt.figure() # plt.imshow(brain[brain_slice,:,:], cmap='gray') # return fig, gr.update(visible=True) def process_img(img, brain_slice): with tf.device("cpu:0"): brain = utils.brain_stripping(img, model_unet) fig, update = show_img(brain, brain_slice) return brain, fig, update def clear(): return gr.File.update(value=None), gr.Plot.update(value=None), gr.update(visible=False) # gr.Textbox.update(placeholder='Ingrese nombre del paciente'), gr.Number.update(value=0), # demo = gr.Interface(fn=load_img, # inputs=gr.File(file_count="single", file_type=[".nii"]), # outputs=gr.Plot() # # outputs='text' # ) with gr.Blocks(theme=gr.themes.Base(primary_hue="teal")) as demo: with gr.Row(): # gr.HTML(r"""
""") gr.HTML(r"""
""") # gr.Markdown(""" # # SIMCI # Interfaz de SIMCI # """) # Inputs with gr.Row(): with gr.Column(scale=1): with gr.Tab("Personal data"): # Objeto para subir archivo nifti input_name = gr.Textbox(placeholder='Ingrese nombre del paciente', label='Name') input_sex = gr.Dropdown(["Male", "Female"], label="Sex") input_age = gr.Number(label='Age') with gr.Tab("Clinical data"): input_MMSE = gr.Number(label='MMSE') input_GDSCALE = gr.Number(label='GDSCALE') input_CDR = gr.Number(label='Global CDR') input_FAQ = gr.Number(label='FAQ Total Score') input_NPI_Q = gr.Number(label='NPI-Q Total Score') input_file = gr.File(file_count="single", file_type=[".nii"], label="Archivo Imagen MRI") with gr.Row(): # Botón para cargar imagen load_img_button = gr.Button(value="Load") # Botón para borrar clear_button = gr.Button(value="Clear") # Botón para procesar imagen process_button = gr.Button(value="Procesar") # Outputs with gr.Column(scale=1): # Plot para imágen original plot_img_original = gr.Plot(label="Imagen MRI original") # Slider para imágen original mri_slider = gr.Slider(minimum=0, maximum=192, value=100, step=1, label="MRI Slice", visible=False) # Plot para imágen procesada plot_brain = gr.Plot(label="Imagen MRI procesada") # Slider para imágen procesada brain_slider = gr.Slider(minimum=0, maximum=192, value=100, step=1, label="MRI Slice", visible=False) # componentes = # Variables original_input_sitk = gr.State() original_input_img = gr.State() brain_img = gr.State() # Cambios # Cargar imagen nueva input_file.change(load_img, input_file, [original_input_sitk, original_input_img]) # Mostrar imagen nueva load_img_button.click(show_img, [original_input_img, mri_slider], [plot_img_original, mri_slider]) # Limpiar campos clear_button.click(fn=clear, outputs=[input_file, plot_img_original, mri_slider]) # Actualizar imagen original mri_slider.change(show_img, [original_input_img, mri_slider], [plot_img_original,mri_slider]) # Procesar imagen process_button.click(fn=process_img, inputs=[original_input_sitk, brain_slider], outputs=[brain_img,plot_brain,brain_slider]) # Actualizar imagen procesada brain_slider.change(show_img, [brain_img, brain_slider], [plot_brain,brain_slider]) if __name__ == "__main__": demo.launch() # # Visualización resultados # mri_slice = 100 # # Plot Comparación máscaras # fig, axs = plt.subplots(1,2) # fig.subplots_adjust(bottom=0.15) # fig.suptitle('Comparación Máscaras Obtenidas') # axs[0].set_title('MRI original') # axs[0].imshow(img[mri_slice,:,:],cmap='gray') # axs[1].set_title('Cerebro extraido con 3D U-Net') # axs[1].imshow(brain[mri_slice,:,:],cmap='gray') # # Slider para cambiar slice # ax_slider = plt.axes([0.15, 0.05, 0.75, 0.03]) # mri_slice_slider = Slider(ax_slider, 'Slice', 0, 192, 100, valstep=1) # def update(val): # mri_slice = mri_slice_slider.val # axs[0].imshow(img[:,:,mri_slice],cmap='gray') # axs[1].imshow(brain[mri_slice,:,:],cmap='gray') # # Actualizar plot comparación máscaras # mri_slice_slider.on_changed(update)