usiddiquee
hi
e1832f4
# Mikel Broström 🔥 Yolo Tracking 🧾 AGPL-3.0 license
from pathlib import Path
import numpy as np
import torch
from ultralytics.engine.results import Results
from abc import ABC, abstractmethod
class YoloInterface(ABC):
@abstractmethod
def __call__(self, im):
pass
@abstractmethod
def preprocess(self, ims):
pass
@abstractmethod
def postprocess(self, preds):
pass
def get_scaling_factors(self, im, im0):
# im to im0 factor for predictions
im0_w = im0.shape[1]
im0_h = im0.shape[0]
im_w = im.shape[2]
im_h = im.shape[1]
w_r = im0_w / im_w
h_r = im0_h / im_h
return im_w, im_h, w_r, h_r
def scale_and_clip(self, preds, im_w, im_h, w_r, h_r):
# scale bboxes to original image
preds[:, [0, 2]] = preds[:, [0, 2]] * self.w_r
preds[:, [1, 3]] = preds[:, [1, 3]] * self.h_r
if not isinstance(preds, (torch.Tensor)):
preds = torch.from_numpy(preds)
preds[:, [0, 2]] = torch.clip(preds[:, [0, 2]], min=0) # max=im_w
preds[:, [1, 3]] = torch.clip(preds[:, [1, 3]], min=0) # max=im_h
return preds
def get_model_from_weigths(self, l, model):
model_type = None
for key in l:
if Path(key).stem in str(model.name):
model_type = str(Path(key).with_suffix(''))
break
return model_type