Spaces:
Sleeping
Sleeping
File size: 5,337 Bytes
3318510 e9f7fd2 bf22f2d affc586 3eb11cb e665ab2 bf22f2d 5253012 94e3d42 84f200a 45f9554 bf22f2d 45f9554 747d9f4 bf22f2d 9eed4fa b531d2e bf22f2d b531d2e b3c4662 bf22f2d de16dcc a741fc7 b3c4662 b531d2e de16dcc 7a0b4da de16dcc 3281da3 60f23bc 807f381 057ede6 807f381 d17c251 de16dcc 94985b8 bf22f2d 94985b8 bf22f2d 94985b8 bf22f2d b531d2e 807f381 b531d2e 9eed4fa 36ee72b de16dcc a741fc7 bf22f2d de16dcc 36ee72b de16dcc 36ee72b bf22f2d 36ee72b bf22f2d 36ee72b de16dcc |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
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
# logo_image_path = '1.png' # Replace with your logo image path or URL
# # Display the logo at the top of the page
# st.image(logo_image_path, width=150)
# st.title("Automated Abdominal Aortic Aneurysm Detection")
# 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}")
def zip_dir(directory, zip_filename):
with zipfile.ZipFile(zip_filename, 'w', zipfile.ZIP_DEFLATED) as zipf:
for root, dirs, files in os.walk(directory):
for file in files:
zipf.write(os.path.join(root, file), os.path.relpath(os.path.join(root, file), os.path.join(directory, '..')))
uploaded_zip_file = st.file_uploader("Upload a .zip file", type=["zip"], key="zip_uploader")
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()
# Anonymize DICOM files
for file_path in dicom_files:
ds = pydicom.dcmread(file_path)
# Anonymize personal information
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"
if os.path.exists(outputs_directory):
zip_filename = "/home/user/app/C2C/outputs.zip"
zip_dir(outputs_directory, zip_filename)
st.markdown(f"Download your outputs [here](/{zip_filename})", key="download_link")
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)
# Display the video
if os.path.exists(video_path):
st.title("Video")
st.video(video_path, format="video/mp4")
# Display the image
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.") |