Coverage for orchestrant/yolo/cli.py: 100%
35 statements
« prev ^ index » next coverage.py v7.16.2, created at 2026-10-22 09:57 +0000
« prev ^ index » next coverage.py v7.16.2, created at 2026-10-22 09:57 +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 yolo-monitor --web --host 0.0.0.0
21 """,
22 )
24 parser.add_argument(
25 "--backend", type=str, choices=["opencv", "gstreamer"], default="opencv"
26 )
27 parser.add_argument(
28 "--ui",
29 type=str,
30 choices=["auto", "flet", "opencv"],
31 default="auto",
32 help="flet: the Flet viewer; opencv: OpenCV's window; auto: flet where installed",
33 )
34 parser.add_argument(
35 "--web",
36 action="store_true",
37 help="Serve the Flet viewer to browsers instead of opening a window",
38 )
39 parser.add_argument("--host", default="127.0.0.1", help="Address --web binds")
40 parser.add_argument("--port", type=int, default=8550, help="Port --web serves on")
41 parser.add_argument("--camera", type=int, default=0)
42 parser.add_argument("--width", type=int, default=1920)
43 parser.add_argument("--height", type=int, default=1080)
44 parser.add_argument("--fps", type=int, default=30)
45 parser.add_argument(
46 "--model",
47 type=str,
48 default=None,
49 help="ONNX model; default: $ORCHESTRANT_MODEL, the install's models dir, then resources/models (how to fetch it: resources/models/README.md)",
50 )
51 parser.add_argument(
52 "--self-test",
53 action="store_true",
54 help="Load the model, run one inference on a blank frame and exit; needs no camera or display",
55 )
56 parser.add_argument("--conf", type=float, default=0.5)
57 parser.add_argument("--gpu", type=int, default=0)
58 parser.add_argument("--no-display", action="store_true")
59 _add_overlay_args(parser)
60 _add_debug_args(parser)
62 args = parser.parse_args(argv)
63 if args.model is None:
64 args.model = str(default_model_path())
65 return args
68def _add_overlay_args(parser: argparse.ArgumentParser) -> None:
69 parser.add_argument(
70 "--cpu-plot",
71 action="store_true",
72 help="Show 2D time-series plot of this process CPU%% over time",
73 )
74 parser.add_argument(
75 "--cpu-history",
76 type=int,
77 default=180,
78 help="Number of samples kept for process CPU history plot",
79 )
80 parser.add_argument(
81 "--map",
82 action="store_true",
83 help="Enable 2D running minimap (person trails) overlay",
84 )
85 parser.add_argument(
86 "--map-size",
87 type=int,
88 default=260,
89 help="Size (px) of the 2D running minimap overlay",
90 )
93def _add_debug_args(parser: argparse.ArgumentParser) -> None:
94 parser.add_argument(
95 "--debug-output",
96 action="store_true",
97 help="Log raw model output shapes once at startup",
98 )
99 parser.add_argument(
100 "--debug-detections",
101 action="store_true",
102 help="Log sample decoded detections every few seconds",
103 )
104 parser.add_argument(
105 "--debug-boxes",
106 action="store_true",
107 help="Log decoded bbox coordinates for debugging",
108 )
109 parser.add_argument(
110 "--log-level",
111 type=str,
112 default="DEBUG",
113 choices=["TRACE", "DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"],
114 )