Beispiel #1
0
    def loadFeatureTracks(self,
                          file,
                          method="estimation",
                          color=[0, 255, 0],
                          gt_color=[255, 0, 255]):
        tracks = {}
        colors = {}

        tracks_dir = os.path.dirname(file)
        color = [r for r in reversed(color)]
        colors[method] = color

        # load tracks
        tracks[method] = getTrackData(file)

        # load gt
        tracks_csv = join(tracks_dir, "tracks.txt.gt.txt")
        if isfile(tracks_csv):
            gt = getTrackData(tracks_csv)
            colors["gt"] = gt_color

            # if true, crop all tracks from gt to have the same length as the predictions.
            if self.params["crop_to_predictions"]:
                gt = self.cropGT(gt, tracks[method])

            if self.params["error_threshold"] > 0:
                tracks[method], gt = self.discardOnThreshold(
                    tracks[method], gt, self.params["error_threshold"])

            tracks["gt"] = gt

        feature_ids = {
            label: list(tracks_dict.keys())
            for label, tracks_dict in tracks.items()
        }

        max_stamp = -1
        min_stamp = 10**1000

        for label, tracks_dict in tracks.items():
            for i, track in tracks_dict.items():
                min_stamp = min([min_stamp, min(track[:, 0])])
                max_stamp = max([max_stamp, max(track[:, 0])])

        self.min_stamp = min_stamp
        self.max_stamp = max_stamp

        return tracks, feature_ids, colors
Beispiel #2
0
    def loadFeatureTracks(self,
                          file,
                          method="estimation",
                          color=[0, 255, 0],
                          gt_color=[255, 0, 255]):
        tracks = {}
        colors = {}

        tracks_dir = os.path.dirname(file)
        color = [r for r in reversed(color)]
        colors[method] = color

        # load tracks
        data = np.genfromtxt(file, delimiter=" ")
        first_len_tracks = len(data)

        valid_ids, data = filter_first_tracks(data, filter_too_short=True)
        track_data = {i: data[data[:, 0] == i, 1:] for i in valid_ids}
        tracks[method] = track_data

        if len(track_data) < first_len_tracks:
            print(
                "WARNING: This package only supports evaluation of tracks which have been initialized at the same"
                "time. All tracks except the first have been discarded.")

        # load gt
        tracks_csv = join(tracks_dir, "tracks.txt.gt.txt")
        if isfile(tracks_csv):
            gt = getTrackData(tracks_csv)
            colors["gt"] = gt_color

            # if true, crop all tracks from gt to have the same length as the predictions.
            if self.params["crop_to_predictions"]:
                gt = self.cropGT(gt, tracks[method])

            if self.params["error_threshold"] > 0:
                tracks[method], gt = self.discardOnThreshold(
                    tracks[method], gt, self.params["error_threshold"])

            tracks["gt"] = gt

        feature_ids = {
            label: list(tracks_dict.keys())
            for label, tracks_dict in tracks.items()
        }

        max_stamp = -1
        min_stamp = 10**1000

        for label, tracks_dict in tracks.items():
            for i, track in tracks_dict.items():
                min_stamp = min([min_stamp, min(track[:, 0])])
                max_stamp = max([max_stamp, max(track[:, 0])])

        self.min_stamp = min_stamp
        self.max_stamp = max_stamp

        return tracks, feature_ids, colors
Beispiel #3
0
tracker = Tracker(tracker_config)

# get tracks
tracked_features = tracker.track(tracks_init.tracks_obj,
                                 tracks_init.tracker_params)
# 开始跟踪
# 在 Tracker 初始化时,指定了 track 方法为:track_features_on_klt

# save tracks
out_csv = args.file + ".gt.txt"
print("Saving ground truth files to %s" % os.path.basename(out_csv))
np.savetxt(out_csv, tracked_features, fmt=["%i", "%.8f", "%.4f", "%.4f"])

# load both gt and normal tracks
print("Computing errors")
est_tracks_data = getTrackData(args.file, filter_too_short=True)
gt_tracks_data = getTrackData(out_csv)

# compute errors
error_data = compareTracks(est_tracks_data, gt_tracks_data)
errors_csv = args.file + ".errors.txt"
print("Saving error files to %s" % os.path.basename(errors_csv))
np.savetxt(errors_csv, error_data, fmt=["%i", "%.8f", "%.4f", "%.4f"])

# plotting
folder = os.path.dirname(args.file)
results_folder = os.path.join(folder, "results")
if not os.path.isdir(results_folder):
    os.mkdir(results_folder)

if args.plot_3d:
# init tracker
tracker = Tracker(tracker_config)

# get tracks
tracked_features = tracker.track(tracks_init.tracks_obj,
                                 tracks_init.tracker_params)

# save tracks
out_csv = args.file + ".gt.txt"
print("Saving ground truth files to %s" % os.path.basename(out_csv))
np.savetxt(out_csv, tracked_features, fmt=["%i", "%.8f", "%.4f", "%.4f"])

# load both gt and normal tracks
print("Computing errors")
est_tracks_data = getTrackData(args.file)
gt_tracks_data = getTrackData(out_csv)

# compute errors
error_data = compareTracks(est_tracks_data, gt_tracks_data)
errors_csv = args.file + ".errors.txt"
print("Saving error files to %s" % os.path.basename(errors_csv))
np.savetxt(errors_csv, error_data, fmt=["%i", "%.8f", "%.4f", "%.4f"])

# plotting
folder = os.path.dirname(args.file)
results_folder = os.path.join(folder, "results")
if not os.path.isdir(results_folder):
    os.mkdir(results_folder)

if args.plot_3d: