Spaces:
Runtime error
Runtime error
| import numpy as np | |
| def get_color_map(): | |
| color = np.array([ | |
| [244,242,229], # living room | |
| [253,244,171], # bedroom | |
| [234,216,214], # kitchen | |
| [205,233,252], # bathroom | |
| [208,216,135], # balcony | |
| [185,231,168], # balcony | |
| [249,222,189], # Storage | |
| [ 79, 79, 79], # exterior wall | |
| [255,225, 25], # FrontDoor | |
| [128,128,128], # interior wall | |
| [255,255,255] | |
| ],dtype=np.int64) | |
| cIdx = np.array([1,2,3,4,1,2,2,2,2,5,1,6,1,10,7,8,9,10])-1 | |
| return color[cIdx] | |
| def rot90_2D(pts,k=1,cnt=np.array([127.5,127.5])): | |
| ang = k*np.pi/2 | |
| R = np.array([[np.cos(ang),np.sin(ang)],[-np.sin(ang),np.cos(ang)]]) | |
| return np.dot(pts-cnt,R)+cnt | |
| def fliplr_2D(pts,size=255): | |
| return np.stack([pts[:,0],size-pts[:,1]],1) | |
| def align_image(image,rot_old,rot_new=0): | |
| k = np.ceil((rot_old-rot_new+2*np.pi)%(2*np.pi)/(np.pi/4))//2 | |
| return np.rot90(image,k) | |
| def align_box(box,rot_old,rot_new=0): | |
| box = box-np.array([0,0,1,1]) | |
| k = np.ceil((rot_old-rot_new+2*np.pi)%(2*np.pi)/(np.pi/4))//2 | |
| box = rot90_2D(box.reshape(-1,2),k).reshape(-1,4) | |
| return np.concatenate([np.minimum(box[:,:2],box[:,2:]),np.maximum(box[:,:2],box[:,2:])+1],-1).round().astype(int) | |
| def fliplr_box(box,size=255): | |
| box = box-np.array([0,0,1,1]) | |
| box=fliplr_2D(box.reshape(-1,2),size=size).reshape(-1,4) | |
| return np.concatenate([np.minimum(box[:,:2],box[:,2:]),np.maximum(box[:,:2],box[:,2:]+1)],-1).round().astype(int) | |
| def align_points(pts, rot_old, rot_new=0): | |
| k = np.ceil((rot_old - rot_new + 2 * np.pi) % (2 * np.pi) / (np.pi / 4)) // 2 | |
| pts = rot90_2D(pts, k) | |
| return pts.round().astype(int) | |
| def point_box_relation(u,vbox): | |
| uy,ux = u | |
| vy0, vx0, vy1, vx1 = vbox | |
| if (ux<vx0 and uy<=vy0) or (ux==vx0 and uy==vy0): | |
| relation = 'left-above' | |
| elif (vx0<=ux<vx1 and uy<=vy0): | |
| relation = 'above' | |
| elif (vx1<=ux and uy<vy0) or (ux==vx1 and uy==vy0): | |
| relation = 'right-above' | |
| elif (vx1<=ux and vy0<=uy<vy1): | |
| relation = 'right-of' | |
| elif (vx1<ux and vy1<=uy) or (ux==vx1 and uy==vy1): | |
| relation = 'right-below' | |
| elif (vx0<ux<=vx1 and vy1<=uy): | |
| relation = 'below' | |
| elif (ux<=vx0 and vy1<uy) or (ux==vx0 and uy==vy1): | |
| relation = 'left-below' | |
| elif(ux<=vx0 and vy0<uy<=vy1): | |
| relation = "left-of" | |
| elif(vx0<ux<vx1 and vy0<uy<vy1): | |
| relation = "inside" | |
| return relation | |
| def get_vocab(): | |
| room_label = [(0, 'LivingRoom', 1, "PublicArea"), | |
| (1, 'MasterRoom', 0, "Bedroom"), | |
| (2, 'Kitchen', 1, "FunctionArea"), | |
| (3, 'Bathroom', 0, "FunctionArea"), | |
| (4, 'DiningRoom', 1, "FunctionArea"), | |
| (5, 'ChildRoom', 0, "Bedroom"), | |
| (6, 'StudyRoom', 0, "Bedroom"), | |
| (7, 'SecondRoom', 0, "Bedroom"), | |
| (8, 'GuestRoom', 0, "Bedroom"), | |
| (9, 'Balcony', 1, "PublicArea"), | |
| (10, 'Entrance', 1, "PublicArea"), | |
| (11, 'Storage', 0, "PublicArea"), | |
| (12, 'Wall-in', 0, "PublicArea"), | |
| (13, 'External', 0, "External"), | |
| (14, 'ExteriorWall', 0, "ExteriorWall") | |
| ] | |
| predicates = [ | |
| 'left-above', | |
| 'left-below', | |
| 'left-of', | |
| 'above', | |
| 'inside', | |
| 'surrounding', | |
| 'below', | |
| 'right-of', | |
| 'right-above', | |
| 'right-below' | |
| ] | |
| door_pos = [ | |
| 'nan', | |
| 'bottom', | |
| 'bottom-right','right-bottom', | |
| 'right', | |
| 'right-top','top-right', | |
| 'top', | |
| 'top-left','left-top', | |
| 'left', | |
| 'left-bottom','bottom-left' | |
| ] | |
| vocab = { | |
| 'object_name_to_idx':{}, | |
| 'object_to_idx':{}, | |
| 'object_idx_to_name':[], | |
| 'pred_idx_to_name':[], | |
| 'pred_name_to_idx':{}, | |
| 'door_idx_to_name':[], | |
| 'door_name_to_idx':{} | |
| } | |
| vocab['object_name_to_idx'] = { label:index for index,label,_,_ in room_label[:] } | |
| vocab['object_to_idx'] = {str(index):index for index,lable,_,_ in room_label} | |
| vocab['object_idx_to_name'] = [label for index,label,_,_ in room_label] | |
| vocab['pred_idx_to_name'] = [p for i,p in enumerate(predicates)] | |
| vocab['pred_name_to_idx'] = {p:i for i,p in enumerate(predicates)} | |
| vocab['door_idx_to_name'] = [p for i,p in enumerate(door_pos)] | |
| vocab['door_name_to_idx'] = {p:i for i,p in enumerate(door_pos)} | |
| return vocab | |
| def int_tuple(s): | |
| return tuple(int(i) for i in s.split(',')) | |
| def float_tuple(s): | |
| return tuple(float(i) for i in s.split(',')) | |
| def str_tuple(s): | |
| return tuple(s.split(',')) | |
| def bool_flag(s): | |
| if s == '1': | |
| return True | |
| elif s == '0': | |
| return False | |
| msg = 'Invalid value "%s" for bool flag (should be 0 or 1)' | |
| raise ValueError(msg % s) |