Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| import numpy as np | |
| from apps.data_preprocessing import preprocess_input | |
| import os | |
| import tempfile | |
| import nibabel as nib | |
| st.title("NIfTI File Uploader and Video Generator") | |
| st.write("This tool accepts NIfTI `.nii` or `.nii.gz` files smaller than a specific size.") | |
| uploaded_file = st.file_uploader("Upload a NIfTI file (.nii or .nii.gz)", type=["nii", "nii.gz"]) | |
| if uploaded_file is not None: | |
| with tempfile.TemporaryDirectory() as temp_dir: | |
| try: | |
| # Save uploaded file to a temporary location | |
| nifti_path = os.path.join(temp_dir, "uploaded_file.nii.gz") | |
| with open(nifti_path, "wb") as f: | |
| f.write(uploaded_file.read()) | |
| # Preprocess the uploaded NIfTI file | |
| output_tensor, dataset = preprocess_input(nifti_path) | |
| imgs = dataset[0]["CT"]["data"] | |
| pred = output_tensor.argmax(0) | |
| numpy_array = pred.numpy().astype(np.int16) | |
| affine = np.eye(4) | |
| # Save finalized mask | |
| mask_path = os.path.join(temp_dir, "finalized_mask.nii") | |
| nifti_image_mask = nib.Nifti1Image(numpy_array, affine) | |
| nib.save(nifti_image_mask, mask_path) | |
| # Save finalized image | |
| nifti_array = imgs.squeeze(0).numpy() | |
| image_path = os.path.join(temp_dir, "finalized_image.nii.gz") | |
| nifti_image_img = nib.Nifti1Image(nifti_array, affine) | |
| nib.save(nifti_image_img, image_path) | |
| # Provide download buttons for the finalized files | |
| with open(mask_path, "rb") as f: | |
| st.download_button( | |
| label="Download Finalized Mask", | |
| data=f, | |
| file_name="finalized_mask.nii", | |
| mime="application/octet-stream" | |
| ) | |
| with open(image_path, "rb") as f: | |
| st.download_button( | |
| label="Download Finalized Image", | |
| data=f, | |
| file_name="finalized_image.nii.gz", | |
| mime="application/octet-stream" | |
| ) | |
| except Exception as e: | |
| st.error(f"An error occurred: {e}") | |
| else: | |
| st.info("Please upload a NIfTI file to generate the video.") | |