class Model: def __init__(self): self.model = None self.imported = False def load(self): if self.model is None: self.__load() def __load(self): if not self.imported: self.imported = True import torch import pathlib import sys import os from myutils.respath import resource_path # Redirect sys.stderr to a file or a valid stream if sys.stderr is None: sys.stderr = open(os.devnull, 'w') # Check if the current operating system is Windows is_windows = (sys.platform == "win32") if is_windows: # If on Windows, apply the patch temporarily temp = pathlib.PosixPath pathlib.PosixPath = pathlib.WindowsPath try: # Load the model with the patch applied self.model = torch.hub.load('ultralytics/yolov5', 'custom', path=resource_path('ai-models/2024-11-00/best.pt')) finally: # CRITICAL: Always restore the original class, even if loading fails pathlib.PosixPath = temp else: # If on Linux, macOS, or other systems, load the model directly self.model = torch.hub.load('ultralytics/yolov5', 'custom', path=resource_path('ai-models/2024-11-00/best.pt')) def __call__(self, *args, **kwds): if self.model is None: self.__load() return self.model(*args, **kwds) model = Model()