import argparse from pathlib import Path from rectificationclasses.rectification import Rectification def parse_args(): parser = argparse.ArgumentParser(description="Batch stereo rectification") parser.add_argument("--project", type=str, required=True, help="Project name used for Calib-data and processing_data (e.g. Olsen_wings)") parser.add_argument( "--raw_project", type=str, default=None, help="Project name used in 3D-Scans (default: project with '_' replaced by '-')", ) parser.add_argument("--date", type=str, required=True, help="Date folder (e.g. 2026-05-12)") parser.add_argument( "--session", type=str, default=None, help="Process only this session folder (e.g. session53). Default: all sessions under the date.", ) parser.add_argument("--calib_name", type=str, default="calib1", help="Calibration folder under Calib-data///") parser.add_argument( "--pairs", type=str, default="lc-rc,lc-rg,lc-ir", help="Comma-separated pair list, e.g. lc-rc,lc-rg,lc-ir", ) parser.add_argument( "--keep_lc_from_pair", type=str, default="lc-rc", help="Pair whose rectified LC frames are kept in 02_rect_images.", ) parser.add_argument( "--source_date_root", type=str, default=None, help="Override source root (default: ~/3D-Scans//)", ) parser.add_argument( "--calib_params_dir", type=str, default=None, help="Override calib params dir (default: ~/Calib-data////params)", ) parser.add_argument( "--processing_date_root", type=str, default=None, help="Override processing target root (default: ~/Speckle-Scanner_Processing_data//)", ) return parser.parse_args() def main(): args = parse_args() home = Path.home() raw_project = args.raw_project or args.project.replace("_", "-") pairs = tuple([p.strip() for p in args.pairs.split(",") if p.strip()]) source_date_root = Path(args.source_date_root) if args.source_date_root else ( home / "3D-Scans" / raw_project / args.date ) calib_params_dir = Path(args.calib_params_dir) if args.calib_params_dir else ( home / "Calib-data" / args.project / args.date / args.calib_name / "params" ) processing_date_root = Path(args.processing_date_root) if args.processing_date_root else ( home / "Speckle-Scanner_Processing_data" / args.project / args.date ) rectificator = Rectification( source_date_root=str(source_date_root), calib_params_dir=str(calib_params_dir), processing_date_root=str(processing_date_root), pairs=pairs, keep_lc_from_pair=args.keep_lc_from_pair, session_filter=args.session, ) rectificator.run_batch() if __name__ == "__main__": main()