def update(new_vehicles: list, frame: Frame, mask: np.ndarray): """ Aktualizuje śledzone pojazdy. :param new_vehicles: Nowe pojazdy. :param Frame frame: Klatka obrazu. :param np.ndarray mask: Binarna maska obrazu :return: Zidentyfikowane pojazdy(?), None jeśli żadnego nie wykryto. :rtype: list """ if len(new_vehicles) == 0: return None # Pobierz szerokość obrazu. _, Follower.__frame_width = frame.size() result = [] Follower.__detected_left = False Follower.__detected_right = False if len(new_vehicles) > 1: Logger.warning("Otrzymano więcej niż jeden pojazd.") for new_car in new_vehicles: # detekcja z prawej strony if Follower.__is_on_right(new_car): Follower.__detected_right = True if not Follower.__right_lock: Follower.__right_lock = True # jeżeli nie ma nic po drugiej stronie to odłóż na stos if not len(Follower.__tracked_left): Follower.__tracked_right.append((new_car, frame)) Logger.info("Obiekt zarejestrwany po prawej stronie.") # jeżeli bo drugiej stronie coś było to pobierz ze stosu else: old_car, oldframe = Follower.__tracked_left.pop() record = ObjectRecord(new_car, old_car, frame, oldframe, mask) Logger.info("Wykryto przejazd samochodu.") result.append(record) # detekcja z lewej strony elif Follower.__is_on_left(new_car): Follower.__detected_left = True if not Follower.__left_lock: Follower.__left_lock = True # jeżeli nie ma nic po drugiej stronie to odłóż na stos if not len(Follower.__tracked_right): Follower.__tracked_left.append((new_car, frame)) Logger.info("Obiekt zarejestrwany po lewej stronie.") # jeżeli bo drugiej stronie coś było to pobierz ze stosu else: old_car, oldframe = Follower.__tracked_right.pop() record = ObjectRecord(new_car, old_car, frame, oldframe, mask) Logger.info("Wykryto przejazd samochodu.") result.append(record) Follower.__check_locks() return result if len(result) else None
def clear(): """ Czyści wewnętrzne dane algorytmu śledzenia pojazdów. """ if len(Follower.__tracked_left) or len(Follower.__tracked_right): Logger.warning("Usunięto niewykorzystane dane.") Follower.__tracked_left = [] Follower.__tracked_right = [] Follower.__detected_right = False Follower.__detected_left = False Follower.__left_lock = False Follower.__right_lock = False Follower.__frame_width = 0 Follower.__border = 0
def clear(): """ Czyści wewnętrzne dane algorytmu śledzenia pojazdów. """ if len(Follower.__tracked_left) or len(Follower.__tracked_right): Logger.warning("Usunięto niewykorzystane dane.") Follower.__tracked_left = [] Follower.__tracked_right = [] Follower.__detected_right = False Follower.__detected_left = False Follower.__left_lock = False Follower.__right_lock = False Follower.__frame_width = 0 Follower.__border = 0
def update(new_vehicles: list, frame: Frame, mask: np.ndarray): """ Aktualizuje śledzone pojazdy. :param new_vehicles: Nowe pojazdy. :param Frame frame: Klatka obrazu. :param np.ndarray mask: Binarna maska obrazu :return: Zidentyfikowane pojazdy(?), None jeśli żadnego nie wykryto. :rtype: list """ if len(new_vehicles) == 0: return None # Pobierz szerokość obrazu. _, Follower.__frame_width = frame.size() result = [] Follower.__detected_left = False Follower.__detected_right = False if len(new_vehicles) > 1: Logger.warning("Otrzymano więcej niż jeden pojazd.") for new_car in new_vehicles: # detekcja z prawej strony if Follower.__is_on_right(new_car): Follower.__detected_right = True if not Follower.__right_lock: Follower.__right_lock = True # jeżeli nie ma nic po drugiej stronie to odłóż na stos if not len(Follower.__tracked_left): Follower.__tracked_right.append((new_car, frame)) Logger.info("Obiekt zarejestrwany po prawej stronie.") # jeżeli bo drugiej stronie coś było to pobierz ze stosu else: old_car, oldframe = Follower.__tracked_left.pop() record = ObjectRecord(new_car, old_car, frame, oldframe, mask) Logger.info("Wykryto przejazd samochodu.") result.append(record) # detekcja z lewej strony elif Follower.__is_on_left(new_car): Follower.__detected_left = True if not Follower.__left_lock: Follower.__left_lock = True # jeżeli nie ma nic po drugiej stronie to odłóż na stos if not len(Follower.__tracked_right): Follower.__tracked_left.append((new_car, frame)) Logger.info("Obiekt zarejestrwany po lewej stronie.") # jeżeli bo drugiej stronie coś było to pobierz ze stosu else: old_car, oldframe = Follower.__tracked_right.pop() record = ObjectRecord(new_car, old_car, frame, oldframe, mask) Logger.info("Wykryto przejazd samochodu.") result.append(record) Follower.__check_locks() return result if len(result) else None