"""Run only ball/player tracking and soccer-state extraction. Examples: python preprocess.py --init-config configs/tracking_states.json python preprocess.py --config configs/tracking_states.json """ from __future__ import annotations import argparse import json from soccer_ad.preprocessing.pipeline import ( load_preprocessing_config, run_preprocessing, write_preprocessing_config, ) from soccer_ad.utils.logging import setup_logging def main() -> int: parser = argparse.ArgumentParser(description="Soccer ball/player tracking and state extraction") choice = parser.add_mutually_exclusive_group(required=True) choice.add_argument("--config", help="JSON preprocessing configuration") choice.add_argument("--init-config", metavar="PATH", help="write an editable JSON template and exit") parser.add_argument("--log-level", default="INFO") args = parser.parse_args() setup_logging(args.log_level) if args.init_config: path = write_preprocessing_config(args.init_config) print(f"wrote {path}") return 0 try: report = run_preprocessing(load_preprocessing_config(args.config)) except Exception as exc: parser.error(str(exc)) print(json.dumps(report, indent=2)) return 0 if report["summary"]["failed"] == 0 else 1 if __name__ == "__main__": raise SystemExit(main())