Spaces:
Running
on
A10G
Running
on
A10G
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) | |