"""Fetch a small real DeepFly3D sample from Harvard Dataverse. The DeepFly3D experiment zips are ~750 MB each, but store the 7-camera JPEG frames *uncompressed* — so a partial HTTP range download of the first few MB is enough to extract real frames. This builds a 7-camera montage for inspection. Note: these are markerless real images at native resolution (960×480 per camera); the `fast` engine (color-marker triangulation on a synthetic rig) cannot reconstruct 3D from them — that needs the real `deepfly3d` engine. This loader brings the real data in for viewing / for the deep pipeline. Usage: python -m scripts.fetch_deepfly3d [datafile_id] [megabytes] [out_dir] Dataverse DeepFly3D (aDN>CsChrimson): doi:10.7910/DVN/S4L4KX """ from __future__ import annotations import io import re import struct import sys import urllib.request from collections import defaultdict from pathlib import Path import numpy as np import tifffile from PIL import Image from core.io import APP_TMP_DIR, register_protected DATAVERSE = "https://dataverse.harvard.edu/api/access/datafile/" def _range_download(datafile_id: int, mb: int) -> bytes: url = f"{DATAVERSE}{datafile_id}" req = urllib.request.Request(url, headers={ "Range": f"bytes=0-{mb * 1_000_000}", "User-Agent": "Mozilla/5.0 (imaging-plaza runnable-example)", }) with urllib.request.urlopen(req) as r: return r.read() def _extract_jpgs(data: bytes) -> dict: imgs, i = {}, 0 while True: j = data.find(b"PK\x03\x04", i) if j < 0 or j + 30 > len(data): break _, _, _, comp, _, _, _, csize, _, fnl, efl = struct.unpack(" int: datafile_id = int(sys.argv[1]) if len(sys.argv) > 1 else 3443269 mb = int(sys.argv[2]) if len(sys.argv) > 2 else 30 out_dir = Path(sys.argv[3]) if len(sys.argv) > 3 else APP_TMP_DIR print(f"range-downloading first {mb} MB of Dataverse datafile {datafile_id}…") imgs = _extract_jpgs(_range_download(datafile_id, mb)) bycam = defaultdict(list) for n in imgs: m = re.search(r"camera_(\d)_img_(\d+)", n) if m: bycam[int(m.group(1))].append((int(m.group(2)), n)) print(f"extracted {len(imgs)} real frames; cameras present: {sorted(bycam)}") tiles, native = [], None for cam in range(7): if bycam.get(cam): im = Image.open(io.BytesIO(imgs[sorted(bycam[cam])[0][1]])) native = im.size tiles.append(np.array(im.convert("L").resize((200, 200)))) else: tiles.append(np.zeros((200, 200), np.uint8)) tiles.append(np.zeros((200, 200), np.uint8)) grid = np.block([[tiles[0], tiles[1], tiles[2], tiles[3]], [tiles[4], tiles[5], tiles[6], tiles[7]]]) out_dir.mkdir(parents=True, exist_ok=True) montage = out_dir / "deepfly3d_real.tif" tifffile.imwrite(montage, grid) register_protected(montage) png = out_dir / "deepfly3d_real.png" Image.fromarray(grid).save(png) register_protected(png) print(f"wrote {montage} (7 real cameras, native {native})") return 0 if __name__ == "__main__": sys.exit(main())