File size: 5,337 Bytes
3318510
e9f7fd2
bf22f2d
affc586
3eb11cb
e665ab2
bf22f2d
 
 
 
 
 
5253012
94e3d42
84f200a
45f9554
bf22f2d
45f9554
 
 
747d9f4
bf22f2d
9eed4fa
 
 
b531d2e
 
bf22f2d
 
 
 
 
 
 
 
 
 
 
 
 
 
b531d2e
b3c4662
 
bf22f2d
 
 
 
 
 
 
 
 
 
 
 
 
de16dcc
 
 
 
 
 
a741fc7
b3c4662
b531d2e
de16dcc
7a0b4da
de16dcc
3281da3
 
60f23bc
807f381
057ede6
807f381
d17c251
de16dcc
94985b8
bf22f2d
94985b8
 
bf22f2d
94985b8
 
 
 
bf22f2d
b531d2e
 
807f381
b531d2e
9eed4fa
36ee72b
 
 
de16dcc
 
 
a741fc7
bf22f2d
de16dcc
36ee72b
 
 
 
 
 
de16dcc
36ee72b
 
 
 
 
 
 
 
 
 
 
bf22f2d
36ee72b
 
 
 
bf22f2d
36ee72b
 
 
 
 
 
de16dcc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
import streamlit as st
import pydicom
import matplotlib.pyplot as plt
import zipfile
import os
import subprocess
from datetime import datetime
import shutil
import moviepy.video.io.ImageSequenceClip
from io import BytesIO
from tkinter import Tcl
from PIL import Image

subprocess_executed = False

# logo_image_path = '1.png'  # Replace with your logo image path or URL

# # Display the logo at the top of the page
# st.image(logo_image_path, width=150)
# st.title("Automated Abdominal Aortic Aneurysm Detection")

# Upload a ZIP file containing DICOM slices
st.write("Upload a ZIP file containing DICOM slices")
uploaded_zip_file = st.file_uploader("Upload a .zip file", type=["zip"])

@st.cache_resource
def install_dependencies():
        command = "chmod +x install.sh"
        try:
            subprocess.run(command, shell=True, check=True)
            print("Script 'install.sh' has been made executable.")
        except subprocess.CalledProcessError as e:
            print(f"Error while making the script executable: {e}")

        command = "./install.sh"
        try:
            subprocess.run(command, shell=True, check=True)
            print("Script 'install.sh' has started running.")
            install_script_executed = True
        except subprocess.CalledProcessError as e:
            print(f"Error while running the script: {e}")

@st.cache_resource
def run_inference():
        command = "chmod +x inference.sh"
        try:
            subprocess.run(command, shell=True, check=True)
            print("Script 'inference.sh' has been made executable.")
        except subprocess.CalledProcessError as e:
            print(f"Error while making the script executable: {e}")

        command = "./inference.sh"
        try:
            subprocess.run(command, shell=True, check=True)
            print("Script 'inference.sh' has started running.")
        except subprocess.CalledProcessError as e:
            print(f"Error while running the script: {e}")
def zip_dir(directory, zip_filename):
    with zipfile.ZipFile(zip_filename, 'w', zipfile.ZIP_DEFLATED) as zipf:
        for root, dirs, files in os.walk(directory):
            for file in files:
                zipf.write(os.path.join(root, file), os.path.relpath(os.path.join(root, file), os.path.join(directory, '..')))

uploaded_zip_file = st.file_uploader("Upload a .zip file", type=["zip"], key="zip_uploader")

if uploaded_zip_file is not None:
    try:
        install_dependencies()

        temp_dir = "/home/user/app/C2C/temp_dicom_dir"
        os.makedirs(temp_dir, exist_ok=True)

        with zipfile.ZipFile(uploaded_zip_file, "r") as zip_ref:
            zip_ref.extractall(temp_dir)

        dicom_files = [os.path.join(temp_dir, f) for f in os.listdir(temp_dir) if f.endswith(".dcm")]
        dicom_files.sort()

        # Anonymize DICOM files
        for file_path in dicom_files:
            ds = pydicom.dcmread(file_path)
            # Anonymize personal information
            if 'PatientName' in ds:
                ds.PatientName = 'Anonymized'
            if 'PatientID' in ds:
                ds.PatientID = '00000000'
            ds.save_as(file_path)
    except Exception as e:
        st.error(f"Error: {str(e)}")

if st.button("Analyze"):
    st.success("Analysis started (expected time: 5 mins)")
    run_inference()

    outputs_directory = "/home/user/app/C2C/outputs"
    if os.path.exists(outputs_directory):
        zip_filename = "/home/user/app/C2C/outputs.zip"
        zip_dir(outputs_directory, zip_filename)
        st.markdown(f"Download your outputs [here](/{zip_filename})", key="download_link")

    subdirectories = [subdir for subdir in os.listdir(outputs_directory) if os.path.isdir(os.path.join(outputs_directory, subdir))]
    first_subdirectory = subdirectories[0] if subdirectories else None

    if first_subdirectory:
        subdirectory_path = os.path.join(outputs_directory, first_subdirectory)
        temp_dicom_dir_path = os.path.join(subdirectory_path, "temp_dicom_dir")

        dicom_subdirectories = [subdir for subdir in os.listdir(temp_dicom_dir_path) if os.path.isdir(os.path.join(temp_dicom_dir_path, subdir))]
        first_dicom_subdirectory = dicom_subdirectories[0] if dicom_subdirectories else None

        if first_dicom_subdirectory:
            video_path = os.path.join(temp_dicom_dir_path, first_dicom_subdirectory, "images/summary/aaa.mp4")
            image_path = os.path.join(temp_dicom_dir_path, first_dicom_subdirectory, "images/summary/diameter_graph.png")
            largest_slice = os.path.join(temp_dicom_dir_path, first_dicom_subdirectory, "images/summary/out.png")

            if os.path.exists(largest_slice):
                st.title("Largest Slice")
                st.image(largest_slice, use_column_width=True)

            # Display the video
            if os.path.exists(video_path):
                st.title("Video")
                st.video(video_path, format="video/mp4")

            # Display the image
            if os.path.exists(image_path):
                st.title("Diameter Graph")
                st.image(image_path, use_column_width=True)
        else:
            st.warning("No subdirectories or folders found inside 'temp_dicom_dir'.")
    else:
        st.warning("No subdirectories or folders found inside the 'outputs' directory.")