File size: 4,143 Bytes
3318510
39c2fae
 
c5601af
39c2fae
e665ab2
39c2fae
 
 
 
 
 
 
 
84f200a
d51683b
ba1be58
 
 
 
39c2fae
e02146a
b531d2e
6044769
 
bf22f2d
6044769
 
b531d2e
39c2fae
e02146a
b3c4662
6044769
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1f4b167
 
 
 
 
 
39c2fae
6044769
 
 
 
 
bf22f2d
6044769
bf22f2d
6044769
 
 
 
 
 
 
 
 
 
 
 
39c2fae
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6044769
 
 
 
39c2fae
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
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)

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

def search_file(start_path, target_file):
    for root, _, files in os.walk(start_path):
        if target_file in files:
            return os.path.join(root, target_file)
    return None

# 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 = search_file(temp_dicom_dir_path, "aaa.mp4")
                        image_path = search_file(temp_dicom_dir_path, "diameter_graph.png")
                        largest_slice = search_file(temp_dicom_dir_path, "out.png")

                        if video_path and image_path and 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("Ouput files not found")
                else:
                    st.error("Output files not found")
        except Exception as e:
            st.error(f"Error: {str(e)}")

if __name__ == "__main__":
    main()