#!/usr/bin/env python3 """ Run the full LangGraph detection pipeline on a test video. Usage: python tests/detect/manual/run_graph.py [--job JOB_ID] [--port PORT] Opens: http://mpr.local.ar/detection/?job= """ import argparse import logging import os import sys parser = argparse.ArgumentParser() parser.add_argument("--job", default="graph-test") parser.add_argument("--port", type=int, default=6382) args = parser.parse_args() os.environ["REDIS_URL"] = f"redis://localhost:{args.port}/0" logging.basicConfig(level=logging.INFO, format="%(levelname)-7s %(name)s — %(message)s") sys.path.insert(0, ".") from detect.graph import get_pipeline from detect.state import DetectState logger = logging.getLogger(__name__) VIDEO = "media/out/chunks/95043d50-4df6-4ac8-bbd5-2ba873117c6e/chunk_0000.mp4" def main(): logger.info("Job: %s", args.job) logger.info("Open: http://mpr.local.ar/detection/?job=%s", args.job) input("\nPress Enter to start...") pipeline = get_pipeline() initial_state = DetectState( video_path=VIDEO, job_id=args.job, profile_name="soccer_broadcast", ) logger.info("Running pipeline...") result = pipeline.invoke(initial_state) frames = result.get("frames", []) filtered = result.get("filtered_frames", []) report = result.get("report") logger.info("Frames extracted: %d", len(frames)) logger.info("Frames after filter: %d", len(filtered)) if report: logger.info("Brands found: %d", len(report.brands)) logger.info("Done.") if __name__ == "__main__": main()