import streamlit as st import pydicom import matplotlib.pyplot as plt import zipfile import os import subprocess # Flag to track if subprocess commands have been executed subprocess_executed = False # Streamlit app title st.title("DICOM Image Viewer") # Upload a ZIP file containing DICOM slices uploaded_zip_file = st.file_uploader("Upload a ZIP file containing DICOM slices", type=["zip"]) # Function to read and display the DICOM image @st.cache(suppress_st_warning=True, show_spinner=False) 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 = "/Comp2Comp-main/temp_dicom_dir" os.makedirs(temp_dir, exist_ok=True) st.write(f"Temporary directory path: {temp_dir}") # if not subprocess_executed: # # Execute the subprocess commands only once # 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}") # 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 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)}") finally: # Clean up by removing the temporary directory for file in dicom_files: os.remove(file) os.rmdir(temp_dir) st.write("Upload a ZIP file containing DICOM slices to view the images.")