def rider_reformat(path): """Combine riders' bboxes with the nearest motorcycle/bicycle""" for filename in glob.iglob(path + '\**\*.json', recursive=True): images = decode_annot_array(filename) for i in range(0, len(images)): image = images[i] to_delete = [] for j in range(0, len(image.labels)): label = image.labels[j] if not (label.category == 'rider'): continue rider = label nearest_idx = _find_nearest_cycle(image, label, to_delete) if nearest_idx < 0: continue to_delete.append(nearest_idx) cycle = image.labels[nearest_idx] rider.box = _get_common_box(rider.box, cycle.box) to_delete.sort(reverse=True) for idx in to_delete: del image.labels[idx] encode_annot_array(images, filename, '_rider')
def common_category_names(path): cat_dict = get_category_sets_dict() for filename in glob.iglob(path + '\**\*.json', recursive=True): images = decode_annot_array(filename) for i in range(0, len(images)): image = images[i] for j in range(0, len(image.labels)): label = image.labels[j] common_category = cat_dict.get(frozenset(get_category_set(label.category))) label.category = common_category encode_annot_array(images, filename, '_common')
def load_folder(self, path, size_new): images = [] print(path) for filename in glob.iglob(path + '/**/*.json', recursive=True): images_new = decode_annot_array(filename) print(len(images_new)) # # resize bounding boxes # print(path + ' ' + images_new[0].name) # img = next(glob.iglob(path + '/**/' + images_new[0].name, recursive=True)) # height, width, _ = img.shape # i# mages_new = self.resize_bboxes(images_new, (height, width), size_new) images.extend(images_new) return images
def crop_bbox_correction(path, x_offset): for filename in glob.iglob(path + '/**/*.json', recursive=True): print(filename) images = decode_annot_array(filename) for i in range(0, len(images)): image = images[i] print(image.name) for j in range(0, len(image.labels)): box = image.labels[j].box box.x1 -= x_offset box.x2 -= x_offset encode_annot_array(images, filename)
def cityscapes_citypersons_union(path): subfolders = ['both', 'train', 'val'] for subfolder in subfolders: sub_path = os.path.join(path, subfolder) images_both = [] for filename in glob.iglob(sub_path + '\**\*.json', recursive=True): images_both.append(decode_annot_array(filename)) images_first = {} for image in images_both[0]: images_first.update({image.name: image}) for i in range(0, len(images_both[1])): images_both[1][i].labels.extend(images_first.get(images_both[1][i].name).labels) encode_annot_array(images_both[1], os.path.join(sub_path, 'cs_2.json'))
def crop_dataset(path, x_offset, width, height, only_json=False): images_path = os.path.join(path, "images") if not only_json: for filename in glob.iglob(images_path + '/**/*.png', recursive=True): print(filename) img = cv2.imread(filename) crop_img = img[0:height, x_offset:x_offset + width] splitted = os.path.splitext(filename) cv2.imwrite(splitted[0] + '_cropped' + splitted[1], crop_img) for filename in glob.iglob(path + '/**/*.json', recursive=True): print(filename) images = decode_annot_array(filename) for i in range(0, len(images)): image = images[i] print(image.name) to_delete = [] for j in range(0, len(image.labels)): box = image.labels[j].box if (float(box.x1) < x_offset and float(box.x2) < x_offset) or (float(box.x1) > x_offset + width and float(box.x2) > x_offset + width): to_delete.append(j) continue box.x1 = max(x_offset, float(box.x1)) box.x2 = max(x_offset, float(box.x2)) box.x1 = min(x_offset + width, float(box.x1)) box.x2 = min(x_offset + width, float(box.x2)) box.y1 = min(height, float(box.y1)) box.y2 = min(height, float(box.y2)) to_delete.sort(reverse=True) for idx in to_delete: del image.labels[idx] encode_annot_array(images, filename)
def keep_only_needed_categories(path, categories): cats = set([]) for category in categories: print(category) cats = cats.union(get_category_set(category)) for filename in glob.iglob(path + '\**\*.json', recursive=True): images = decode_annot_array(filename) for i in range(0, len(images)): image = images[i] labels_to_delete = [] for j in range(0, len(image.labels)): label = image.labels[j] if not (label.category in cats): labels_to_delete.append(j) labels_to_delete.sort(reverse=True) for idx in labels_to_delete: del image.labels[idx] encode_annot_array(images, filename, '_needed')
def keep_only_images_w_categories(path): """Remove images where there were no trains/trams annotated""" for filename in glob.iglob(path + '/**/*.json', recursive=True): categories = [['person', 'person_group'], ['two_wheeler'], ['on_rails'], ['car'], ['truck']] for cat in categories: cats = set([]) for category in cat: print(category) cats = cats.union(get_category_set(category)) images = decode_annot_array(filename) images_w_cats = [] for image in images: for label in image.labels: if label.category in cats: images_w_cats.append(image) break postfix = '' for category in cat: postfix += '_' + category encode_annot_array(images_w_cats, filename, postfix)