File size: 4,126 Bytes
3318510
e9f7fd2
ba1be58
affc586
3eb11cb
e665ab2
ba1be58
 
 
 
 
 
5253012
94e3d42
84f200a
d51683b
ba1be58
d11206a
ba1be58
 
 
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
100
101
102
103
104
105
106
107
108
109
110
111
112
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'


st.image(logo_image_path, width=150)
st.title("Automated Abdominal Aortic Aneurysm Detection")

# 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()