| | 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 |
| | |