lucid-hf's picture
CI: deploy Docker/PDM Space
9482f97 verified
from ultralytics import YOLO
import numpy as np
# Simple in-memory cache keyed by (key, frame_idx)
class CachedDetections:
def __init__(self):
self._m = {}
def get(self, key, i):
return self._m.get((key, i))
def put(self, key, i, dets):
self._m[(key, i)] = dets
class Detector:
def __init__(self, model_name, conf_thr=0.35, iou_thr=0.5):
self.model = YOLO(model_name)
self.conf_thr = conf_thr
self.iou_thr = iou_thr
def predict(self, frame_bgr):
# Ultralytics expects RGB
results = self.model.predict(
frame_bgr[..., ::-1], conf=self.conf_thr, iou=self.iou_thr, verbose=False
)
dets = []
if not results:
return dets
r = results[0]
if r.boxes is None:
return dets
for b in r.boxes:
cls_id = int(b.cls[0])
conf = float(b.conf[0])
x1, y1, x2, y2 = map(float, b.xyxy[0].tolist())
label = r.names.get(cls_id, str(cls_id))
dets.append((label, conf, (x1, y1, x2, y2)))
return dets