File size: 3,815 Bytes
3318510
e9f7fd2
affc586
3eb11cb
e665ab2
5253012
94e3d42
84f200a
6044769
e02146a
b531d2e
6044769
 
bf22f2d
6044769
 
b531d2e
6044769
e02146a
b3c4662
6044769
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
bf22f2d
6044769
bf22f2d
6044769
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e02146a
 
 
 
 
 
 
 
 
6044769
 
 
 
50f84d0
6044769
 
 
 
 
 
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
import streamlit as st
import pydicom
import zipfile
import os
import subprocess

subprocess_executed = False

# Function to install dependencies
@st.cache_resource
def install_dependencies():
    command = "chmod +x install.sh"
    subprocess.run(command, shell=True, check=True)

    command = "./install.sh"
    subprocess.run(command, shell=True, check=True)

# Function to run inference
@st.cache_resource
def run_inference():
    command = "chmod +x inference.sh"
    subprocess.run(command, shell=True, check=True)

    command = "./inference.sh"
    subprocess.run(command, shell=True, check=True)

# Function to zip and download files
def zip_and_download(directory, zip_filename):
    zipf = zipfile.ZipFile(zip_filename, 'w', zipfile.ZIP_DEFLATED)
    for root, _, files in os.walk(directory):
        for file in files:
            zipf.write(os.path.join(root, file), os.path.relpath(os.path.join(root, file), directory))
    zipf.close()

    with open(zip_filename, 'rb') as f:
        bytes_data = f.read()
    st.download_button(label="Download Outputs", data=bytes_data, file_name=zip_filename, mime="application/zip")

# Main Streamlit code
def main():
    st.write("Upload a ZIP file containing DICOM slices")
    uploaded_zip_file = st.file_uploader("Upload a .zip file", type=["zip"])

    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)

            st.success("Zip file uploaded successfully")

            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):
                    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")

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

                        if os.path.exists(video_path) and os.path.exists(image_path) and os.path.exists(largest_slice):
                            zip_filename = os.path.join(temp_dir, "outputs.zip")
                            zip_and_download(temp_dicom_dir_path, zip_filename)

                            st.title("Largest Slice")
                            st.image(largest_slice, use_column_width=True)

                            st.title("Video")
                            st.video(video_path, format="video/mp4")

                            st.title("Diameter Graph")
                            st.image(image_path, use_column_width=True)
                        else:
                            st.error("Output files not found.")
                    else:
                        st.warning("No subdirectories found inside 'outputs'.")
                else:
                    st.error("The 'outputs' directory does not exist.")
        except Exception as e:
            st.error(f"Error: {str(e)}")

if __name__ == "__main__":
    main()