Coverage for orchestrant/yolo/cli.py: 100%
32 statements
« prev ^ index » next coverage.py v7.16.2, created at 2026-10-18 00:48 +0000
« prev ^ index » next coverage.py v7.16.2, created at 2026-10-18 00:48 +0000
1"""CLI argument parsing for the YOLO monitor."""
3from __future__ import annotations
5import argparse
7from orchestrant.paths import default_model_path
10def parse_args(argv: list[str] | None = None) -> argparse.Namespace:
11 """Parse command line arguments."""
12 parser = argparse.ArgumentParser(
13 description="Object Detection with System Monitoring",
14 formatter_class=argparse.RawDescriptionHelpFormatter,
15 epilog="""
16 Examples:
17 yolo-monitor --backend opencv
18 yolo-monitor --backend gstreamer
19 yolo-monitor --backend gstreamer --width 1280 --height 720 --fps 60
20 """,
21 )
23 parser.add_argument(
24 "--backend", type=str, choices=["opencv", "gstreamer"], default="opencv"
25 )
26 parser.add_argument(
27 "--ui",
28 type=str,
29 choices=["opencv", "dearpygui", "wxpython"],
30 default="opencv",
31 help="Select UI backend for display",
32 )
33 parser.add_argument("--camera", type=int, default=0)
34 parser.add_argument("--width", type=int, default=1920)
35 parser.add_argument("--height", type=int, default=1080)
36 parser.add_argument("--fps", type=int, default=30)
37 parser.add_argument(
38 "--model",
39 type=str,
40 default=None,
41 help="ONNX model; default: $ORCHESTRANT_MODEL, the install's models dir, then resources/models (python scripts/fetch_models.py)",
42 )
43 parser.add_argument(
44 "--self-test",
45 action="store_true",
46 help="Load the model, run one inference on a blank frame and exit; needs no camera or display",
47 )
48 parser.add_argument("--conf", type=float, default=0.5)
49 parser.add_argument("--gpu", type=int, default=0)
50 parser.add_argument("--no-display", action="store_true")
51 _add_overlay_args(parser)
52 _add_debug_args(parser)
54 args = parser.parse_args(argv)
55 if args.model is None:
56 args.model = str(default_model_path())
57 return args
60def _add_overlay_args(parser: argparse.ArgumentParser) -> None:
61 parser.add_argument(
62 "--cpu-plot",
63 action="store_true",
64 help="Show 2D time-series plot of this process CPU%% over time",
65 )
66 parser.add_argument(
67 "--cpu-history",
68 type=int,
69 default=180,
70 help="Number of samples kept for process CPU history plot",
71 )
72 parser.add_argument(
73 "--map",
74 action="store_true",
75 help="Enable 2D running minimap (person trails) overlay",
76 )
77 parser.add_argument(
78 "--map-size",
79 type=int,
80 default=260,
81 help="Size (px) of the 2D running minimap overlay",
82 )
85def _add_debug_args(parser: argparse.ArgumentParser) -> None:
86 parser.add_argument(
87 "--debug-output",
88 action="store_true",
89 help="Log raw model output shapes once at startup",
90 )
91 parser.add_argument(
92 "--debug-detections",
93 action="store_true",
94 help="Log sample decoded detections every few seconds",
95 )
96 parser.add_argument(
97 "--debug-boxes",
98 action="store_true",
99 help="Log decoded bbox coordinates for debugging",
100 )
101 parser.add_argument(
102 "--log-level",
103 type=str,
104 default="DEBUG",
105 choices=["TRACE", "DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"],
106 )