New Raybig Homescreen

This commit is contained in:
firestar5683
2026-07-20 15:34:21 -05:00
parent 43143e7a1f
commit 94e60c5d70
5 changed files with 860 additions and 6 deletions
+2
View File
@@ -53,6 +53,8 @@ export NOBOARD=1
export SIMULATION=1
export SKIP_FW_QUERY=1
export USE_WEBCAM=1
export PRIME_TYPE="${PRIME_TYPE:-0}"
export SP_RAYBIG_FAKE_DRIVE_STATS="${SP_RAYBIG_FAKE_DRIVE_STATS:-1}"
backup_dir="$(mktemp -d /tmp/starpilot_raybig_ui_backup.XXXXXX)"
backup_manifest="${backup_dir}/.artifact_manifest"
@@ -48,6 +48,11 @@ def parse_args() -> argparse.Namespace:
parser.add_argument("--window-before", type=float, default=4.0, help="Seconds replayed before the reviewed frame.")
parser.add_argument("--window-after", type=float, default=3.0, help="Seconds replayed after the reviewed frame.")
parser.add_argument("--dedupe-seconds", type=float, default=3.0, help="Collapse nearby reviewed rows with the same expected value.")
parser.add_argument(
"--review-timebase-fps",
type=float,
help="FPS used when review timestamps were generated. Use 25 for legacy raw-HEVC queues created before comma's 20 FPS timebase fix.",
)
parser.add_argument("--measured-base-inference-seconds", type=float, default=0.44, help="Measured no-proposal comma inference cost.")
parser.add_argument("--measured-classifier-forward-seconds", type=float, default=0.066, help="Measured comma cost per classifier forward.")
parser.add_argument("--measured-tracking-base-seconds", type=float, default=0.012, help="Measured optical-flow and crop preparation cost.")
@@ -169,12 +174,13 @@ def replay_video_cases(cases: list[ReviewedCase], args: argparse.Namespace) -> d
daemon.last_published_support_at = 0.0
capture = cv2.VideoCapture(str(cases[0].source_video_path))
fps = source_video_fps(cases[0].source_video_path, capture.get(cv2.CAP_PROP_FPS))
review_timebase_fps = args.review_timebase_fps or fps
frame_count = int(capture.get(cv2.CAP_PROP_FRAME_COUNT) or 0)
duration_s = frame_count / fps if frame_count > 0 else 60.0
windows = {
case.record_key: (
max(case.frame_time_s - args.window_before, 0.0),
min(case.frame_time_s + args.window_after, duration_s),
max(case.frame_time_s * review_timebase_fps / fps - args.window_before, 0.0),
min(case.frame_time_s * review_timebase_fps / fps + args.window_after, duration_s),
)
for case in cases
}
@@ -216,6 +222,8 @@ def replay_video_cases(cases: list[ReviewedCase], args: argparse.Namespace) -> d
def main() -> int:
args = parse_args()
if args.review_timebase_fps is not None and args.review_timebase_fps <= 0.0:
raise ValueError("--review-timebase-fps must be greater than zero")
queue_path = args.queue.expanduser().resolve()
labels_path = args.labels.expanduser().resolve() if args.labels else queue_path.with_name("manual_review_labels.csv")
configure_models(args.models_dir)
@@ -392,6 +400,7 @@ def main() -> int:
))
summary = {
"models_dir": str(args.models_dir.expanduser().resolve()),
"review_timebase_fps": args.review_timebase_fps,
"crop_ocr": args.crop_ocr,
"classifier_min_confidence": slv.US_CLASSIFIER_MIN_CONFIDENCE,
"measured_base_inference_seconds": args.measured_base_inference_seconds,