Spaces:
Sleeping
Sleeping
| # coding=utf-8 | |
| # Copyleft 2019 Project LXRT | |
| import sys | |
| import csv | |
| import base64 | |
| import time | |
| import numpy as np | |
| csv.field_size_limit(sys.maxsize) | |
| FIELDNAMES = ["img_id", "img_h", "img_w", "objects_id", "objects_conf", | |
| "attrs_id", "attrs_conf", "num_boxes", "boxes", "features"] | |
| def load_obj_tsv(fname, topk=None): | |
| """Load object features from tsv file. | |
| :param fname: The path to the tsv file. | |
| :param topk: Only load features for top K images (lines) in the tsv file. | |
| Will load all the features if topk is either -1 or None. | |
| :return: A list of image object features where each feature is a dict. | |
| See FILENAMES above for the keys in the feature dict. | |
| """ | |
| data = [] | |
| start_time = time.time() | |
| print("Start to load Faster-RCNN detected objects from %s" % fname) | |
| with open(fname) as f: | |
| reader = csv.DictReader(f, FIELDNAMES, delimiter="\t") | |
| for i, item in enumerate(reader): | |
| for key in ['img_h', 'img_w', 'num_boxes']: | |
| item[key] = int(item[key]) | |
| boxes = item['num_boxes'] | |
| decode_config = [ | |
| ('objects_id', (boxes, ), np.int64), | |
| ('objects_conf', (boxes, ), np.float32), | |
| ('attrs_id', (boxes, ), np.int64), | |
| ('attrs_conf', (boxes, ), np.float32), | |
| ('boxes', (boxes, 4), np.float32), | |
| ('features', (boxes, -1), np.float32), | |
| ] | |
| for key, shape, dtype in decode_config: | |
| item[key] = np.frombuffer(base64.b64decode(item[key]), dtype=dtype) | |
| item[key] = item[key].reshape(shape) | |
| item[key].setflags(write=False) | |
| data.append(item) | |
| if topk is not None and len(data) == topk: | |
| break | |
| elapsed_time = time.time() - start_time | |
| print("Loaded %d images in file %s in %d seconds." % (len(data), fname, elapsed_time)) | |
| return data | |