ci-net / code /labeling /src /label.py
lsh9034's picture
Add files using upload-large-folder tool
7da2ecb verified
Raw History Blame Contribute Delete
2.4 kB
"""Run the three labeling stages in order."""
from __future__ import annotations
import argparse
import json
import subprocess
import sys
from pathlib import Path
from src.config import load_config
STAGES = (
("step1", "src.step1_region_growing", "step1_region_growing"),
("step2", "src.step2_temporal_overlap", "step2_temporal_overlap"),
("step3", "src.step3_mature_cloud_masking", "step3_mature_cloud_masking"),
)
def main(argv: list[str] | None = None) -> None:
parser = argparse.ArgumentParser(description="Run all CI-Net labeling stages.")
parser.add_argument("--config", required=True, help="Master YAML configuration path")
parser.add_argument("--device", default=None, help="Accepted for a common CLI; labeling runs on CPU")
parser.add_argument("--output-dir", default=None, help="Override the configured labeling output root")
args = parser.parse_args(argv)
config = load_config(args.config)
output_root = Path(args.output_dir or config["output_dir"]).resolve()
output_root.mkdir(parents=True, exist_ok=True)
configs = config.get("stages", {})
previous_output: Path | None = None
for name, module, output_name in STAGES:
stage = dict(configs[name])
stage_output = output_root / output_name
if name == "step1":
stage["output_root"] = str(stage_output)
stage["input_root"] = str(Path(config["input_root"]).resolve())
elif name == "step2":
stage["region_root"] = str(previous_output)
stage["bt_root"] = str(Path(config["input_root"]).resolve())
stage["output_dir"] = str(stage_output)
else:
stage["label_root"] = str(previous_output)
stage["links_root"] = str(previous_output)
stage["bt_root"] = str(Path(config["input_root"]).resolve())
stage["hsr_root"] = str(Path(config["input_root"]).resolve())
stage["output_dir"] = str(stage_output)
runtime = output_root / f"{name}_runtime.json"
with runtime.open("w", encoding="utf-8") as stream:
json.dump(stage, stream, indent=2, ensure_ascii=False)
try:
subprocess.run([sys.executable, "-m", module, "--config", str(runtime)], check=True)
finally:
runtime.unlink(missing_ok=True)
previous_output = stage_output
if __name__ == "__main__":
main()