forked from zakaria/chicken-counting-sukawarna-det
64 lines
2.2 KiB
Python
64 lines
2.2 KiB
Python
"""Command-line entrypoint for single-camera runs and daily batch processing."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import argparse
|
|
|
|
from chicken_counter.batch_runner import run_daily_batch
|
|
from chicken_counter.config import load_batch_config, load_camera_config
|
|
from chicken_counter.pipeline import run_pipeline
|
|
|
|
|
|
def build_parser() -> argparse.ArgumentParser:
|
|
parser = argparse.ArgumentParser(description="Run the chicken counting pipeline.")
|
|
subparsers = parser.add_subparsers(dest="command")
|
|
|
|
run_parser = subparsers.add_parser("run", help="Run a single camera pipeline.")
|
|
run_parser.add_argument("--config", required=True, help="Path to camera config YAML/JSON.")
|
|
run_parser.add_argument("--camera-id", help="Camera ID when using a multi-camera config file.")
|
|
|
|
batch_parser = subparsers.add_parser("batch", help="Run the daily Cycle7 multi-camera batch.")
|
|
batch_parser.add_argument("--config", required=True, help="Path to batch config YAML/JSON.")
|
|
batch_parser.add_argument(
|
|
"--date",
|
|
help="Processing date folder in YYYY-MM-DD format. Defaults to today.",
|
|
)
|
|
|
|
parser.add_argument("--config", help=argparse.SUPPRESS)
|
|
parser.add_argument("--camera-id", help=argparse.SUPPRESS)
|
|
return parser
|
|
|
|
|
|
def main() -> None:
|
|
parser = build_parser()
|
|
args = parser.parse_args()
|
|
|
|
if args.command == "batch":
|
|
settings = load_batch_config(args.config)
|
|
run_daily_batch(settings, date=args.date)
|
|
return
|
|
|
|
if args.command == "run":
|
|
config = load_camera_config(args.config, args.camera_id)
|
|
result = run_pipeline(config)
|
|
print(
|
|
f"[done] camera={result.camera_id} total_entered={result.total_entered_count} "
|
|
f"frames={result.frames_processed} reason={result.stopped_reason}"
|
|
)
|
|
return
|
|
|
|
if args.config:
|
|
config = load_camera_config(args.config, args.camera_id)
|
|
result = run_pipeline(config)
|
|
print(
|
|
f"[done] camera={result.camera_id} total_entered={result.total_entered_count} "
|
|
f"frames={result.frames_processed} reason={result.stopped_reason}"
|
|
)
|
|
return
|
|
|
|
parser.print_help()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|