phase 12
This commit is contained in:
@@ -35,7 +35,7 @@ def push(r, key, event):
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("--job", default="pipeline-test")
|
||||
parser.add_argument("--job", default=f"pipeline-{int(__import__('time').time()) % 100000}")
|
||||
parser.add_argument("--port", type=int, default=6382)
|
||||
parser.add_argument("--delay", type=float, default=0.5)
|
||||
args = parser.parse_args()
|
||||
|
||||
@@ -15,7 +15,7 @@ import sys
|
||||
|
||||
# Parse args early so we can set REDIS_URL before imports
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("--job", default="extract-filter-test")
|
||||
parser.add_argument("--job", default=f"extract-{int(__import__('time').time()) % 100000}")
|
||||
parser.add_argument("--port", type=int, default=6382)
|
||||
args = parser.parse_args()
|
||||
|
||||
|
||||
@@ -13,8 +13,9 @@ import logging
|
||||
import os
|
||||
import sys
|
||||
|
||||
import time as _time
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("--job", default="graph-test")
|
||||
parser.add_argument("--job", default=f"graph-{int(_time.time()) % 100000}")
|
||||
parser.add_argument("--port", type=int, default=6382)
|
||||
args = parser.parse_args()
|
||||
|
||||
|
||||
@@ -55,7 +55,7 @@ def push(r, key, event):
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("--job", default="brand-table-test")
|
||||
parser.add_argument("--job", default=f"brand-{int(__import__('time').time()) % 100000}")
|
||||
parser.add_argument("--port", type=int, default=6382)
|
||||
parser.add_argument("--delay", type=float, default=0.6)
|
||||
args = parser.parse_args()
|
||||
|
||||
@@ -23,8 +23,8 @@ import redis
|
||||
logging.basicConfig(level=logging.INFO, format="%(levelname)-7s %(name)s — %(message)s")
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
NODES = ["extract_frames", "filter_scenes", "detect_objects", "run_ocr",
|
||||
"match_brands", "escalate_vlm", "escalate_cloud", "compile_report"]
|
||||
NODES = ["extract_frames", "filter_scenes", "detect_objects", "preprocess",
|
||||
"run_ocr", "match_brands", "escalate_vlm", "escalate_cloud", "compile_report"]
|
||||
|
||||
|
||||
def ts():
|
||||
@@ -70,12 +70,22 @@ def push_stats(r, key, **fields):
|
||||
push(r, key, base)
|
||||
|
||||
|
||||
_bbox_idx = 0
|
||||
|
||||
def push_detection(r, key, brand, conf, source, timestamp, frame_ref, delay):
|
||||
global _bbox_idx
|
||||
# Spread fake bboxes across the frame so they don't overlap
|
||||
col = _bbox_idx % 4
|
||||
row = _bbox_idx // 4
|
||||
bbox = {"x": 50 + col * 200, "y": 50 + row * 120, "w": 160, "h": 80}
|
||||
_bbox_idx += 1
|
||||
|
||||
push(r, key, {
|
||||
"event": "detection",
|
||||
"brand": brand, "confidence": conf, "source": source,
|
||||
"timestamp": timestamp, "duration": 0.5,
|
||||
"content_type": "soccer_broadcast", "frame_ref": frame_ref,
|
||||
"bbox": bbox,
|
||||
})
|
||||
logger.info(" [%s] %s %.2f t=%.1fs", source, brand, conf, timestamp)
|
||||
time.sleep(delay * 0.3)
|
||||
@@ -83,7 +93,9 @@ def push_detection(r, key, brand, conf, source, timestamp, frame_ref, delay):
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("--job", default="escalation-test")
|
||||
import time as _time
|
||||
default_job = f"escalation-{int(_time.time()) % 100000}"
|
||||
parser.add_argument("--job", default=default_job)
|
||||
parser.add_argument("--port", type=int, default=6382)
|
||||
parser.add_argument("--delay", type=float, default=0.5)
|
||||
args = parser.parse_args()
|
||||
@@ -121,6 +133,32 @@ def main():
|
||||
push(r, key, {"event": "log", "level": "INFO", "stage": "YOLODetector",
|
||||
"msg": "Running yolov8n on 52 frames"})
|
||||
time.sleep(delay)
|
||||
|
||||
# Push a sample frame with YOLO boxes
|
||||
import base64, io
|
||||
from PIL import Image as PILImage, ImageDraw
|
||||
frame_img = PILImage.new("RGB", (960, 540), "#1a1a2e")
|
||||
draw = ImageDraw.Draw(frame_img)
|
||||
draw.rectangle([40, 440, 900, 520], outline="#444", width=2)
|
||||
draw.text((100, 460), "SPONSOR BOARD AREA", fill="#666")
|
||||
draw.rectangle([350, 150, 610, 380], outline="#333", width=1)
|
||||
draw.text((400, 200), "PLAYER", fill="#555")
|
||||
buf = io.BytesIO()
|
||||
frame_img.save(buf, "JPEG")
|
||||
frame_b64 = base64.b64encode(buf.getvalue()).decode()
|
||||
|
||||
yolo_boxes = [
|
||||
{"x": 40, "y": 440, "w": 860, "h": 80, "confidence": 0.92,
|
||||
"label": "ad_board", "stage": "detect_objects", "source": "yolo"},
|
||||
{"x": 350, "y": 150, "w": 260, "h": 230, "confidence": 0.87,
|
||||
"label": "person", "stage": "detect_objects", "source": "yolo"},
|
||||
{"x": 700, "y": 30, "w": 200, "h": 60, "confidence": 0.78,
|
||||
"label": "scoreboard", "stage": "detect_objects", "source": "yolo"},
|
||||
]
|
||||
push(r, key, {"event": "frame_update", "frame_ref": 25, "timestamp": 12.5,
|
||||
"jpeg_b64": frame_b64, "boxes": yolo_boxes})
|
||||
time.sleep(delay)
|
||||
|
||||
push_stats(r, key, frames_extracted=180, frames_after_scene_filter=52,
|
||||
regions_detected=41, processing_time_seconds=14.2)
|
||||
push_graph(r, key, "detect_objects", "done", delay)
|
||||
|
||||
@@ -85,7 +85,7 @@ def push_stats(r, key, **overrides):
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("--job", default="timeline-cost-test")
|
||||
parser.add_argument("--job", default=f"timeline-{int(__import__('time').time()) % 100000}")
|
||||
parser.add_argument("--port", type=int, default=6382)
|
||||
parser.add_argument("--delay", type=float, default=0.4)
|
||||
args = parser.parse_args()
|
||||
|
||||
Reference in New Issue
Block a user