diff --git a/scripts/speed_limit_vision/evaluate_runtime_manifest.py b/scripts/speed_limit_vision/evaluate_runtime_manifest.py
index 1af9a2292..d4727b5f2 100644
--- a/scripts/speed_limit_vision/evaluate_runtime_manifest.py
+++ b/scripts/speed_limit_vision/evaluate_runtime_manifest.py
@@ -25,6 +25,8 @@ def parse_args() -> argparse.Namespace:
parser.add_argument("--max-rows", type=int, default=0, help="Optional cap after filtering.")
parser.add_argument("--seed", type=int, default=0, help="Sampling seed used with --max-rows.")
parser.add_argument("--output-csv", type=Path, help="Optional per-row prediction output.")
+ parser.add_argument("--detector-min-confidence", type=float, help="Override runtime US detector confidence threshold.")
+ parser.add_argument("--classifier-min-confidence", type=float, help="Override runtime US classifier confidence threshold.")
parser.add_argument("--strict-positive-recall", type=float, help="Exit non-zero if positive exact recall is below this value.")
parser.add_argument("--strict-negative-fpr", type=float, help="Exit non-zero if negative false-positive rate is above this value.")
return parser.parse_args()
@@ -91,6 +93,10 @@ def main() -> int:
slv.US_DETECTOR_MODEL_PATH = detector_path
slv.US_CLASSIFIER_MODEL_PATH = classifier_path
+ if args.detector_min_confidence is not None:
+ slv.US_DETECTOR_MIN_CONFIDENCE = args.detector_min_confidence
+ if args.classifier_min_confidence is not None:
+ slv.US_CLASSIFIER_MIN_CONFIDENCE = args.classifier_min_confidence
daemon = slv.SpeedLimitVisionDaemon(use_runtime=False)
output_rows: list[dict[str, str]] = []
diff --git a/scripts/speed_limit_vision/serve_manual_review_queue.py b/scripts/speed_limit_vision/serve_manual_review_queue.py
index 0eb41c442..9fbecec17 100644
--- a/scripts/speed_limit_vision/serve_manual_review_queue.py
+++ b/scripts/speed_limit_vision/serve_manual_review_queue.py
@@ -50,6 +50,9 @@ HTML = r"""
.images { display: grid; gap: 12px; align-content: start; }
.panel { background: #181818; border: 1px solid #303030; border-radius: 8px; padding: 10px; }
.imageWrap { display: grid; place-items: center; background: #050505; border-radius: 6px; min-height: 160px; overflow: hidden; }
+ .frameStage { position: relative; display: inline-block; max-width: 100%; }
+ .frameStage img { display: block; }
+ #bboxCanvas { position: absolute; inset: 0; width: 100%; height: 100%; cursor: crosshair; touch-action: none; }
img { max-width: 100%; max-height: 52vh; object-fit: contain; }
.crop img { image-rendering: auto; max-height: 28vh; }
.meta { display: grid; gap: 5px; font-size: 13px; color: #ddd; }
@@ -86,7 +89,7 @@ HTML = r"""