File size: 25,908 Bytes
6c74986 7a3ac42 6c74986 b5ccc63 6c74986 b5ccc63 6c74986 7a3ac42 6c74986 7a3ac42 6c74986 7a3ac42 6c74986 b5ccc63 6c74986 b5ccc63 6c74986 |
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 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 |
{
"cells": [
{
"cell_type": "code",
"execution_count": null,
"id": "ffa49be9",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/zhu.henian/projects/bouncing-target-reference/.venv/lib/python3.10/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n",
" from .autonotebook import tqdm as notebook_tqdm\n"
]
}
],
"source": [
"import random\n",
"from pathlib import Path\n",
"\n",
"import cv2\n",
"import gradio as gr\n",
"import numpy as np\n",
"import SimpleITK\n",
"from huggingface_hub import hf_hub_download, list_repo_files\n",
"from skimage import segmentation\n",
"\n",
"IMAGES_REPO = \"LMUK-RADONC-PHYS-RES/TrackRAD2025\"\n",
"DATASET_REPO_TYPE = \"dataset\"\n",
"LABELED_FOLDER = \"trackrad2025_labeled_training_data\"\n",
"\n",
"OUT_DIR = Path(\"tmp/videos\")\n",
"\n",
"\n",
"def get_images() -> list[str]:\n",
" images_repo_files = list_repo_files(\n",
" repo_id=IMAGES_REPO,\n",
" repo_type=DATASET_REPO_TYPE,\n",
" )\n",
" image_files = [\n",
" fname\n",
" for fname in images_repo_files\n",
" if fname.startswith(LABELED_FOLDER) and fname.endswith(\"frames.mha\")\n",
" ]\n",
" return image_files\n",
"\n",
"\n",
"def download_image_files(image_file: str) -> dict[str, str]:\n",
" filename = image_file.split(\"/\")[-1]\n",
" patient = filename.rsplit(\"_\", 1)[0] # e.g., \"A_033_frames.mha\" -> \"A_033\"\n",
" frames_idx = \"\"\n",
" frames_file = hf_hub_download(\n",
" repo_id=IMAGES_REPO,\n",
" repo_type=DATASET_REPO_TYPE,\n",
" filename=f\"{LABELED_FOLDER}/{patient}/images/{patient}_frames{frames_idx}.mha\",\n",
" )\n",
" labels_file = hf_hub_download(\n",
" repo_id=IMAGES_REPO,\n",
" repo_type=DATASET_REPO_TYPE,\n",
" filename=f\"{LABELED_FOLDER}/{patient}/targets/{patient}_labels{frames_idx}.mha\",\n",
" )\n",
" field_strength_file = hf_hub_download(\n",
" repo_id=IMAGES_REPO,\n",
" repo_type=DATASET_REPO_TYPE,\n",
" filename=f\"{LABELED_FOLDER}/{patient}/b-field-strength.json\",\n",
" )\n",
" scanned_region_file = hf_hub_download(\n",
" repo_id=IMAGES_REPO,\n",
" repo_type=DATASET_REPO_TYPE,\n",
" filename=f\"{LABELED_FOLDER}/{patient}/scanned-region{frames_idx}.json\",\n",
" )\n",
" frame_rate_file = hf_hub_download(\n",
" repo_id=IMAGES_REPO,\n",
" repo_type=DATASET_REPO_TYPE,\n",
" filename=f\"{LABELED_FOLDER}/{patient}/frame-rate{frames_idx}.json\",\n",
" )\n",
" return {\n",
" \"frames_file\": frames_file,\n",
" \"labels_file\": labels_file,\n",
" \"field_strength_file\": field_strength_file,\n",
" \"scanned_region_file\": scanned_region_file,\n",
" \"frame_rate_file\": frame_rate_file,\n",
" }\n",
"\n",
"\n",
"def overlay_labels_on_frames(\n",
" frames_array, labels_array, overlay_color=\"green\", alpha=1\n",
"):\n",
" \"\"\"\n",
" Overlay binary labels on grayscale frames with a bright color.\n",
"\n",
" Parameters:\n",
" -----------\n",
" frames_array : numpy.ndarray\n",
" Grayscale image sequence of shape [X, Y, T]\n",
" labels_array : numpy.ndarray\n",
" Binary labels of shape [X, Y, T]\n",
" overlay_color : str or tuple\n",
" Color for the overlay ('red', 'green', 'blue', 'yellow', 'cyan', 'magenta')\n",
" or RGB tuple (r, g, b) with values 0-1\n",
" alpha : float\n",
" Transparency of the overlay (0=transparent, 1=opaque)\n",
"\n",
" Returns:\n",
" --------\n",
" overlaid_frames : numpy.ndarray\n",
" RGB frames with labels overlaid, shape [X, Y, T, 3]\n",
" \"\"\"\n",
"\n",
" # Normalize frames to 0-1 range if not already\n",
" frames_norm = frames_array.astype(np.float32)\n",
" if frames_norm.max() > 1.0:\n",
" frames_norm = frames_norm / frames_norm.max()\n",
"\n",
" # Convert grayscale to RGB by repeating across 3 channels\n",
" rgb_frames = np.stack([frames_norm] * 3, axis=-1) # Shape: [X, Y, T, 3]\n",
"\n",
" # Define color mapping\n",
" color_map = {\n",
" \"red\": (1.0, 0.0, 0.0),\n",
" \"green\": (0.0, 1.0, 0.0),\n",
" \"blue\": (0.0, 0.0, 1.0),\n",
" \"yellow\": (1.0, 1.0, 0.0),\n",
" \"cyan\": (0.0, 1.0, 1.0),\n",
" \"magenta\": (1.0, 0.0, 1.0),\n",
" }\n",
"\n",
" if overlay_color in color_map:\n",
" r, g, b = color_map[overlay_color]\n",
" else:\n",
" raise ValueError(\n",
" f\"Unknown color '{overlay_color}'. Use: {list(color_map.keys())} or RGB tuple\"\n",
" )\n",
"\n",
" # Create the overlaid frames\n",
" overlaid_frames = rgb_frames.copy()\n",
"\n",
" # Apply overlay where labels are True (assuming binary labels are 0/1 or False/True)\n",
" mask = segmentation.find_boundaries(labels_array, mode=\"thick\").astype(bool)\n",
"\n",
" # Blend the colors using alpha blending\n",
" overlaid_frames[mask, 0] = (1 - alpha) * rgb_frames[mask, 0] + alpha * r\n",
" overlaid_frames[mask, 1] = (1 - alpha) * rgb_frames[mask, 1] + alpha * g\n",
" overlaid_frames[mask, 2] = (1 - alpha) * rgb_frames[mask, 2] + alpha * b\n",
"\n",
" return overlaid_frames\n",
"\n",
"\n",
"def overlay_video(files: dict[str, str]):\n",
" frames = SimpleITK.ReadImage(files[\"frames_file\"])\n",
" frames_array = SimpleITK.GetArrayFromImage(frames)\n",
" # frames_array = [X,Y,T]\n",
" frames_array = np.flip(frames_array, axis=0)\n",
"\n",
" labels = SimpleITK.ReadImage(files[\"labels_file\"])\n",
" labels_array = SimpleITK.GetArrayFromImage(labels)\n",
" # labels_array = [X,Y,T]\n",
" labels_array = np.flip(labels_array, axis=0)\n",
"\n",
" overlaid_array = overlay_labels_on_frames(frames_array, labels_array)\n",
" with open(files[\"frame_rate_file\"]) as f:\n",
" fps_raw = f.read().strip()\n",
" fps = int(float(fps_raw))\n",
" output_path = numpy_to_video_opencv(\n",
" overlaid_array, files[\"frames_file\"].split(\"/\")[-1], fps=fps\n",
" )\n",
" return output_path\n",
"\n",
"\n",
"def numpy_to_video_opencv(array: np.ndarray, output_prefix: str, fps: int) -> str:\n",
" limit = 10 * fps\n",
" array_clip = array[:, :, :limit] # 10s of video\n",
" p99: float = np.percentile(array_clip, 99) # type: ignore\n",
" array_clip_normalized = cv2.convertScaleAbs(array_clip, alpha=(255.0 / p99))\n",
"\n",
" OUT_DIR.mkdir(parents=True, exist_ok=True)\n",
" output_path = str((OUT_DIR / output_prefix).with_suffix(\".mp4\"))\n",
"\n",
" # Define codec and create VideoWriter\n",
" # VP90 is supported by browsers and is available in the pip-installed opencv\n",
" fourcc = cv2.VideoWriter.fourcc(*\"avc1\")\n",
" X, Y, T, _ = array_clip.shape\n",
" bgr_frames = array_clip_normalized[:, :, :, [2, 1, 0]]\n",
" out = cv2.VideoWriter(output_path, fourcc, fps, (X, Y))\n",
" # Write frames\n",
" for t in range(T):\n",
" frame = bgr_frames[:, :, t, :]\n",
" # OpenCV expects frames in BGR format, but for grayscale we can use as-is\n",
" out.write(frame)\n",
"\n",
" out.release()\n",
" return output_path\n",
"\n",
"\n",
"choices = [\n",
" \"trackrad2025_labeled_training_data/A_001/images/A_001_frames.mha\",\n",
" \"trackrad2025_labeled_training_data/A_003/images/A_003_frames.mha\",\n",
" \"trackrad2025_labeled_training_data/A_004/images/A_004_frames.mha\",\n",
" \"trackrad2025_labeled_training_data/A_005/images/A_005_frames.mha\",\n",
" \"trackrad2025_labeled_training_data/A_006/images/A_006_frames.mha\",\n",
" \"trackrad2025_labeled_training_data/A_007/images/A_007_frames.mha\",\n",
" \"trackrad2025_labeled_training_data/A_008/images/A_008_frames.mha\",\n",
" \"trackrad2025_labeled_training_data/A_010/images/A_010_frames.mha\",\n",
" \"trackrad2025_labeled_training_data/A_011/images/A_011_frames.mha\",\n",
" \"trackrad2025_labeled_training_data/A_012/images/A_012_frames.mha\",\n",
" \"trackrad2025_labeled_training_data/A_013/images/A_013_frames.mha\",\n",
" \"trackrad2025_labeled_training_data/A_014/images/A_014_frames.mha\",\n",
" \"trackrad2025_labeled_training_data/A_016/images/A_016_frames.mha\",\n",
" \"trackrad2025_labeled_training_data/A_019/images/A_019_frames.mha\",\n",
" \"trackrad2025_labeled_training_data/A_020/images/A_020_frames.mha\",\n",
" \"trackrad2025_labeled_training_data/A_021/images/A_021_frames.mha\",\n",
" \"trackrad2025_labeled_training_data/A_022/images/A_022_frames.mha\",\n",
" \"trackrad2025_labeled_training_data/A_023/images/A_023_frames.mha\",\n",
" \"trackrad2025_labeled_training_data/A_024/images/A_024_frames.mha\",\n",
" \"trackrad2025_labeled_training_data/A_025/images/A_025_frames.mha\",\n",
" \"trackrad2025_labeled_training_data/A_026/images/A_026_frames.mha\",\n",
" \"trackrad2025_labeled_training_data/A_027/images/A_027_frames.mha\",\n",
" \"trackrad2025_labeled_training_data/A_028/images/A_028_frames.mha\",\n",
" \"trackrad2025_labeled_training_data/A_029/images/A_029_frames.mha\",\n",
" \"trackrad2025_labeled_training_data/A_032/images/A_032_frames.mha\",\n",
" \"trackrad2025_labeled_training_data/B_002/images/B_002_frames.mha\",\n",
" \"trackrad2025_labeled_training_data/B_003/images/B_003_frames.mha\",\n",
" \"trackrad2025_labeled_training_data/B_006/images/B_006_frames.mha\",\n",
" \"trackrad2025_labeled_training_data/B_007/images/B_007_frames.mha\",\n",
" \"trackrad2025_labeled_training_data/B_008/images/B_008_frames.mha\",\n",
" \"trackrad2025_labeled_training_data/B_010/images/B_010_frames.mha\",\n",
" \"trackrad2025_labeled_training_data/B_012/images/B_012_frames.mha\",\n",
" \"trackrad2025_labeled_training_data/B_017/images/B_017_frames.mha\",\n",
" \"trackrad2025_labeled_training_data/B_019/images/B_019_frames.mha\",\n",
" \"trackrad2025_labeled_training_data/B_021/images/B_021_frames.mha\",\n",
" \"trackrad2025_labeled_training_data/B_022/images/B_022_frames.mha\",\n",
" \"trackrad2025_labeled_training_data/B_023/images/B_023_frames.mha\",\n",
" \"trackrad2025_labeled_training_data/B_024/images/B_024_frames.mha\",\n",
" \"trackrad2025_labeled_training_data/B_025/images/B_025_frames.mha\",\n",
" \"trackrad2025_labeled_training_data/B_026/images/B_026_frames.mha\",\n",
" \"trackrad2025_labeled_training_data/C_001/images/C_001_frames.mha\",\n",
" \"trackrad2025_labeled_training_data/C_004/images/C_004_frames.mha\",\n",
" \"trackrad2025_labeled_training_data/C_005/images/C_005_frames.mha\",\n",
" \"trackrad2025_labeled_training_data/C_006/images/C_006_frames.mha\",\n",
" \"trackrad2025_labeled_training_data/C_008/images/C_008_frames.mha\",\n",
" \"trackrad2025_labeled_training_data/C_009/images/C_009_frames.mha\",\n",
" \"trackrad2025_labeled_training_data/C_010/images/C_010_frames.mha\",\n",
" \"trackrad2025_labeled_training_data/C_011/images/C_011_frames.mha\",\n",
" \"trackrad2025_labeled_training_data/C_012/images/C_012_frames.mha\",\n",
" \"trackrad2025_labeled_training_data/C_016/images/C_016_frames.mha\",\n",
"]"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "7f135ad4",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Processed /Users/zhu.henian/.cache/huggingface/hub/datasets--LMUK-RADONC-PHYS-RES--TrackRAD2025/snapshots/25d11e5a3f58187e40a92ef5558d965f2ee7d809/trackrad2025_labeled_training_data/A_001/images/A_001_frames.mha -> tmp/videos/A_001_frames.mp4\n",
"Processed /Users/zhu.henian/.cache/huggingface/hub/datasets--LMUK-RADONC-PHYS-RES--TrackRAD2025/snapshots/25d11e5a3f58187e40a92ef5558d965f2ee7d809/trackrad2025_labeled_training_data/A_003/images/A_003_frames.mha -> tmp/videos/A_003_frames.mp4\n",
"Processed /Users/zhu.henian/.cache/huggingface/hub/datasets--LMUK-RADONC-PHYS-RES--TrackRAD2025/snapshots/25d11e5a3f58187e40a92ef5558d965f2ee7d809/trackrad2025_labeled_training_data/A_004/images/A_004_frames.mha -> tmp/videos/A_004_frames.mp4\n",
"Processed /Users/zhu.henian/.cache/huggingface/hub/datasets--LMUK-RADONC-PHYS-RES--TrackRAD2025/snapshots/25d11e5a3f58187e40a92ef5558d965f2ee7d809/trackrad2025_labeled_training_data/A_005/images/A_005_frames.mha -> tmp/videos/A_005_frames.mp4\n",
"Processed /Users/zhu.henian/.cache/huggingface/hub/datasets--LMUK-RADONC-PHYS-RES--TrackRAD2025/snapshots/25d11e5a3f58187e40a92ef5558d965f2ee7d809/trackrad2025_labeled_training_data/A_006/images/A_006_frames.mha -> tmp/videos/A_006_frames.mp4\n",
"Processed /Users/zhu.henian/.cache/huggingface/hub/datasets--LMUK-RADONC-PHYS-RES--TrackRAD2025/snapshots/25d11e5a3f58187e40a92ef5558d965f2ee7d809/trackrad2025_labeled_training_data/A_007/images/A_007_frames.mha -> tmp/videos/A_007_frames.mp4\n",
"Processed /Users/zhu.henian/.cache/huggingface/hub/datasets--LMUK-RADONC-PHYS-RES--TrackRAD2025/snapshots/25d11e5a3f58187e40a92ef5558d965f2ee7d809/trackrad2025_labeled_training_data/A_008/images/A_008_frames.mha -> tmp/videos/A_008_frames.mp4\n",
"Processed /Users/zhu.henian/.cache/huggingface/hub/datasets--LMUK-RADONC-PHYS-RES--TrackRAD2025/snapshots/25d11e5a3f58187e40a92ef5558d965f2ee7d809/trackrad2025_labeled_training_data/A_010/images/A_010_frames.mha -> tmp/videos/A_010_frames.mp4\n",
"Processed /Users/zhu.henian/.cache/huggingface/hub/datasets--LMUK-RADONC-PHYS-RES--TrackRAD2025/snapshots/25d11e5a3f58187e40a92ef5558d965f2ee7d809/trackrad2025_labeled_training_data/A_011/images/A_011_frames.mha -> tmp/videos/A_011_frames.mp4\n",
"Processed /Users/zhu.henian/.cache/huggingface/hub/datasets--LMUK-RADONC-PHYS-RES--TrackRAD2025/snapshots/25d11e5a3f58187e40a92ef5558d965f2ee7d809/trackrad2025_labeled_training_data/A_012/images/A_012_frames.mha -> tmp/videos/A_012_frames.mp4\n",
"Processed /Users/zhu.henian/.cache/huggingface/hub/datasets--LMUK-RADONC-PHYS-RES--TrackRAD2025/snapshots/25d11e5a3f58187e40a92ef5558d965f2ee7d809/trackrad2025_labeled_training_data/A_013/images/A_013_frames.mha -> tmp/videos/A_013_frames.mp4\n",
"Processed /Users/zhu.henian/.cache/huggingface/hub/datasets--LMUK-RADONC-PHYS-RES--TrackRAD2025/snapshots/25d11e5a3f58187e40a92ef5558d965f2ee7d809/trackrad2025_labeled_training_data/A_014/images/A_014_frames.mha -> tmp/videos/A_014_frames.mp4\n",
"Processed /Users/zhu.henian/.cache/huggingface/hub/datasets--LMUK-RADONC-PHYS-RES--TrackRAD2025/snapshots/25d11e5a3f58187e40a92ef5558d965f2ee7d809/trackrad2025_labeled_training_data/A_016/images/A_016_frames.mha -> tmp/videos/A_016_frames.mp4\n",
"Processed /Users/zhu.henian/.cache/huggingface/hub/datasets--LMUK-RADONC-PHYS-RES--TrackRAD2025/snapshots/25d11e5a3f58187e40a92ef5558d965f2ee7d809/trackrad2025_labeled_training_data/A_019/images/A_019_frames.mha -> tmp/videos/A_019_frames.mp4\n",
"Processed /Users/zhu.henian/.cache/huggingface/hub/datasets--LMUK-RADONC-PHYS-RES--TrackRAD2025/snapshots/25d11e5a3f58187e40a92ef5558d965f2ee7d809/trackrad2025_labeled_training_data/A_020/images/A_020_frames.mha -> tmp/videos/A_020_frames.mp4\n",
"Processed /Users/zhu.henian/.cache/huggingface/hub/datasets--LMUK-RADONC-PHYS-RES--TrackRAD2025/snapshots/25d11e5a3f58187e40a92ef5558d965f2ee7d809/trackrad2025_labeled_training_data/A_021/images/A_021_frames.mha -> tmp/videos/A_021_frames.mp4\n",
"Processed /Users/zhu.henian/.cache/huggingface/hub/datasets--LMUK-RADONC-PHYS-RES--TrackRAD2025/snapshots/25d11e5a3f58187e40a92ef5558d965f2ee7d809/trackrad2025_labeled_training_data/A_022/images/A_022_frames.mha -> tmp/videos/A_022_frames.mp4\n",
"Processed /Users/zhu.henian/.cache/huggingface/hub/datasets--LMUK-RADONC-PHYS-RES--TrackRAD2025/snapshots/25d11e5a3f58187e40a92ef5558d965f2ee7d809/trackrad2025_labeled_training_data/A_023/images/A_023_frames.mha -> tmp/videos/A_023_frames.mp4\n",
"Processed /Users/zhu.henian/.cache/huggingface/hub/datasets--LMUK-RADONC-PHYS-RES--TrackRAD2025/snapshots/25d11e5a3f58187e40a92ef5558d965f2ee7d809/trackrad2025_labeled_training_data/A_024/images/A_024_frames.mha -> tmp/videos/A_024_frames.mp4\n",
"Processed /Users/zhu.henian/.cache/huggingface/hub/datasets--LMUK-RADONC-PHYS-RES--TrackRAD2025/snapshots/25d11e5a3f58187e40a92ef5558d965f2ee7d809/trackrad2025_labeled_training_data/A_025/images/A_025_frames.mha -> tmp/videos/A_025_frames.mp4\n",
"Processed /Users/zhu.henian/.cache/huggingface/hub/datasets--LMUK-RADONC-PHYS-RES--TrackRAD2025/snapshots/25d11e5a3f58187e40a92ef5558d965f2ee7d809/trackrad2025_labeled_training_data/A_026/images/A_026_frames.mha -> tmp/videos/A_026_frames.mp4\n",
"Processed /Users/zhu.henian/.cache/huggingface/hub/datasets--LMUK-RADONC-PHYS-RES--TrackRAD2025/snapshots/25d11e5a3f58187e40a92ef5558d965f2ee7d809/trackrad2025_labeled_training_data/A_027/images/A_027_frames.mha -> tmp/videos/A_027_frames.mp4\n",
"Processed /Users/zhu.henian/.cache/huggingface/hub/datasets--LMUK-RADONC-PHYS-RES--TrackRAD2025/snapshots/25d11e5a3f58187e40a92ef5558d965f2ee7d809/trackrad2025_labeled_training_data/A_028/images/A_028_frames.mha -> tmp/videos/A_028_frames.mp4\n",
"Processed /Users/zhu.henian/.cache/huggingface/hub/datasets--LMUK-RADONC-PHYS-RES--TrackRAD2025/snapshots/25d11e5a3f58187e40a92ef5558d965f2ee7d809/trackrad2025_labeled_training_data/A_029/images/A_029_frames.mha -> tmp/videos/A_029_frames.mp4\n",
"Processed /Users/zhu.henian/.cache/huggingface/hub/datasets--LMUK-RADONC-PHYS-RES--TrackRAD2025/snapshots/25d11e5a3f58187e40a92ef5558d965f2ee7d809/trackrad2025_labeled_training_data/A_032/images/A_032_frames.mha -> tmp/videos/A_032_frames.mp4\n",
"Processed /Users/zhu.henian/.cache/huggingface/hub/datasets--LMUK-RADONC-PHYS-RES--TrackRAD2025/snapshots/25d11e5a3f58187e40a92ef5558d965f2ee7d809/trackrad2025_labeled_training_data/B_002/images/B_002_frames.mha -> tmp/videos/B_002_frames.mp4\n",
"Processed /Users/zhu.henian/.cache/huggingface/hub/datasets--LMUK-RADONC-PHYS-RES--TrackRAD2025/snapshots/25d11e5a3f58187e40a92ef5558d965f2ee7d809/trackrad2025_labeled_training_data/B_003/images/B_003_frames.mha -> tmp/videos/B_003_frames.mp4\n",
"Processed /Users/zhu.henian/.cache/huggingface/hub/datasets--LMUK-RADONC-PHYS-RES--TrackRAD2025/snapshots/25d11e5a3f58187e40a92ef5558d965f2ee7d809/trackrad2025_labeled_training_data/B_006/images/B_006_frames.mha -> tmp/videos/B_006_frames.mp4\n",
"Processed /Users/zhu.henian/.cache/huggingface/hub/datasets--LMUK-RADONC-PHYS-RES--TrackRAD2025/snapshots/25d11e5a3f58187e40a92ef5558d965f2ee7d809/trackrad2025_labeled_training_data/B_007/images/B_007_frames.mha -> tmp/videos/B_007_frames.mp4\n",
"Processed /Users/zhu.henian/.cache/huggingface/hub/datasets--LMUK-RADONC-PHYS-RES--TrackRAD2025/snapshots/25d11e5a3f58187e40a92ef5558d965f2ee7d809/trackrad2025_labeled_training_data/B_008/images/B_008_frames.mha -> tmp/videos/B_008_frames.mp4\n",
"Processed /Users/zhu.henian/.cache/huggingface/hub/datasets--LMUK-RADONC-PHYS-RES--TrackRAD2025/snapshots/25d11e5a3f58187e40a92ef5558d965f2ee7d809/trackrad2025_labeled_training_data/B_010/images/B_010_frames.mha -> tmp/videos/B_010_frames.mp4\n",
"Processed /Users/zhu.henian/.cache/huggingface/hub/datasets--LMUK-RADONC-PHYS-RES--TrackRAD2025/snapshots/25d11e5a3f58187e40a92ef5558d965f2ee7d809/trackrad2025_labeled_training_data/B_012/images/B_012_frames.mha -> tmp/videos/B_012_frames.mp4\n",
"Processed /Users/zhu.henian/.cache/huggingface/hub/datasets--LMUK-RADONC-PHYS-RES--TrackRAD2025/snapshots/25d11e5a3f58187e40a92ef5558d965f2ee7d809/trackrad2025_labeled_training_data/B_017/images/B_017_frames.mha -> tmp/videos/B_017_frames.mp4\n",
"Processed /Users/zhu.henian/.cache/huggingface/hub/datasets--LMUK-RADONC-PHYS-RES--TrackRAD2025/snapshots/25d11e5a3f58187e40a92ef5558d965f2ee7d809/trackrad2025_labeled_training_data/B_019/images/B_019_frames.mha -> tmp/videos/B_019_frames.mp4\n",
"Processed /Users/zhu.henian/.cache/huggingface/hub/datasets--LMUK-RADONC-PHYS-RES--TrackRAD2025/snapshots/25d11e5a3f58187e40a92ef5558d965f2ee7d809/trackrad2025_labeled_training_data/B_021/images/B_021_frames.mha -> tmp/videos/B_021_frames.mp4\n",
"Processed /Users/zhu.henian/.cache/huggingface/hub/datasets--LMUK-RADONC-PHYS-RES--TrackRAD2025/snapshots/25d11e5a3f58187e40a92ef5558d965f2ee7d809/trackrad2025_labeled_training_data/B_022/images/B_022_frames.mha -> tmp/videos/B_022_frames.mp4\n",
"Processed /Users/zhu.henian/.cache/huggingface/hub/datasets--LMUK-RADONC-PHYS-RES--TrackRAD2025/snapshots/25d11e5a3f58187e40a92ef5558d965f2ee7d809/trackrad2025_labeled_training_data/B_023/images/B_023_frames.mha -> tmp/videos/B_023_frames.mp4\n",
"Processed /Users/zhu.henian/.cache/huggingface/hub/datasets--LMUK-RADONC-PHYS-RES--TrackRAD2025/snapshots/25d11e5a3f58187e40a92ef5558d965f2ee7d809/trackrad2025_labeled_training_data/B_024/images/B_024_frames.mha -> tmp/videos/B_024_frames.mp4\n",
"Processed /Users/zhu.henian/.cache/huggingface/hub/datasets--LMUK-RADONC-PHYS-RES--TrackRAD2025/snapshots/25d11e5a3f58187e40a92ef5558d965f2ee7d809/trackrad2025_labeled_training_data/B_025/images/B_025_frames.mha -> tmp/videos/B_025_frames.mp4\n",
"Processed /Users/zhu.henian/.cache/huggingface/hub/datasets--LMUK-RADONC-PHYS-RES--TrackRAD2025/snapshots/25d11e5a3f58187e40a92ef5558d965f2ee7d809/trackrad2025_labeled_training_data/B_026/images/B_026_frames.mha -> tmp/videos/B_026_frames.mp4\n",
"Processed /Users/zhu.henian/.cache/huggingface/hub/datasets--LMUK-RADONC-PHYS-RES--TrackRAD2025/snapshots/25d11e5a3f58187e40a92ef5558d965f2ee7d809/trackrad2025_labeled_training_data/C_001/images/C_001_frames.mha -> tmp/videos/C_001_frames.mp4\n",
"Processed /Users/zhu.henian/.cache/huggingface/hub/datasets--LMUK-RADONC-PHYS-RES--TrackRAD2025/snapshots/25d11e5a3f58187e40a92ef5558d965f2ee7d809/trackrad2025_labeled_training_data/C_004/images/C_004_frames.mha -> tmp/videos/C_004_frames.mp4\n",
"Processed /Users/zhu.henian/.cache/huggingface/hub/datasets--LMUK-RADONC-PHYS-RES--TrackRAD2025/snapshots/25d11e5a3f58187e40a92ef5558d965f2ee7d809/trackrad2025_labeled_training_data/C_005/images/C_005_frames.mha -> tmp/videos/C_005_frames.mp4\n",
"Processed /Users/zhu.henian/.cache/huggingface/hub/datasets--LMUK-RADONC-PHYS-RES--TrackRAD2025/snapshots/25d11e5a3f58187e40a92ef5558d965f2ee7d809/trackrad2025_labeled_training_data/C_006/images/C_006_frames.mha -> tmp/videos/C_006_frames.mp4\n",
"Processed /Users/zhu.henian/.cache/huggingface/hub/datasets--LMUK-RADONC-PHYS-RES--TrackRAD2025/snapshots/25d11e5a3f58187e40a92ef5558d965f2ee7d809/trackrad2025_labeled_training_data/C_008/images/C_008_frames.mha -> tmp/videos/C_008_frames.mp4\n",
"Processed /Users/zhu.henian/.cache/huggingface/hub/datasets--LMUK-RADONC-PHYS-RES--TrackRAD2025/snapshots/25d11e5a3f58187e40a92ef5558d965f2ee7d809/trackrad2025_labeled_training_data/C_009/images/C_009_frames.mha -> tmp/videos/C_009_frames.mp4\n",
"Processed /Users/zhu.henian/.cache/huggingface/hub/datasets--LMUK-RADONC-PHYS-RES--TrackRAD2025/snapshots/25d11e5a3f58187e40a92ef5558d965f2ee7d809/trackrad2025_labeled_training_data/C_010/images/C_010_frames.mha -> tmp/videos/C_010_frames.mp4\n",
"Processed /Users/zhu.henian/.cache/huggingface/hub/datasets--LMUK-RADONC-PHYS-RES--TrackRAD2025/snapshots/25d11e5a3f58187e40a92ef5558d965f2ee7d809/trackrad2025_labeled_training_data/C_011/images/C_011_frames.mha -> tmp/videos/C_011_frames.mp4\n",
"Processed /Users/zhu.henian/.cache/huggingface/hub/datasets--LMUK-RADONC-PHYS-RES--TrackRAD2025/snapshots/25d11e5a3f58187e40a92ef5558d965f2ee7d809/trackrad2025_labeled_training_data/C_012/images/C_012_frames.mha -> tmp/videos/C_012_frames.mp4\n",
"Processed /Users/zhu.henian/.cache/huggingface/hub/datasets--LMUK-RADONC-PHYS-RES--TrackRAD2025/snapshots/25d11e5a3f58187e40a92ef5558d965f2ee7d809/trackrad2025_labeled_training_data/C_016/images/C_016_frames.mha -> tmp/videos/C_016_frames.mp4\n"
]
}
],
"source": [
"regions = []\n",
"for choice in choices:\n",
" files = download_image_files(choice)\n",
" output_path = overlay_video(files)\n",
" print(f\"Processed {files['frames_file']} -> {output_path}\")"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "bouncing-target-reference",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.16"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
|