| import numpy as np |
| from threading import Lock |
|
|
|
|
| class ID2RGBConverter: |
| def __init__(self): |
| self.all_id = [] |
| self.obj_to_id = {} |
| self.lock = Lock() |
|
|
| def _id_to_rgb(self, id: int): |
| rgb = np.zeros((3, ), dtype=np.uint8) |
| for i in range(3): |
| rgb[i] = id % 256 |
| id = id // 256 |
| return rgb |
|
|
| def convert(self, obj: int): |
| with self.lock: |
| if obj in self.obj_to_id: |
| id = self.obj_to_id[obj] |
| else: |
| while True: |
| id = np.random.randint(255, 256**3) |
| if id not in self.all_id: |
| break |
| self.obj_to_id[obj] = id |
| self.all_id.append(id) |
|
|
| return id, self._id_to_rgb(id) |
|
|