CT_Segmentation / download_slicer_samples.py
TDHarshithReddy's picture
Add teeth CT sample, upgrade Gradio to 4.44.1, and fix app config
c4c873f
import urllib.request
import os
import SimpleITK as sitk
SAMPLES = [
{
"name": "sample_ct_chest.nii.gz",
"url": "https://github.com/Slicer/SlicerTestingData/releases/download/SHA256/4507b664690840abb6cb9af2d919377ffc4ef75b167cb6fd0f747befdb12e38e"
},
{
"name": "sample_ct_abdomen_panoramix.nii.gz",
"url": "https://github.com/Slicer/SlicerTestingData/releases/download/SHA256/146af87511520c500a3706b7b2bfb545f40d5d04dd180be3a7a2c6940e447433"
},
{
"name": "sample_ct_cardio.nii.gz",
"url": "https://github.com/Slicer/SlicerTestingData/releases/download/SHA256/3b0d4eb1a7d8ebb0c5a89cc0504640f76a030b4e869e33ff34c564c3d3b88ad2"
},
{
"name": "sample_ct_liver.nii.gz",
"url": "https://github.com/Slicer/SlicerTestingData/releases/download/SHA256/e16eae0ae6fefa858c5c11e58f0f1bb81834d81b7102e021571056324ef6f37e"
},
{
"name": "sample_ct_teeth.nii.gz",
"url": "https://github.com/Slicer/SlicerTestingData/releases/download/SHA256/7bfa16945629c319a439f414cfb7edddd2a97ba97753e12eede3b56a0eb09968",
"source_ext": ".gipl.gz"
}
]
def download_and_convert():
examples_dir = "examples"
os.makedirs(examples_dir, exist_ok=True)
for sample in SAMPLES:
output_path = os.path.join(examples_dir, sample["name"])
if "source_ext" in sample:
temp_ext = sample["source_ext"]
elif "gipl.gz" in sample["name"] or "gipl.gz" in sample["url"]:
temp_ext = ".gipl.gz"
elif "nii.gz" in sample["name"]:
temp_ext = ".nii.gz"
else:
temp_ext = ".nrrd"
print(f"DEBUG: sample={sample['name']}, source_ext={sample.get('source_ext')}, temp_ext={temp_ext}")
temp_file = os.path.join(examples_dir, f"temp_download{temp_ext}")
if os.path.exists(output_path):
print(f"Skipping {sample['name']}, already exists.")
continue
print(f"Downloading {sample['name']} from {sample['url']}...")
try:
# Use a custom generic compatible header to avoid 403 blocks sometimes
opener = urllib.request.build_opener()
opener.addheaders = [('User-agent', 'Mozilla/5.0')]
urllib.request.install_opener(opener)
urllib.request.urlretrieve(sample['url'], temp_file)
print(f" Converting {temp_ext} to NIfTI...")
img = sitk.ReadImage(temp_file)
sitk.WriteImage(img, output_path)
os.remove(temp_file)
print(f" ✓ Success: {output_path}")
except Exception as e:
print(f" ✗ Failed: {e}")
if os.path.exists(temp_file):
os.remove(temp_file)
if __name__ == "__main__":
download_and_convert()