Download code/jl1_prep.py from fnruha0921/knps-change-detection-tmp: direct link, hf CLI and curl.
- Browser
- Download file 2.37 kB
-
https://huggingface.co/fnruha0921/knps-change-detection-tmp/resolve/main/code/jl1_prep.py
- Command line
-
hf download hf://fnruha0921/knps-change-detection-tmp/code/jl1_prep.py
-
curl -L -o jl1_prep.py https://huggingface.co/fnruha0921/knps-change-detection-tmp/resolve/main/code/jl1_prep.py
2.37 kB
| """Unpack JL1-CD into npy: jl_pre/jl_post (N,512,512,3) uint8, jl_chg (N,512,512) uint8 {0,1}. Heuristic folder roles.""" | |
| import glob, os, sys, zipfile | |
| from collections import defaultdict | |
| import cv2, numpy as np | |
| from huggingface_hub import hf_hub_download | |
| z = hf_hub_download("circleLZY/JL1-CD", "JL1-CD.zip", repo_type="dataset", local_dir="/workspace/hfd") | |
| zipfile.ZipFile(z).extractall("/workspace/jl1"); os.remove(z) | |
| imgs = [p for p in glob.glob("/workspace/jl1/**/*", recursive=True) if p.lower().endswith((".png", ".jpg", ".jpeg", ".tif", ".tiff", ".bmp"))] | |
| by_dir = defaultdict(list) | |
| for p in imgs: by_dir[os.path.dirname(p)].append(p) | |
| for d, v in sorted(by_dir.items()): print("DIR", d, len(v), flush=True) | |
| PRE = {"a", "t1", "im1", "time1", "before", "pre", "image1", "img1", "imagea"} | |
| POST = {"b", "t2", "im2", "time2", "after", "post", "image2", "img2", "imageb"} | |
| def role(d): | |
| b = os.path.basename(d).lower() | |
| if any(k in b for k in ("label", "gt", "mask", "change")): return "lab" | |
| if b in PRE: return "pre" | |
| if b in POST: return "post" | |
| return None | |
| groups = defaultdict(dict) | |
| for d, v in by_dir.items(): | |
| r = role(d) | |
| if r: groups[os.path.dirname(d)][r] = {os.path.splitext(os.path.basename(p))[0]: p for p in v} | |
| pre, post, chg = [], [], [] | |
| for g, roles in sorted(groups.items()): | |
| if not {"pre", "post", "lab"} <= set(roles): print("skip group", g, list(roles)); continue | |
| keys = sorted(set(roles["pre"]) & set(roles["post"]) & set(roles["lab"])) | |
| print("GROUP", g, len(keys), flush=True) | |
| for k in keys: | |
| a = cv2.cvtColor(cv2.imread(roles["pre"][k], cv2.IMREAD_COLOR), cv2.COLOR_BGR2RGB) | |
| b = cv2.cvtColor(cv2.imread(roles["post"][k], cv2.IMREAD_COLOR), cv2.COLOR_BGR2RGB) | |
| l = cv2.imread(roles["lab"][k], cv2.IMREAD_GRAYSCALE) | |
| if a.shape[:2] != (512, 512) or b.shape != a.shape or l.shape != a.shape[:2]: continue | |
| pre.append(a); post.append(b); chg.append((l > 0).astype(np.uint8)) | |
| pre, post, chg = np.stack(pre), np.stack(post), np.stack(chg) | |
| os.makedirs("/workspace/prep", exist_ok=True) | |
| np.save("/workspace/prep/jl_pre.npy", pre); np.save("/workspace/prep/jl_post.npy", post); np.save("/workspace/prep/jl_chg.npy", chg) | |
| print("JL1_DONE", pre.shape, "change frac", round(float(chg.mean()), 4), "pairs with change", int((chg.reshape(len(chg), -1).sum(1) >= 20).sum()), flush=True) | |