Exemple #1
0
def _save_tracker_output(seq: Sequence, tracker: Tracker, output: dict):
    """Saves the output of the tracker."""

    if not os.path.exists(tracker.results_dir):
        os.makedirs(tracker.results_dir)

    base_results_path = os.path.join(tracker.results_dir, seq.name)
    segmentation_path = os.path.join(tracker.segmentation_dir, seq.name)

    frame_names = [
        os.path.splitext(os.path.basename(f))[0] for f in seq.frames
    ]

    def save_bb(file, data):
        tracked_bb = np.array(data).astype(int)
        np.savetxt(file, tracked_bb, delimiter='\t', fmt='%d')

    def save_time(file, data):
        exec_times = np.array(data).astype(float)
        np.savetxt(file, exec_times, delimiter='\t', fmt='%f')

    def _convert_dict(input_dict):
        data_dict = {}
        for elem in input_dict:
            for k, v in elem.items():
                if k in data_dict.keys():
                    data_dict[k].append(v)
                else:
                    data_dict[k] = [
                        v,
                    ]
        return data_dict

    for key, data in output.items():
        # If data is empty
        if not data:
            continue

        if key == 'target_bbox':
            if isinstance(data[0], (dict, OrderedDict)):
                data_dict = _convert_dict(data)

                for obj_id, d in data_dict.items():
                    bbox_file = '{}_{}.txt'.format(base_results_path, obj_id)
                    save_bb(bbox_file, d)
            else:
                # Single-object mode
                bbox_file = '{}.txt'.format(base_results_path)
                save_bb(bbox_file, data)

        elif key == 'time':
            if isinstance(data[0], dict):
                data_dict = _convert_dict(data)

                for obj_id, d in data_dict.items():
                    timings_file = '{}_{}_time.txt'.format(
                        base_results_path, obj_id)
                    save_time(timings_file, d)
            else:
                timings_file = '{}_time.txt'.format(base_results_path)
                save_time(timings_file, data)

        elif key == 'segmentation':
            assert len(frame_names) == len(data)
            if not os.path.exists(segmentation_path):
                os.makedirs(segmentation_path)
            for frame_name, frame_seg in zip(frame_names, data):
                imwrite_indexed(
                    os.path.join(segmentation_path,
                                 '{}.png'.format(frame_name)), frame_seg)
Exemple #2
0
def _save_tracker_output(seq: Sequence, tracker: Tracker, output: dict):
    """Saves the output of the tracker."""

    if not os.path.exists(tracker.results_dir):
        os.makedirs(tracker.results_dir)

    base_results_path = os.path.join(tracker.results_dir, seq.name)
    segmentation_path = os.path.join(tracker.segmentation_dir, seq.name)

    frame_names = [
        os.path.splitext(os.path.basename(f))[0] for f in seq.frames
    ]

    def save_bb(file, data):
        tracked_bb = np.array(data).astype(int)
        np.savetxt(file, tracked_bb, delimiter='\t', fmt='%d')

    def save_one_file(bb):
        data = {}
        length = len(bb)
        for i in range(0, length):
            data[i] = bb[i]

        with open("/gdrive/My Drive/tracking_results/result.json", 'w') as fp:
            json.dump(data, fp)

    def save_one_file_txt(bb):
        data = list()
        length = len(bb)
        for i in range(0, length - 1):
            data[i] = bb[i]

        with open("/gdrive/My Drive/tracking_results/result.txt", 'w') as txt:
            txt.write(str(data))
            txt.write("\n")

    def save_time(file, data):
        exec_times = np.array(data).astype(float)
        np.savetxt(file, exec_times, delimiter='\t', fmt='%f')

    def _convert_dict(input_dict):
        data_dict = {}
        for elem in input_dict:
            for k, v in elem.items():
                if k in data_dict.keys():
                    data_dict[k].append(v)
                else:
                    data_dict[k] = [
                        v,
                    ]
        return data_dict

    for key, data in output.items():
        # If data is empty
        if not data:
            continue
        #TODO save in one TXT file
        if key == 'target_bbox':
            if isinstance(data[0], (dict, OrderedDict)):
                data_dict = _convert_dict(data)
                bb = list()
                for obj_id, d in data_dict.items():
                    bbox_file = '{}_{}.txt'.format(base_results_path, obj_id)
                    one_file = 'results.txt'
                    bb.append(d)
                save_one_file(bb)
                save_bb(bbox_file, d)
                #save_one_file_txt(d)

            else:
                # Single-object mode
                bbox_file = '{}.txt'.format(base_results_path)
                save_bb(bbox_file, data)

        #elif key == 'time':
        #if isinstance(data[0], dict):
        #data_dict = _convert_dict(data)

        #for obj_id, d in data_dict.items():
        #timings_file = '{}_{}_time.txt'.format(base_results_path, obj_id)
        #save_time(timings_file, d)
        #else:
        #timings_file = '{}_time.txt'.format(base_results_path)
        #save_time(timings_file, data)

        elif key == 'segmentation':
            assert len(frame_names) == len(data)
            if not os.path.exists(segmentation_path):
                os.makedirs(segmentation_path)
            for frame_name, frame_seg in zip(frame_names, data):
                imwrite_indexed(
                    os.path.join(segmentation_path,
                                 '{}.png'.format(frame_name)), frame_seg)