12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- import os
- import numpy as np
- import json
- from PIL import Image
-
- DATA_PATH = '/media/external_10TB/10TB/vision/ByteTrackData/crowdhuman/'
- OUT_PATH = DATA_PATH + 'annotations/'
-
- SPLITS = ['val', 'train']
- DEBUG = False
-
- def load_func(fpath):
- print('fpath', fpath)
- assert os.path.exists(fpath)
- with open(fpath,'r') as fid:
- lines = fid.readlines()
- records =[json.loads(line.strip('\n')) for line in lines]
- return records
-
- if __name__ == '__main__':
- if not os.path.exists(OUT_PATH):
- os.mkdir(OUT_PATH)
- for split in SPLITS:
- data_path = DATA_PATH + split
- out_path = OUT_PATH + '{}.json'.format(split)
- out = {'images': [], 'annotations': [], 'categories': [{'id': 1, 'name': 'person'}]}
- ann_path = DATA_PATH + 'annotation_{}.odgt'.format(split)
- anns_data = load_func(ann_path)
- image_cnt = 0
- ann_cnt = 0
- video_cnt = 0
- for ann_data in anns_data:
- image_cnt += 1
- file_path = DATA_PATH + 'CrowdHuman_{}/'.format(split) + '{}.jpg'.format(ann_data['ID'])
- im = Image.open(file_path)
- image_info = {'file_name': '{}.jpg'.format(ann_data['ID']),
- 'id': image_cnt,
- 'height': im.size[1],
- 'width': im.size[0]}
- out['images'].append(image_info)
- if split != 'test':
- anns = ann_data['gtboxes']
- for i in range(len(anns)):
- ann_cnt += 1
- fbox = anns[i]['fbox']
- ann = {'id': ann_cnt,
- 'category_id': 1,
- 'image_id': image_cnt,
- 'track_id': -1,
- 'bbox_vis': anns[i]['vbox'],
- 'bbox': fbox,
- 'area': fbox[2] * fbox[3],
- 'iscrowd': 1 if 'extra' in anns[i] and \
- 'ignore' in anns[i]['extra'] and \
- anns[i]['extra']['ignore'] == 1 else 0}
- out['annotations'].append(ann)
- print('loaded {} for {} images and {} samples'.format(split, len(out['images']), len(out['annotations'])))
- json.dump(out, open(out_path, 'w'))
|