This commit is contained in:
2026-03-26 06:10:19 -03:00
parent 731964ca10
commit e27cb5bcc3
41 changed files with 2079 additions and 95 deletions

View File

@@ -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)