Chris Leo commited on
Commit
d77d4f3
·
verified ·
1 Parent(s): a58cebd

scorevision: push artifact

Browse files
detect_crime_ops/scripts/log_challenge.py ADDED
@@ -0,0 +1,117 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ from __future__ import annotations
3
+
4
+ import argparse
5
+ import csv
6
+ from datetime import datetime, timezone
7
+ from pathlib import Path
8
+
9
+ FIELDS = [
10
+ "timestamp_utc",
11
+ "challenge_id",
12
+ "scene",
13
+ "lighting",
14
+ "camera_angle",
15
+ "motion_blur",
16
+ "crowd_level",
17
+ "my_model_id",
18
+ "my_score",
19
+ "king_model_id",
20
+ "king_score",
21
+ "delta_score",
22
+ "my_pred_count",
23
+ "king_pred_count",
24
+ "my_latency_p50_ms",
25
+ "my_latency_p95_ms",
26
+ "my_latency_p99_ms",
27
+ "dropped_frames",
28
+ "timeout_count",
29
+ "balaclava_hits",
30
+ "bat_hits",
31
+ "glove_hits",
32
+ "graffiti_hits",
33
+ "hoodie_hits",
34
+ "spray_paint_hits",
35
+ "tag_list",
36
+ "data_source_mix",
37
+ "notes",
38
+ ]
39
+
40
+
41
+ def main() -> int:
42
+ ap = argparse.ArgumentParser()
43
+ ap.add_argument("--csv", required=True)
44
+ ap.add_argument("--challenge-id", required=True)
45
+ ap.add_argument("--scene", default="")
46
+ ap.add_argument("--lighting", default="")
47
+ ap.add_argument("--camera-angle", default="")
48
+ ap.add_argument("--motion-blur", default="")
49
+ ap.add_argument("--crowd-level", default="")
50
+ ap.add_argument("--my-model-id", required=True)
51
+ ap.add_argument("--my-score", type=float, required=True)
52
+ ap.add_argument("--king-model-id", default="alfred8995/crime001")
53
+ ap.add_argument("--king-score", type=float, required=True)
54
+ ap.add_argument("--my-preds", type=int, default=0)
55
+ ap.add_argument("--king-preds", type=int, default=0)
56
+ ap.add_argument("--p50-ms", type=float, default=0.0)
57
+ ap.add_argument("--p95-ms", type=float, default=0.0)
58
+ ap.add_argument("--p99-ms", type=float, default=0.0)
59
+ ap.add_argument("--dropped-frames", type=int, default=0)
60
+ ap.add_argument("--timeouts", type=int, default=0)
61
+ ap.add_argument("--balaclava-hits", type=int, default=0)
62
+ ap.add_argument("--bat-hits", type=int, default=0)
63
+ ap.add_argument("--glove-hits", type=int, default=0)
64
+ ap.add_argument("--graffiti-hits", type=int, default=0)
65
+ ap.add_argument("--hoodie-hits", type=int, default=0)
66
+ ap.add_argument("--spray-paint-hits", type=int, default=0)
67
+ ap.add_argument("--tags", default="")
68
+ ap.add_argument("--data-sources", default="")
69
+ ap.add_argument("--notes", default="")
70
+ args = ap.parse_args()
71
+
72
+ out = Path(args.csv)
73
+ out.parent.mkdir(parents=True, exist_ok=True)
74
+ new_file = not out.exists()
75
+ row = {
76
+ "timestamp_utc": datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ"),
77
+ "challenge_id": args.challenge_id,
78
+ "scene": args.scene,
79
+ "lighting": args.lighting,
80
+ "camera_angle": args.camera_angle,
81
+ "motion_blur": args.motion_blur,
82
+ "crowd_level": args.crowd_level,
83
+ "my_model_id": args.my_model_id,
84
+ "my_score": args.my_score,
85
+ "king_model_id": args.king_model_id,
86
+ "king_score": args.king_score,
87
+ "delta_score": round(args.my_score - args.king_score, 6),
88
+ "my_pred_count": args.my_preds,
89
+ "king_pred_count": args.king_preds,
90
+ "my_latency_p50_ms": args.p50_ms,
91
+ "my_latency_p95_ms": args.p95_ms,
92
+ "my_latency_p99_ms": args.p99_ms,
93
+ "dropped_frames": args.dropped_frames,
94
+ "timeout_count": args.timeouts,
95
+ "balaclava_hits": args.balaclava_hits,
96
+ "bat_hits": args.bat_hits,
97
+ "glove_hits": args.glove_hits,
98
+ "graffiti_hits": args.graffiti_hits,
99
+ "hoodie_hits": args.hoodie_hits,
100
+ "spray_paint_hits": args.spray_paint_hits,
101
+ "tag_list": args.tags,
102
+ "data_source_mix": args.data_sources,
103
+ "notes": args.notes,
104
+ }
105
+
106
+ with out.open("a", newline="") as f:
107
+ w = csv.DictWriter(f, fieldnames=FIELDS)
108
+ if new_file:
109
+ w.writeheader()
110
+ w.writerow(row)
111
+
112
+ print(f"[ok] logged challenge {args.challenge_id} delta={row['delta_score']:+.4f}")
113
+ return 0
114
+
115
+
116
+ if __name__ == "__main__":
117
+ raise SystemExit(main())