aaa_web_app / app.py
AdritRao's picture
Update app.py
e6e540c verified
raw
history blame
5.01 kB
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.")