Example #1
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
Example #2
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
Example #3
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
Example #4
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