import streamlit as st import pydicom import zipfile import os import subprocess subprocess_executed = False logo_image_path = '1.png' st.image(logo_image_path, width=150) st.title("Automated Abdominal Aortic Aneurysm Detection") 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) except subprocess.CalledProcessError as e: pass command = "./install.sh" try: subprocess.run(command, shell=True, check=True) except subprocess.CalledProcessError as e: pass @st.cache_resource def run_inference(): command = "chmod +x inference.sh" try: subprocess.run(command, shell=True, check=True) except subprocess.CalledProcessError as e: pass command = "./inference.sh" try: subprocess.run(command, shell=True, check=True) except subprocess.CalledProcessError as e: pass def create_zip_file(): outputs_directory = "/home/user/app/C2C/outputs" 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") largest_slice = os.path.join(temp_dicom_dir_path, "largest_slice.png") diameter_graph = os.path.join(temp_dicom_dir_path, "diameter_graph.png") video_path = os.path.join(temp_dicom_dir_path, "video.mp4") files_to_zip = [largest_slice, diameter_graph, video_path] zip_file_path = os.path.join(outputs_directory, "outputs.zip") with zipfile.ZipFile(zip_file_path, 'w') as zipf: for file in files_to_zip: zipf.write(file, os.path.basename(file)) return zip_file_path else: return None 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() for file_path in dicom_files: ds = pydicom.dcmread(file_path) 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" zip_file_path = create_zip_file() if zip_file_path: st.success("Analysis completed. Click the button below to download the outputs.") st.download_button(label="Download Outputs", data=zip_file_path, file_name="outputs.zip", mime="application/zip") 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) if os.path.exists(video_path): st.title("Video") st.video(video_path, format="video/mp4") 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.")