aaa_web_app / app.py
AdritRao's picture
Update app.py
8c3b194
raw
history blame
5.07 kB
import streamlit as st
import pydicom
import matplotlib.pyplot as plt
import zipfile
import os
import subprocess
from datetime import datetime
import shutil
# Flag to track if subprocess commands have been executed
subprocess_executed = False
# Streamlit app title
st.markdown("<h1 style='text-align: center;'>A<sup>4</sup></h1>", unsafe_allow_html=True)
st.subheader("Automated AAA Diameter Measurements")
# Upload a ZIP file containing DICOM slices
uploaded_zip_file = st.file_uploader("Upload a ZIP file containing DICOM slices", type=["zip"])
st.write("Upload a ZIP file containing DICOM slices to view the images.")
# Function to read and display the DICOM image
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 = "/home/user/app/C2C/temp_dicom_dir"
os.makedirs(temp_dir, exist_ok=True)
full_path = os.path.abspath(temp_dir)
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)}")
if st.button("Analyze"):
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}")
subprocess_executed = True
if subprocess_executed:
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
# 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
video_path = os.path.join(outputs_directory, first_subdirectory, "temp_dicom_dir/images/summary/aaa.mp4")
image_path = os.path.join(outputs_directory, first_subdirectory, "temp_dicom_dir/images/summary/diameter_graph.png")
largest_slice = os.path.join(outputs_directory, first_subdirectory, "temp_dicom_dir/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)
# finally:
# shutil.rmtree(temp_dir)