def test_render(self): api = objrender.RenderAPI(w=SIDE, h=SIDE, device=0) cfg = load_config('config.json') houseID, house = find_first_good_house(cfg) env = Environment(api, house, cfg) location = house.getRandomLocation(ROOM_TYPE) env.reset(*location) # Check RGB env.set_render_mode(RenderMode.RGB) rgb = env.render_cube_map() self.assertEqual(rgb.shape, (SIDE, SIDE * 6, 3)) # Check SEMANTIC env.set_render_mode(RenderMode.RGB) semantic = env.render_cube_map() self.assertEqual(semantic.shape, (SIDE, SIDE * 6, 3)) # Check INSTANCE env.set_render_mode(RenderMode.INSTANCE) instance = env.render_cube_map() self.assertEqual(instance.shape, (SIDE, SIDE * 6, 3)) # Check DEPTH env.set_render_mode(RenderMode.DEPTH) depth = env.render_cube_map() self.assertEqual(depth.dtype, np.uint8) self.assertEqual(depth.shape, (SIDE, SIDE * 6, 2)) depth_value = depth[0, 0, 0] * 20.0 / 255.0 # Check INVDEPTH env.set_render_mode(RenderMode.INVDEPTH) invdepth = env.render_cube_map() self.assertEqual(invdepth.dtype, np.uint8) self.assertEqual(invdepth.shape, (SIDE, SIDE * 6, 3)) # Convert to 16 bit and then to depth id16 = 256 * invdepth[:, :, 0] + invdepth[:, :, 1] depth2 = depth_of_inverse_depth(id16) self.assertEqual(depth2.dtype, np.float) self.assertEqual(depth2.shape, (SIDE, SIDE * 6)) # Check that depth value is within 5% of depth from RenderMode.DEPTH self.assertAlmostEqual( depth2[0, 0], depth_value, delta=depth_value * 0.05)
location = house.getRandomLocation(ROOM_TYPE) env.reset(*location) if __name__ == '__main__': api = create_api() cfg = load_config('config.json') houseID, house = get_rand_house(cfg) env = Environment(api, house, cfg) cam = api.getCamera() mode_idx = 0 for t in tqdm.trange(1000): reset_random(env, house) mat = cv2.cvtColor(env.render_cube_map(), cv2.COLOR_BGR2RGB) cv2.imshow("aaa", mat) key = cv2.waitKey(0) while key in [ord('h'), ord('l'), ord('s'), ord('n'), ord('i')]: if key == ord('h'): cam.yaw -= 5 cam.updateDirection() elif key == ord('l'): cam.yaw += 5 cam.updateDirection() elif key == ord('s'): cv2.imwrite("{}_mode{}.png".format(houseID, mode_idx), mat) elif key == ord('i'): mode_idx = (mode_idx + 1) % len(MODES) env.set_render_mode(MODES[mode_idx])