Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions BboxToolkit/datasets/DOTAio.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ def _load_dota_single(imgfile, img_dir, ann_dir, cls2lbl):


def _load_dota_txt(txtfile, cls2lbl):
gsd, bboxes, labels, diffs = None, [], [], []
gsd, bboxes, labels, diffs, classnames = None, [], [], [], []
if txtfile is None:
pass
elif not osp.isfile(txtfile):
Expand All @@ -75,14 +75,16 @@ def _load_dota_txt(txtfile, cls2lbl):
bboxes.append([float(i) for i in items[:8]])
labels.append(cls2lbl[items[8]])
diffs.append(int(items[9]) if len(items) == 10 else 0)
classnames.append(items[8])

bboxes = np.array(bboxes, dtype=np.float32) if bboxes else \
np.zeros((0, 8), dtype=np.float32)
labels = np.array(labels, dtype=np.int64) if labels else \
np.zeros((0, ), dtype=np.int64)
diffs = np.array(diffs, dtype=np.int64) if diffs else \
np.zeros((0, ), dtype=np.int64)
ann = dict(bboxes=bboxes, labels=labels, diffs=diffs)
classnames = np.array(classnames, dtype=np.str) if classnames else labels
ann = dict(bboxes=bboxes, labels=labels, diffs=diffs, classnames=classnames)
return dict(gsd=gsd, ann=ann)


Expand Down
28 changes: 25 additions & 3 deletions tools/img_split.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,8 @@ def add_parser(parser):
help='to save pkl and splitted images')
parser.add_argument('--save_ext', type=str, default='.png',
help='the extension of saving images')
parser.add_argument('--generate_txt', action='store_true',
help='to generate txt for splitted images')


def abspath(path):
Expand Down Expand Up @@ -171,7 +173,7 @@ def get_window_obj(info, windows, iof_thr):


def crop_and_save_img(info, windows, window_anns, img_dir, no_padding,
padding_value, filter_empty, save_dir, img_ext):
padding_value, filter_empty, save_dir, img_ext, generate_txt, save_txt):
img = cv2.imread(osp.join(img_dir, info['filename']))
patch_infos = []
for i in range(windows.shape[0]):
Expand Down Expand Up @@ -211,18 +213,33 @@ def crop_and_save_img(info, windows, window_anns, img_dir, no_padding,
cv2.imwrite(osp.join(save_dir, patch_info['id']+img_ext), patch)
patch_info['filename'] = patch_info['id'] + img_ext
patch_infos.append(patch_info)

if generate_txt:
# annotation txt file generation
txtpath = osp.join(save_txt, patch_info['id']+'.txt')
txtfile = open(txtpath, "a");
for i in range(len(patch_info['ann']['labels'])):
box = np.array2string(patch_info['ann']['bboxes'][i]).strip("[""]")
box += ' '
box += str(patch_info['ann']['classnames'][i])
box += ' '
box += str(patch_info['ann']['diffs'][i])
box += '\n'
#print(box)
txtfile.write(box)
txtfile.close()

return patch_infos


def single_split(arguments, sizes, gaps, img_rate_thr, iof_thr, no_padding,
padding_value, filter_empty, save_dir, img_ext, lock,
padding_value, filter_empty, save_dir, img_ext, generate_txt, save_txt, lock,
prog, total, logger):
info, img_dir = arguments
windows = get_sliding_window(info, sizes, gaps, img_rate_thr)
window_anns = get_window_obj(info, windows, iof_thr)
patch_infos = crop_and_save_img(info, windows, window_anns, img_dir, no_padding,
padding_value, filter_empty, save_dir, img_ext)
padding_value, filter_empty, save_dir, img_ext, generate_txt, save_txt)
assert patch_infos or (filter_empty and info['ann']['bboxes'].size == 0)

lock.acquire()
Expand Down Expand Up @@ -271,8 +288,10 @@ def main():
gaps += [int(gap / rate) for gap in args.gaps]
save_imgs = osp.join(args.save_dir, 'images')
save_files = osp.join(args.save_dir, 'annfiles')
save_txt = osp.join(args.save_dir, 'txt')
os.makedirs(save_imgs)
os.makedirs(save_files)
os.makedirs(save_txt)
logger = setup_logger(save_files)

print('Loading original data!!!')
Expand Down Expand Up @@ -304,6 +323,8 @@ def main():
filter_empty=args.filter_empty,
save_dir=save_imgs,
img_ext=args.save_ext,
generate_txt=args.generate_txt,
save_txt=save_txt,
lock=manager.Lock(),
prog=manager.Value('i', 0),
total=len(infos),
Expand Down Expand Up @@ -334,3 +355,4 @@ def main():

if __name__ == '__main__':
main()

Loading