DHEIVER commited on
Commit
60a7004
·
verified ·
1 Parent(s): 53c7501

Create App.py

Browse files
Files changed (1) hide show
  1. App.py +77 -0
App.py ADDED
@@ -0,0 +1,77 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Instale as dependências necessárias
2
+ !pip install pydicom nibabel numpy gradio matplotlib
3
+
4
+ import os
5
+ import tempfile
6
+ import pydicom
7
+ import nibabel as nib
8
+ import numpy as np
9
+ import matplotlib.pyplot as plt
10
+ import gradio as gr
11
+
12
+ def dicom_to_nifti_and_display(dicom_file):
13
+ """
14
+ Converte um arquivo DICOM para NIfTI e exibe as imagens antes e depois da conversão.
15
+
16
+ :param dicom_file: Arquivo DICOM carregado pelo usuário.
17
+ :return: Tupla contendo a imagem DICOM original e a imagem NIfTI convertida.
18
+ """
19
+ try:
20
+ # Ler o arquivo DICOM
21
+ dicom_data = pydicom.dcmread(dicom_file.name)
22
+ dicom_image = dicom_data.pixel_array
23
+
24
+ # Criar um objeto NIfTI
25
+ nifti_image = nib.Nifti1Image(dicom_image, affine=np.eye(4))
26
+
27
+ # Salvar temporariamente o arquivo NIfTI
28
+ with tempfile.NamedTemporaryFile(suffix=".nii", delete=False) as temp_nifti:
29
+ nib.save(nifti_image, temp_nifti.name)
30
+ nifti_path = temp_nifti.name
31
+
32
+ # Carregar o arquivo NIfTI para exibição
33
+ nifti_loaded = nib.load(nifti_path).get_fdata()
34
+
35
+ # Exibir as imagens usando Matplotlib
36
+ fig, axes = plt.subplots(1, 2, figsize=(10, 5))
37
+ axes[0].imshow(dicom_image, cmap="gray")
38
+ axes[0].set_title("Imagem DICOM Original")
39
+ axes[0].axis("off")
40
+
41
+ axes[1].imshow(nifti_loaded[:, :, nifti_loaded.shape[2] // 2], cmap="gray") # Slice central do NIfTI
42
+ axes[1].set_title("Imagem NIfTI Convertida")
43
+ axes[1].axis("off")
44
+
45
+ # Salvar a figura em um buffer temporário
46
+ with tempfile.NamedTemporaryFile(suffix=".png", delete=False) as temp_image:
47
+ plt.savefig(temp_image.name, bbox_inches="tight")
48
+ plt.close(fig)
49
+ return temp_image.name, nifti_path
50
+
51
+ except Exception as e:
52
+ raise gr.Error(f"Erro ao processar o arquivo: {e}")
53
+
54
+ # Interface Gradio
55
+ with gr.Blocks() as demo:
56
+ gr.Markdown("# Conversor DICOM para NIfTI com Visualização")
57
+ gr.Markdown("Faça upload de um arquivo DICOM, visualize a imagem original, converta para NIfTI e veja o resultado.")
58
+
59
+ with gr.Row():
60
+ input_dicom = gr.File(label="Upload de Arquivo DICOM")
61
+ output_images = gr.Image(label="Imagens DICOM e NIfTI")
62
+ output_nifti = gr.File(label="Download do Arquivo NIfTI")
63
+
64
+ convert_button = gr.Button("Converter e Visualizar")
65
+
66
+ def process_and_display(dicom_file):
67
+ image_path, nifti_path = dicom_to_nifti_and_display(dicom_file)
68
+ return image_path, nifti_path
69
+
70
+ convert_button.click(
71
+ process_and_display,
72
+ inputs=input_dicom,
73
+ outputs=[output_images, output_nifti]
74
+ )
75
+
76
+ # Executar a interface
77
+ demo.launch()