Spaces:
Sleeping
Sleeping
File size: 4,375 Bytes
3318510 e9f7fd2 ba1be58 affc586 3eb11cb e665ab2 ba1be58 5253012 94e3d42 84f200a d51683b ba1be58 e02146a b531d2e 6044769 bf22f2d 6044769 b531d2e e02146a b3c4662 6044769 1f4b167 43d1ecb 6044769 bf22f2d 6044769 bf22f2d 6044769 43d1ecb 6044769 |
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 |
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'
st.image(logo_image_path, width=150)
st.title("Automated Abdominal Aortic Aneurysm Detection")
@st.cache_resource
def install_dependencies():
command = "chmod +x install.sh"
subprocess.run(command, shell=True, check=True)
command = "./install.sh"
subprocess.run(command, shell=True, check=True)
@st.cache_resource
def run_inference():
command = "chmod +x inference.sh"
subprocess.run(command, shell=True, check=True)
command = "./inference.sh"
subprocess.run(command, shell=True, check=True)
def zip_and_download(directory, zip_filename):
zipf = zipfile.ZipFile(zip_filename, 'w', zipfile.ZIP_DEFLATED)
for root, _, files in os.walk(directory):
for file in files:
zipf.write(os.path.join(root, file), os.path.relpath(os.path.join(root, file), directory))
zipf.close()
with open(zip_filename, 'rb') as f:
bytes_data = f.read()
st.download_button(label="Download Outputs", data=bytes_data, file_name=zip_filename, mime="application/zip")
def search_file(start_path, target_file):
for root, _, files in os.walk(start_path):
if target_file in files:
return os.path.join(root, target_file)
return None
def fetch_outputs():
outputs_directory = "/home/user/app/C2C/outputs"
if os.path.exists(outputs_directory):
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))]
dicom_folder = dicom_subdirectories[0] if dicom_subdirectories else None
if dicom_folder:
dicom_folder_path = os.path.join(temp_dicom_dir_path, dicom_folder)
video_path = search_file(dicom_folder_path, "aaa.mp4")
image_path = search_file(dicom_folder_path, "diameter_graph.png")
largest_slice = search_file(dicom_folder_path, "out.png")
if video_path and image_path and largest_slice:
zip_filename = os.path.join("/home/user/app/C2C/temp_dicom_dir", "outputs.zip")
zip_and_download(dicom_folder_path, zip_filename)
st.title("Largest Slice")
st.image(largest_slice, use_column_width=True)
st.title("Video")
st.video(video_path, format="video/mp4")
st.title("Diameter Graph")
st.image(image_path, use_column_width=True)
else:
st.error("Output files not found")
else:
st.error("DICOM folder not found")
else:
st.warning("Output files not found")
else:
st.error("Output files not found")
def main():
st.write("Upload a ZIP file containing DICOM slices")
uploaded_zip_file = st.file_uploader("Upload a .zip file", type=["zip"])
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)
st.success("Zip file uploaded successfully")
if st.button("Analyze"):
st.success("Analysis started (expected time: 5 mins)")
run_inference()
if st.button("Fetch Outputs"):
fetch_outputs()
except Exception as e:
st.error(f"Error: {str(e)}")
if __name__ == "__main__":
main()
|