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

1"""CLI argument parsing for the YOLO monitor.""" 

2 

3from __future__ import annotations 

4 

5import argparse 

6 

7from orchestrant.paths import default_model_path 

8 

9 

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 ) 

22 

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) 

53 

54 args = parser.parse_args(argv) 

55 if args.model is None: 

56 args.model = str(default_model_path()) 

57 return args 

58 

59 

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 ) 

83 

84 

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 )