| 296 | |
| 297 | |
| 298 | def parse_args() -> argparse.Namespace: |
| 299 | parser = argparse.ArgumentParser(description=__doc__) |
| 300 | parser.add_argument("--model", default=DEFAULT_TRT_ENGINE, help="Path to TensorRT .engine") |
| 301 | parser.add_argument("--camera", choices=["auto", "realsense", "orbbec"], default="auto", help="RGB-D camera backend") |
| 302 | parser.add_argument( |
| 303 | "--realsense", |
| 304 | default="auto", |
| 305 | help="RealSense selector: serial, name, USB port, product id, or auto", |
| 306 | ) |
| 307 | parser.add_argument("--orbbec", default="auto", help="Orbbec selector: serial, uid, USB id, name, index, or auto") |
| 308 | parser.add_argument("--serial", default=None, help="Exact camera serial number") |
| 309 | parser.add_argument("--usb-id", default=None, help="Substring matched against USB path or product id") |
| 310 | parser.add_argument("--list-devices", action="store_true") |
| 311 | parser.add_argument("--width", type=int, default=640) |
| 312 | parser.add_argument("--height", type=int, default=480) |
| 313 | parser.add_argument("--fps", type=int, default=30) |
| 314 | parser.add_argument("--warmup", type=int, default=30) |
| 315 | parser.add_argument("--timeout-ms", type=int, default=5000) |
| 316 | parser.add_argument("--show-display", action="store_true", help="Show OpenCV GUI window") |
| 317 | parser.add_argument("--show-viser", action="store_true", help="Start a viser web UI with live raw/refined point clouds") |
| 318 | parser.add_argument("--viser-host", default="0.0.0.0", help="Host for the viser server") |
| 319 | parser.add_argument("--viser-port", type=int, default=8080, help="Port for the viser dashboard/server") |
| 320 | parser.add_argument("--viser-mode", choices=["both", "raw", "refined"], default="both", help="Initial viser point cloud display mode") |
| 321 | parser.add_argument("--pointcloud-stride", type=int, default=4, help="Use every Nth depth pixel for viser point clouds") |
| 322 | parser.add_argument("--pointcloud-min-depth", type=float, default=0.05, help="Minimum depth in meters for viser point clouds") |
| 323 | parser.add_argument("--pointcloud-max-depth", type=float, default=2.0, help="Maximum depth in meters for viser point clouds") |
| 324 | parser.add_argument("--pointcloud-point-size", type=float, default=0.002, help="Initial viser point size") |
| 325 | parser.add_argument("--pointcloud-update-hz", type=float, default=10.0, help="Maximum viser point cloud update rate") |
| 326 | parser.add_argument("--pointcloud-precision", choices=["float16", "float32"], default="float32", help="viser point position precision") |
| 327 | parser.add_argument("--output-dir", default=None, help="Directory for latest_comparison.png and periodic snapshots") |
| 328 | parser.add_argument("--save-every", type=int, default=30, help="Save numbered PNG every N frames; 0 disables numbered snapshots") |
| 329 | parser.add_argument("--output-video", default=None, help="Optional video output path") |
| 330 | parser.add_argument("--video-fourcc", default="mp4v") |
| 331 | parser.add_argument("--video-fps", type=float, default=10.0) |
| 332 | parser.add_argument("--max-frames", type=int, default=0, help="Stop after N frames; 0 means run until interrupted") |
| 333 | parser.add_argument("--print-every", type=int, default=30) |
| 334 | parser.add_argument("--print-seconds", type=float, default=5.0) |
| 335 | return parser.parse_args() |
| 336 | |
| 337 | |
| 338 | def main() -> int: |