DariusGiannoli
extended structure
3bec0b6
import time
import torch
from ultralytics import YOLO
from src.config import MODEL_PATHS
from .base import BaseDetector
class YOLODetector(BaseDetector):
def __init__(self, device = None):
self.device = device or (
"mps" if torch.backends.mps.is_available() else
"cuda" if torch.cuda.is_available() else
"cpu"
)
self.model_path = MODEL_PATHS['yolo']
self.model = None
self.load_model()
def load_model(self):
try:
self.model = YOLO(self.model_path)
self.model.to(self.device)
except Exception as e :
print("Error loading Yolo model", e)
raise
def predict(self, image):
if self.model is None:
raise RuntimeError("Model not loaded. Call load_model() before predict().")
#start clock
t0= time.perf_counter()
#inference
results = self.model(image, verbose = False, device = self.device, conf = 0.25)
#stop clock
t1 = time.perf_counter()
inference_time_ms = (t1 - t0) * 1000
#pars results
label = "background"
confidence = 0.0
if results[0].boxes:
top_box = results[0].boxes[0]
confidence = float(top_box.conf)
class_id = int(top_box.cls)
#Convert ID --> Name
label = self.model.names[class_id]
return label, confidence, inference_time_ms