#!/usr/bin/env python3 from __future__ import annotations import argparse,csv,json from pathlib import Path def main(): p=argparse.ArgumentParser(); p.add_argument("--outputs",type=Path,required=True); p.add_argument("--csv",type=Path,required=True); a=p.parse_args() rows=[] for family in ("rtdetr","fasterrcnn","ssdlite"): for domain in ("D_B","D_L"): root=a.outputs/family/domain; test=root/"test_metrics.json"; meta=root/"run_metadata.json" if test.exists() and meta.exists(): metrics=json.loads(test.read_text()); m=json.loads(meta.read_text()); rows.append({"detector":family,"training_domain":domain,"params":m["params"],**{f"{k}_{s}":v for k,x in metrics.items() for s,v in x.items()}}) fields=sorted({k for r in rows for k in r}); a.csv.parent.mkdir(parents=True,exist_ok=True) with a.csv.open("w",newline="") as f: w=csv.DictWriter(f,fieldnames=fields);w.writeheader();w.writerows(rows) if __name__=="__main__":main()