|
|
import json |
|
|
import numpy as np |
|
|
|
|
|
def load_ids(filename): |
|
|
ids = open(filename).read().splitlines() |
|
|
ids = np.array(ids, dtype=np.int64) |
|
|
return ids |
|
|
|
|
|
|
|
|
|
|
|
class Instance(object): |
|
|
instance_id = 0 |
|
|
label_id = 0 |
|
|
vert_count = 0 |
|
|
med_dist = -1 |
|
|
dist_conf = 0.0 |
|
|
|
|
|
def __init__(self, mesh_vert_instances, instance_id): |
|
|
if (instance_id == -1): |
|
|
return |
|
|
self.instance_id = int(instance_id) |
|
|
self.label_id = int(self.get_label_id(instance_id)) |
|
|
self.vert_count = int(self.get_instance_verts(mesh_vert_instances, instance_id)) |
|
|
|
|
|
def get_label_id(self, instance_id): |
|
|
return int(instance_id // 1000) |
|
|
|
|
|
def get_instance_verts(self, mesh_vert_instances, instance_id): |
|
|
return (mesh_vert_instances == instance_id).sum() |
|
|
|
|
|
def to_json(self): |
|
|
return json.dumps(self, default=lambda o: o.__dict__, sort_keys=True, indent=4) |
|
|
|
|
|
def to_dict(self): |
|
|
dict = {} |
|
|
dict["instance_id"] = self.instance_id |
|
|
dict["label_id"] = self.label_id |
|
|
dict["vert_count"] = self.vert_count |
|
|
dict["med_dist"] = self.med_dist |
|
|
dict["dist_conf"] = self.dist_conf |
|
|
return dict |
|
|
|
|
|
def from_json(self, data): |
|
|
self.instance_id = int(data["instance_id"]) |
|
|
self.label_id = int(data["label_id"]) |
|
|
self.vert_count = int(data["vert_count"]) |
|
|
if ("med_dist" in data): |
|
|
self.med_dist = float(data["med_dist"]) |
|
|
self.dist_conf = float(data["dist_conf"]) |
|
|
|
|
|
def __str__(self): |
|
|
return "("+str(self.instance_id)+")" |
|
|
|
|
|
def get_instances(ids, class_ids, class_labels, id2label): |
|
|
instances = {} |
|
|
for label in class_labels: |
|
|
instances[label] = [] |
|
|
instance_ids = np.unique(ids) |
|
|
for id in instance_ids: |
|
|
if id == 0: |
|
|
continue |
|
|
inst = Instance(ids, id) |
|
|
if inst.label_id in class_ids: |
|
|
instances[id2label[inst.label_id]].append(inst.to_dict()) |
|
|
return instances |
|
|
|