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 # Upload a ZIP file containing DICOM slices 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) 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.") install_script_executed = True except subprocess.CalledProcessError as e: print(f"Error while running the script: {e}") @st.cache_resource def run_inference(): command = "chmod +x inference.sh" try: subprocess.run(command, shell=True, check=True) print("Script 'inference.sh' has been made executable.") 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 running the script: {e}") 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) full_path = os.path.abspath(temp_dir) st.success("Zip file uploaded successfully") 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() # Sort the files except Exception as e: st.error(f"Error: {str(e)}") if st.button("Analyze"): st.success("Analysis started (expected time: 5 mins)") run_inference() # Assuming the 'outputs' directory is located at "/home/user/app/C2C/comp2comp/outputs" outputs_directory = "/home/user/app/C2C/outputs" # Get a list of subdirectories inside the 'outputs' directory subdirectories = [subdir for subdir in os.listdir(outputs_directory) if os.path.isdir(os.path.join(outputs_directory, subdir))] # Use the first (or only) subdirectory, or None if there are no subdirectories first_subdirectory = subdirectories[0] if subdirectories else None if first_subdirectory: # Construct the paths to the video and image files inside the first subdirectory subdirectory_path = os.path.join(outputs_directory, first_subdirectory) temp_dicom_dir_path = os.path.join(subdirectory_path, "temp_dicom_dir") # Get a list of subdirectories inside the 'temp_dicom_dir' directory dicom_subdirectories = [subdir for subdir in os.listdir(temp_dicom_dir_path) if os.path.isdir(os.path.join(temp_dicom_dir_path, subdir))] # Use the first (or only) subdirectory inside 'temp_dicom_dir', or None if there are none 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) # Display the video generated by the inference script if os.path.exists(video_path): st.title("Video") st.video(video_path, format="video/mp4") # Display the image generated by the inference script 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.")