Esempio n. 1
0
 def from_dict(cls, src_dict):
     assert 'counts' in src_dict
     assert 'size' in src_dict
     h = src_dict['size'][0]
     w = src_dict['size'][1]
     rle = mask.frPyObjects([src_dict], h, w)
     assert isinstance(rle, list) and isinstance(rle[0], dict)
     return cls(w, h, rle[0]['counts'])
Esempio n. 2
0
 def from_list(cls, w, h, src_list):
     rle = mask.frPyObjects(src_list, h, w)
     assert isinstance(rle, list)
     if len(rle) > 1:
         rle_bytes = mask.merge(rle)['counts']
     else:
         rle_bytes = rle[0]['counts']
     return cls(w, h, rle_bytes)
Esempio n. 3
0
 def getMask(self, ref):
     # return mask, area and mask-center
     ann = self.refToAnn[ref['ref_id']]
     image = self.Imgs[ref['image_id']]
     if type(ann['segmentation'][0]) == list:  # polygon
         rle = mask.frPyObjects(ann['segmentation'], image['height'],
                                image['width'])
     else:
         rle = ann['segmentation']
     return {'rle': rle}
Esempio n. 4
0
	def getMask(self, ref):
		# return mask, area and mask-center
		ann = self.refToAnn[ref['ref_id']]
		image = self.Imgs[ref['image_id']]
		if type(ann['segmentation'][0]) == list: # polygon
			rle = mask.frPyObjects(ann['segmentation'], image['height'], image['width'])
		else:
			rle = ann['segmentation']
		m = mask.decode(rle)
		m = np.sum(m, axis=2)  # sometimes there are multiple binary map (corresponding to multiple segs)
		m = m.astype(np.uint8) # convert to np.uint8
		# compute area
		area = sum(mask.area(rle))  # should be close to ann['area']
		return {'mask': m, 'area': area}
Esempio n. 5
0
	def getMask(self, ref):
		# return mask, area and mask-center
		ann = self.refToAnn[ref['ref_id']]
		image = self.Imgs[ref['image_id']]
		if type(ann['segmentation'][0]) == list: # polygon
			rle = mask.frPyObjects(ann['segmentation'], image['height'], image['width'])
		else:
			rle = ann['segmentation']
		m = mask.decode(rle)
		m = np.sum(m, axis=2)  # sometimes there are multiple binary map (corresponding to multiple segs)
		m = m.astype(np.uint8) # convert to np.uint8
		# compute area
		area = sum(mask.area(rle))  # should be close to ann['area']
		return {'mask': m, 'area': area}
Esempio n. 6
0
def generateMasksAndQueries(MASK_DIR, QUERY_FILE_NAME, refer_obj):
	img_sg_counts = {}
	query_file_str = {}
	print "Creating {} mask files..".format(len(refer_obj.data['annotations']))
	actual_processed = 0
	for i,ann in enumerate(refer_obj.data['annotations']):
		if i % 1000 == 0:
			with open(QUERY_FILE_NAME, 'w') as fp:
				json.dump(query_file_str, fp)
			print "On annotation #{}, processed = {}".format(i,actual_processed)
		if ann['iscrowd'] == 1 or ann['id'] not in refer_obj.annToRef:
			continue
		actual_processed += 1
		image = refer_obj.Imgs[ann['image_id']]
		if type(ann['segmentation']) == list: # polygon
			rle = mask.frPyObjects(ann['segmentation'], image['height'], image['width'])
		else:
			rle = ann['segmentation']
		m = mask.decode(rle)
		m = np.sum(m, axis=2)
		matlab_dict = {'segimg_t': m}
		if ann['image_id'] in img_sg_counts:
			img_sg_counts[ann['image_id']] += 1
			filename = "{}_{}".format(ann['image_id'],img_sg_counts[ann['image_id']])
		else:
			img_sg_counts[ann['image_id']] = 1
			filename = "{}_{}".format(ann['image_id'],img_sg_counts[ann['image_id']])
		io.savemat(osp.join(MASK_DIR,filename),matlab_dict)
		ref = refer_obj.annToRef[ann['id']]
		if filename in query_file_str:
			val = query_file_str[filename] 
		else:
			val = []
		for sentence in ref['sentences']:
			val.append(sentence['raw'])
		query_file_str[filename] = val