File size: 5,071 Bytes
3318510
e9f7fd2
 
affc586
3eb11cb
e665ab2
acda587
97f584b
e665ab2
94e3d42
 
84f200a
e9f7fd2
e7fa8af
 
e9f7fd2
807f381
 
e7fa8af
807f381
2033578
 
 
 
 
 
 
 
 
 
 
807f381
 
 
3281da3
 
 
 
9cfe6a8
807f381
057ede6
807f381
 
 
 
 
 
 
 
 
 
 
2033578
 
807f381
 
c714e66
 
 
0a97931
e7fa8af
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a223d06
 
8c3b194
a223d06
8c3b194
 
 
 
 
 
 
a223d06
8c3b194
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a223d06
8c3b194
 
a223d06
8c3b194
 
 
 
 
a223d06
8c3b194
 
 
 
 
 
 
 
 
 
 
 
 
4b6fb19
acda587
d138970
f79cc39
c714e66
fc8807b
 
807f381
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
133
134
135
136
import streamlit as st
import pydicom
import matplotlib.pyplot as plt
import zipfile
import os
import subprocess
from datetime import datetime
import shutil

# Flag to track if subprocess commands have been executed
subprocess_executed = False

# Streamlit app title
st.markdown("<h1 style='text-align: center;'>A<sup>4</sup></h1>", unsafe_allow_html=True)
st.subheader("Automated AAA Diameter Measurements")

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

# Function to read and display the DICOM image
def display_dicom_image(selected_slice, dicom_files):
    dicom_data = pydicom.dcmread(dicom_files[selected_slice])

    # Display the DICOM image
    plt.imshow(dicom_data.pixel_array, cmap=plt.cm.bone)
    plt.axis("off")
    plt.title("DICOM Image")
    plt.tight_layout()
    return plt

if uploaded_zip_file is not None:
    try:
        # Create a temporary directory to unzip the files
        temp_dir = "/home/user/app/C2C/temp_dicom_dir"
        
        os.makedirs(temp_dir, exist_ok=True)
        full_path = os.path.abspath(temp_dir)
        
        with zipfile.ZipFile(uploaded_zip_file, "r") as zip_ref:
            zip_ref.extractall(temp_dir)

        # Get a list of DICOM files in the directory
        dicom_files = [os.path.join(temp_dir, f) for f in os.listdir(temp_dir) if f.endswith(".dcm")]
        dicom_files.sort()  # Sort the files

        if len(dicom_files) == 0:
            st.error("No DICOM files found in the ZIP archive.")
        else:
            # Display a slider for selecting the slice
            selected_slice = st.slider("Select a slice", 0, len(dicom_files) - 1, 0)

            # Display the DICOM image using the cached function
            plt = display_dicom_image(selected_slice, dicom_files)
            st.pyplot(plt)

    except Exception as e:
        st.error(f"Error: {str(e)}")

if st.button("Analyze"):

    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.")
    except subprocess.CalledProcessError as e:
        print(f"Error while running the script: {e}")

    subprocess_executed = True

    if subprocess_executed:

        command = "chmod +x 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 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 making the script executable: {e}")
    
        # Set the flag to indicate that subprocess commands have been executed
        subprocess_executed = True
    
        # Assuming the 'outputs' directory is located at "/home/user/app/C2C/comp2comp/outputs"
        outputs_directory = "/home/user/app/C2C/outputs"
        
        # Get a list of subdirectories inside the 'outputs' directory
        subdirectories = [subdir for subdir in os.listdir(outputs_directory)
              if os.path.isdir(os.path.join(outputs_directory, subdir))]
    
        # Use the first (or only) subdirectory, or None if there are no subdirectories
        first_subdirectory = subdirectories[0] if subdirectories else None
        
        if first_subdirectory:
            # Construct the paths to the video and image files inside the first subdirectory
            video_path = os.path.join(outputs_directory, first_subdirectory, "temp_dicom_dir/images/summary/aaa.mp4")
            image_path = os.path.join(outputs_directory, first_subdirectory, "temp_dicom_dir/images/summary/diameter_graph.png")
            largest_slice = os.path.join(outputs_directory, first_subdirectory, "temp_dicom_dir/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 generated by the inference script
            if os.path.exists(video_path):
                st.title("Video")
                st.video(video_path, format="video/mp4")
            
            # Display the image generated by the inference script
            if os.path.exists(image_path):
                st.title("Diameter Graph")
                st.image(image_path, use_column_width=True)




    
    # finally:
    #     shutil.rmtree(temp_dir)