Beispiel #1
0
 def render(self, player=-1):
     if player == -1:
         return self.env.render()
     else:
         if not self.viewer:
             from gym.envs.classic_control.rendering import SimpleImageViewer
             self.viewer = [SimpleImageViewer(), SimpleImageViewer()]
         return self.viewer[player].imshow(self.crop(self.env.img, player))
Beispiel #2
0
    def render(self, mode: str = 'human'):
        """
        Render the current screen using the given mode.

        Args:
            mode: the mode to render the screen using
                - 'human': render in a window using GTK
                - 'rgb_array': render in the back-end and return a matrix

        Returns:
            None if mode is 'human' or a matrix if mode is 'rgb_array'

        """
        # if the mode is RGB, return the screen as a NumPy array
        if mode == 'rgb_array':
            return self.game.screen
        # if the mode is human, create a viewer and display the screen
        elif mode == 'human':
            from pyglet.window import Window
            from gym.envs.classic_control.rendering import SimpleImageViewer
            if self.viewer is None:
                self.viewer = SimpleImageViewer()
                self.viewer.window = Window(
                    width=SCREEN_WIDTH,
                    height=SCREEN_HEIGHT,
                    caption=self.spec.id,
                )
            self.viewer.imshow(self.game.screen)
            return self.viewer.isopen
        # otherwise the render mode is not supported, raise an error
        else:
            raise ValueError('unsupported render mode: {}'.format(repr(mode)))
Beispiel #3
0
    def render(self, mode='human'):
        """Render the board to an image viewer or an np.array.

        Args:
            mode: One of the following modes:
                - 'human': render to an image viewer.
                - 'rgb_array': render to an RGB np.array (np.uint8)

        Returns:
            3D np.array (np.uint8) or a `viewer.isopen`.
        """
        img = self._empty_board
        if self._last_observations:
            img = self._last_observations.board
            layers = self._last_observations.layers
            if self._colors:
                img = self._paint_board(layers)
            else:
                assert img is not None, '`board` must not be `None`.'

        img = _repeat_axes(img, self.resize_scale, axis=[0, 1])
        if len(img.shape) != 3:
            img = np.repeat(img[..., None], 3, axis=-1)
        img = img.astype(np.uint8)

        if mode == 'rgb_array':
            return img
        elif mode == 'human':
            if self.viewer is None:
                from gym.envs.classic_control.rendering import (
                    SimpleImageViewer)
                self.viewer = SimpleImageViewer()
            self.viewer.imshow(img)
            time.sleep(self.delay / 1e3)
            return self.viewer.isopen
Beispiel #4
0
def main():
    with tf.Session() as sess:
        print('Creating environment...')
        env = TFBatchedEnv(sess, Pong(), 1)
        env = BatchedFrameStack(env)

        print('Creating model...')
        model = CNN(sess,
                    gym_space_distribution(env.action_space),
                    gym_space_vectorizer(env.observation_space))

        print('Creating roller...')
        roller = TruncatedRoller(env, model, 1)

        print('Initializing variables...')
        sess.run(tf.global_variables_initializer())

        if os.path.exists('params.pkl'):
            print('Loading parameters...')
            with open('params.pkl', 'rb') as in_file:
                params = pickle.load(in_file)
            for var, val in zip(tf.trainable_variables(), params):
                sess.run(tf.assign(var, val))
        else:
            print('Warning: parameter file does not exist!')

        print('Running agent...')
        viewer = SimpleImageViewer()
        while True:
            for obs in roller.rollouts()[0].step_observations:
                viewer.imshow(obs[..., -3:])
Beispiel #5
0
    def venn(self):
        if not hasattr(self, 'viewer'):
            from gym.envs.classic_control.rendering import SimpleImageViewer
            self.viewer = SimpleImageViewer()

        fig, ax = plt.subplots()
        canvas = FigureCanvas(fig)

        A_and_not_B = len(
            set(self.archives['Alice'].keys()).difference(
                set(self.archives['Bob'].keys())))
        B_and_not_A = len(
            set(self.archives['Bob'].keys()).difference(
                set(self.archives['Alice'].keys())))
        A_and_B = len(
            set(self.archives['Alice'].keys()).intersection(
                set(self.archives['Bob'].keys())))

        v = venn2(subsets=(A_and_not_B, B_and_not_A, A_and_B),
                  set_labels=self.people)
        c = venn2_circles(subsets=(A_and_not_B, B_and_not_A, A_and_B),
                          linestyle='dotted',
                          lw=1.0)
        ax.set_title('Agents')
        fig.canvas.draw()
        venn = np.array(canvas.renderer._renderer)[:, :, :3]
        obs = cv2.resize(self.finalobs, (480, 480),
                         interpolation=cv2.INTER_AREA)
        venn = np.concatenate((venn, obs), axis=1)
        self.viewer.imshow(venn)
Beispiel #6
0
    def render(self, mode='rgb_array', close=False):
        """Render the board to an image viewer or an np.array.

        Args:
            mode: One of the following modes:
                - 'human': render to an image viewer.
                - 'rgb_array': render to an RGB np.array (np.uint8)

        Returns:
            3D np.array (np.uint8) or a `viewer.isopen`.
        """
        img = self._empty_uncropped_board
        if self._last_uncropped_observations:
            img = self._last_uncropped_observations.board
            layers = self._last_uncropped_observations.layers
            if self._colors:
                img = self._paint_board(layers, cropped=False)
            else:
                assert img is not None, '`board` must not be `None`.'

        img = self.resize(img)

        if mode == 'rgb_array':
            return img
        elif mode == 'human':
            if self.viewer is None:
                from gym.envs.classic_control.rendering import (
                    SimpleImageViewer)
                self.viewer = SimpleImageViewer()
            self.viewer.imshow(img)
            time.sleep(self.delay / 1e3)
            return self.viewer.isopen
Beispiel #7
0
 def render(self):
     if self.simple_image_viewer is None:
         from gym.envs.classic_control.rendering import SimpleImageViewer
         self.simple_image_viewer = SimpleImageViewer()
     im_obs = self.get_img_obs()
     self.simple_image_viewer.imshow(im_obs)
     time.sleep(0.075)
 def render(self, mode='human'):
     if self.viewer is None:
         self.viewer = SimpleImageViewer()
     rimg_i = self.road_img(self.cars[0].py - 0.5, SWD, SHD)[0]
     img = np.transpose(
         np.stack([((1.0 - rimg_i) * 255).astype(np.uint8)] * 3, axis=2),
         (1, 0, 2))[::-1, :, :]
     self.viewer.imshow(img)
 def render(self, mode: str = 'human') -> Optional[ndarray]:
     if mode == 'human':
         arr = self._env.render('rgb_array')
         if self.viewer is None:
             from gym.envs.classic_control.rendering import SimpleImageViewer
             self.viewer = SimpleImageViewer()
         self.viewer.imshow(arr)  # type: ignore
         return None
     else:
         return self._env.render(mode)
Beispiel #10
0
 def render(self, mode='human', close=False):
     if mode == 'human':
         # the following is copied from gym's AtariEnv
         if self.viewer is None:
             from gym.envs.classic_control.rendering import SimpleImageViewer
             self.viewer = SimpleImageViewer()
         self.viewer.imshow(self.toybox.get_rgb_frame())
         return self.viewer.isopen
     elif mode == 'rgb_array':
         return self.toybox.get_rgb_frame()
Beispiel #11
0
def main():
    global restart, action
    parser = argparse.ArgumentParser()
    parser.add_argument("--bot", type=int, default=0,
                        help="Number of bot cars_full in environment.")
    parser.add_argument("--track", type=int, default=0,
                        help="Track for agents cars_full in environment.")
    parser.add_argument("--discrete", type=int, default=1, help="Apply discrete wrapper?")
    parser.add_argument("--sleep", type=float, default=None, help="time in s between actions")
    parser.add_argument("--debug", action='store_true', default=False, help="debug mode")
    parser.add_argument(
        "--env-settings",
        type=str,
        default='envs/gym_car_intersect_fixed/settings_sets/env_settings__basic_small_rotation.json',
        help="debug mode"
    )

    args = parser.parse_args()


    env = CarRacingHackatonContinuousFixed(args.env_settings)
    env = DiscreteWrapper(env)


    env.reset()
    time.sleep(3.0)

    viewer = SimpleImageViewer()
    viewer.imshow(env.get_true_picture())
    viewer.window.on_key_press = key_press
    viewer.window.on_key_release = key_release
    # while True:
    env.reset()
    total_reward = 0.0
    steps = 0
    restart = False
    while True:
        s = None
        done = None
        info = {}
        for _ in range(1):
            s, r, done, info = env.step(action)
            total_reward += r
        print("\naction " + str(action))
        print("step {} total_reward {:+0.2f}".format(steps, total_reward))
        print(info)

        steps += 1
        viewer.imshow(env.get_true_picture())

        if done or restart or 'need_restart' in info.keys():
            print('restart')
            break
Beispiel #12
0
 def __init__(self, env, model, num_steps, discount_rate, summary_frequency,
              performance_num_episodes, summary_log_dir):
     self.env = env
     self.model = model
     self.discount_rate = discount_rate
     self.observation = env.reset()
     self.num_steps = num_steps
     self.stats_recorder = StatsRecorder(
         summary_frequency=summary_frequency,
         performance_num_episodes=performance_num_episodes,
         summary_log_dir=summary_log_dir,
         save=True)
     self.viewer = SimpleImageViewer()
Beispiel #13
0
 def render(self, mode='human', close=False):
     if close:
         if self.viewer:
             self.viewer.close()
         return
     if mode == "rgb_array":
         return self.em.get_screen() if self.img is None else self.img
     elif mode == "human":
         if self.viewer is None:
             from gym.envs.classic_control.rendering import SimpleImageViewer
             self.viewer = SimpleImageViewer()
         self.viewer.imshow(self.img)
         return self.viewer.isopen
 def post_act(self):
     try:
         if self.render_fn is not None:
             self.render_fn()
         elif self.image_getter is not None:
             if self.viewer is None:
                 self.viewer = SimpleImageViewer()
             img = self.image_getter()
             self.viewer.imshow(img)
         elif self.plotfig_getter is not None:
             if self.viewer is None:
                 self.viewer = SimpleImageViewer()
             fig = self.plotfig_getter()  # type: Figure
             data = np.fromstring(fig.canvas.tostring_rgb(), dtype=np.uint8)
             img = data.reshape(fig.canvas.get_width_height()[::-1] + (3, ))
             self.viewer.imshow(img)
         else:
             self.env.render()
     except Exception:
         logging.getLogger(__name__).exception(
             f'{self.name}: Unable to render. Disabling agent!')
         self.disable()
Beispiel #15
0
 def __init__(self,
              file_name="map1.txt",
              fail_rate=0.0,
              terminal_reward=1.0,
              move_reward=0.0,
              bump_reward=-0.5,
              bomb_reward=-1.0):
     self.viewer = SimpleImageViewer()
     self.n = None
     self.m = None
     self.bombs = []
     self.walls = []
     self.goals = []
     self.start = None
     this_file_path = os.path.dirname(os.path.realpath(__file__))
     file_name = os.path.join(this_file_path, file_name)
     with open(file_name, "r") as f:
         for i, row in enumerate(f):
             row = row.rstrip('\r\n')
             if self.n is not None and len(row) != self.n:
                 raise ValueError(
                     "Map's rows are not of the same dimension...")
             self.n = len(row)
             for j, col in enumerate(row):
                 if col == "x" and self.start is None:
                     self.start = self.n * i + j
                 elif col == "x" and self.start is not None:
                     raise ValueError(
                         "There is more than one starting position in the map..."
                     )
                 elif col == "G":
                     self.goals.append(self.n * i + j)
                 elif col == "B":
                     self.bombs.append(self.n * i + j)
                 elif col == "1":
                     self.walls.append(self.n * i + j)
         self.m = i + 1
     if len(self.goals) == 0:
         raise ValueError("At least one goal needs to be specified...")
     self.n_states = self.n * self.m
     self.n_actions = 4
     self.fail_rate = fail_rate
     self.state = self.start
     self.terminal_reward = terminal_reward
     self.move_reward = move_reward
     self.bump_reward = bump_reward
     self.bomb_reward = bomb_reward
     self.action_space = spaces.Discrete(4)
     self.observation_space = spaces.Discrete(self.n_states)
     self.done = False
Beispiel #16
0
 def __init__(self,
              file_name="mmap1.txt",
              catch_level=2,
              terminal_reward=10.0,
              ontarget_reward=1.0,
              move_reward=0.0,
              bump_reward=-0.2):
     self.viewer = SimpleImageViewer()
     self.n = None
     self.m = None
     self.catch_level = catch_level
     self.walls = []
     self.init_evaders = []
     self.init_pursuers = []
     this_file_path = os.path.dirname(os.path.realpath(__file__))
     file_name = os.path.join(this_file_path, file_name)
     with open(file_name, "r") as f:
         for i, row in enumerate(f):
             row = row.rstrip('\r\n')
             if self.n is not None and len(row) != self.n:
                 raise ValueError(
                     "Map's rows are not of the same dimension...")
             self.n = len(row)
             for j, col in enumerate(row):
                 if col == "P":
                     self.init_pursuers.append(self.n * i + j)
                 elif col == "E":
                     self.init_evaders.append(self.n * i + j)
                 elif col == "1":
                     self.walls.append(self.n * i + j)
         self.m = i + 1
     if self.m < 3 or self.n < 3:
         raise ValueError("Map too small...")
     if len(self.init_pursuers) < self.catch_level:
         raise ValueError(
             "At least a sufficient number of pursuers needs to be specified..."
         )
     if len(self.init_evaders) == 0:
         raise ValueError("At least one evaders needs to be specified...")
     self.evaders = copy.copy(self.init_evaders)
     self.pursuers = copy.copy(self.init_pursuers)
     self.n_states = self.n * self.m
     self.n_actions = 5**len(self.init_pursuers)
     self.terminal_reward = terminal_reward
     self.ontarget_reward = ontarget_reward
     self.move_reward = move_reward
     self.bump_reward = bump_reward
     self.action_space = spaces.Box(0, 4, (len(self.init_pursuers), ))
     self.observation_space = spaces.Box(-1, 3, (3, 3))
     self.done = False
Beispiel #17
0
def main():
    args = arg_parser().parse_args()

    conn = redis.StrictRedis(host=args.redis_host, port=args.redis_port)
    pubsub = conn.pubsub()
    pubsub.subscribe(args.channel + ':state:' + args.env_id)
    viewer = SimpleImageViewer()
    for msg in pubsub.listen():
        if msg['type'] != 'message':
            continue
        img = np.frombuffer(msg['data'][:3 * (args.obs_size**2)],
                            dtype='uint8')
        img = img.reshape([args.obs_size] * 2 + [3])
        viewer.imshow(img)
Beispiel #18
0
    def render(self, mode='human', max_width=500):
        img = self.get_image()
        img = np.asarray(img).astype(np.uint8)
        img_height, img_width = img.shape[:2]
        ratio = max_width / img_width
        #img = Image.fromarray(img).resize([int(ratio * img_width), int(ratio * img_height)])
        img = np.asarray(img)
        if mode == 'rgb_array':
            return img
        elif mode == 'human':
            from gym.envs.classic_control.rendering import SimpleImageViewer
            if self.viewer is None:
                self.viewer = SimpleImageViewer()
            self.viewer.imshow(img)

            return self.viewer.isopen
Beispiel #19
0
    def _get_simple_image_viewer(self):
        """Maybe construct a SimpleImageViewer instance for episode rendering."""
        # Try to render the env, if required.
        if not self._render:
            return None

        try:
            from gym.envs.classic_control.rendering import SimpleImageViewer

            return SimpleImageViewer()
        except (ImportError, ModuleNotFoundError):
            self._render = False  # disable rendering
            logger.warning("Could not import gym.envs.classic_control."
                           "rendering! Try `pip install gym[all]`.")

        return None
Beispiel #20
0
    def render(self, mode: str = "rgb_array") -> np.ndarray:
        observations = self._current_batch[0]
        if isinstance(observations, Observations):
            image_batch = observations.x
        else:
            assert isinstance(observations, Tensor)
            image_batch = observations
        if isinstance(image_batch, Tensor):
            image_batch = image_batch.cpu().numpy()

        if self.batch_size:
            image_batch = tile_images(image_batch)

        image_batch = Transforms.channels_last_if_needed(image_batch)
        assert image_batch.shape[-1] in {3, 4}
        if image_batch.dtype == np.float32:
            assert (0 <= image_batch).all() and (image_batch <= 1).all()
            image_batch = (256 * image_batch).astype(np.uint8)
        assert image_batch.dtype == np.uint8

        if mode == "rgb_array":
            # NOTE: Need to create a single image, channels_last format, and
            # possibly even of dtype uint8, in order for things like Monitor to
            # work.
            return image_batch

        if mode == "human":
            # return plt.imshow(image_batch)
            if self.viewer is None:
                display = None
                # TODO: There seems to be a bit of a bug, tests sometime fail because
                # "Can't connect to display: None" etc.
                try:
                    from gym.envs.classic_control.rendering import SimpleImageViewer
                except Exception:
                    from pyvirtualdisplay import Display

                    display = Display(visible=0, size=(1366, 768))
                    display.start()
                    from gym.envs.classic_control.rendering import SimpleImageViewer
                finally:
                    self.viewer = SimpleImageViewer(display=display)

            self.viewer.imshow(image_batch)
            return self.viewer.isopen

        raise NotImplementedError(f"Unsuported mode {mode}")
Beispiel #21
0
 def render(self, mode='human', close=False):  #*args, **kwargs):
     env = self.conopt_env
     if close:
         if 'viewer' in env.__dict__:
             env.viewer.close()
             del env.viewer
     else:
         img = env.world.model.render(np.expand_dims(env.x, 0))[0]
         if mode == 'human':
             #import cv2
             #img = cv2.resize(img, (50, 50))
             if not 'viewer' in env.__dict__:
                 from gym.envs.classic_control.rendering import SimpleImageViewer
                 env.viewer = SimpleImageViewer()
             env.viewer.imshow(img)
             return img
         else:
             return img
Beispiel #22
0
    def render(self, mode: str='human'):
        """
        Render the current screen using the given mode.

        Args:
            mode: the mode to render the screen using
                - 'human': render in a window using GTK
                - 'rgb_array': render in the back-end and return a matrix

        Returns:
            None if mode is 'human' or a matrix if mode is 'rgb_array'

        """
        if mode == 'human':
            if self.viewer is None:
                self.viewer = SimpleImageViewer()
            self.viewer.imshow(self.screen)
        elif mode == 'rgb_array':
            return self.screen
Beispiel #23
0
    def _render(self, mode='human', close=False):
        img = Image.new('RGB', (RENDER_HEIGHT, RENDER_WIDTH), WHITE)
        draw = ImageDraw.Draw(img)
        for i in range(self.num_agents):
            agent = self.state.agent_states[i]
            self._render_object(draw, agent, RED)
        self._render_object(draw, self.state.target_state, BLUE)
        self._render_objective(draw, GREEN)
        self._render_bounds(draw, BLACK)
        del draw

        if mode == 'human':
            if (self.viewer is None):
                # don't import SimpleImageViewer by default because even importing
                # it requires a display
                from gym.envs.classic_control.rendering import SimpleImageViewer
                self.viewer = SimpleImageViewer()
            self.viewer.imshow(np.asarray(img))
        elif mode == 'rgb_array':
            return np.asarray(img)
Beispiel #24
0
    def __init__(self, height=5, width=5, n_buttons=3, button_pos=None, pixels_per_tile=10, seed=None,
                 obs_dtype='bool'):
        """
        :param height: height of the world (in tiles)
        :param width: width of the world (in tiles)
        :param n_buttons: number of buttons
        :param button_pos: (optional) list of (2,) numpy arrays - positions of the buttons
        :param pixels_per_tile: height/width of a tile for rendering
        :param seed: if specified, sets this seed to numpy random
        :param obs_dtype: 'bool' or 'int' observation format. 'bool' for agent + one-hot encoding of buttons,
            'int' for one integer for each tile
        """
        self.action_space = spaces.Discrete(5)
        if obs_dtype == 'bool':
            self.observation_space = spaces.Box(low=0, high=1, shape=(2 * n_buttons + 1, height, width), dtype=int)
        else:
            self.observation_space = spaces.Box(low=0, high=2 * (2 * n_buttons + 1), dtype=int)
        self.height = height
        self.width = width
        self.n_buttons = n_buttons
        self.button_pos = button_pos
        if seed is not None:
            np.random.seed(seed)
        if self.button_pos is None:
            self.button_pos = []
            idx = np.random.choice(height * width, n_buttons, replace=False)
            for index in idx:
                self.button_pos.append(np.array([index // width, index % width], dtype=int))
            self.button_idx = tuple(idx)
        else:
            self.button_idx = tuple(a * width + b for (a, b) in button_pos)
        if obs_dtype not in ['bool', 'int']:
            raise ValueError('obs_type should be "bool" or "int"')
        self.obs_dtype = obs_dtype

        self.next_button = None
        self.pos = None
        self.viewer = SimpleImageViewer()
        self.pixels_per_tile = pixels_per_tile
Beispiel #25
0
def test():
    with open(os.path.join("demo", "Pong.demo"), "rb") as f:
        dat = pickle.load(f)
    viewer = SimpleImageViewer()
    env = gym.make('PongNoFrameskip-v4')
    checkpoint = dat['checkpoints'][18]
    checkpoint_action_nr = dat['checkpoint_action_nr'][18]
    env.reset()
    env.unwrapped.restore_state(checkpoint)

    t = 0
    while True:
        print("t ", t)
        action = dat['actions'][checkpoint_action_nr + t]
        observation, reward, done, _ = env.step(action)
        viewer.imshow(observation)
        if reward != 0:
            print("*** reset ***")
            env.reset()
            break
        time.sleep(0.5)
        t += 1
Beispiel #26
0
    def render(self, mode="human"):
        """Render the board to an image viewer.

        Args:
            mode: One of the following modes:
                - "human": render to an image viewer.
        Returns:
            3D np.array (np.uint8) or a `viewer.isopen`.
        """
        img = self._get_obs().numpy()
        img = np.abs(img)
        img = _repeat_axes(img, factor=50, axis=[0, 1])
        img *= 255

        img = img.astype(np.uint8)
        if mode == "human":
            if self.viewer is None:
                self.viewer = SimpleImageViewer()

            self.viewer.imshow(img)
            time.sleep(self.delay)
            return self.viewer.isopen
Beispiel #27
0
    def render(self, mode: str = 'human', env: Optional[int] = None) -> Any:
        if self.viewer is None and mode == 'human':
            # Lazy importing because this breaks EC2 instances that don't have a screen/viewing device
            from gym.envs.classic_control.rendering import SimpleImageViewer
            self.viewer = SimpleImageViewer(maxwidth=1080)

        img = self._get_env_images()
        img = build_render_rgb(img=img,
                               num_envs=self.num_envs,
                               env_height=self.height,
                               env_width=self.width,
                               env=env,
                               num_rows=self.render_args['num_rows'],
                               num_cols=self.render_args['num_cols'],
                               render_size=self.render_args['size'])

        if mode == 'human':
            self.viewer.imshow(img)
            return self.viewer.isopen
        elif mode == 'rgb_array':
            return img
        else:
            raise ValueError('Render mode not recognised.')
Beispiel #28
0
def watch_random(env, frame_rate=60.0):
    """
    Watch random agent play an environment.
    """
    init_state = env.reset(1)
    states = tf.placeholder(init_state.dtype, shape=init_state.get_shape())
    actions = tf.random_uniform(shape=[1],
                                minval=0,
                                maxval=env.num_actions,
                                dtype=tf.int32)
    new_states, rews, dones = env.step(states, actions)
    image = env.observe_visual(states)
    viewer = SimpleImageViewer()
    with tf.Session() as sess:
        cur_states = sess.run(init_state)
        while True:
            cur_states, cur_rews, cur_dones = sess.run(
                [new_states, rews, dones], feed_dict={states: cur_states})
            cur_image = sess.run(image, feed_dict={states: cur_states})
            viewer.imshow(cur_image[0])
            if cur_dones[0]:
                print('done with reward: %f' % cur_rews[0])
            time.sleep(1.0 / frame_rate)
Beispiel #29
0
    def render(self, mode='human', **kwargs):
        if mode == 'encoding':
            if not 'encoder' in kwargs:
                raise TypeError('Expected an encoder model `encoder`')
            if not 'observation' in kwargs:
                raise TypeError('Expected previous observation `observation`')

            encoder = kwargs['encoder']
            observation = kwargs['observation']
            encoding = encoder.predict(np.expand_dims(observation, axis=0))[0]
            encoding = (encoding - encoding.min()) / (encoding.max() -
                                                      encoding.min())
            image = np.repeat(np.expand_dims(encoding, axis=-1), 3, axis=-1)
            image = np.uint8(image * 255)
            image = cv2.resize(image, (210, 210), interpolation=cv2.INTER_AREA)
            image = np.concatenate((observation, image), axis=1)

            if self.viewer is None:
                from gym.envs.classic_control.rendering import SimpleImageViewer
                self.viewer = SimpleImageViewer()

            self.viewer.imshow(image)
        else:
            return self.env.render(mode, **kwargs)
Beispiel #30
0
    def render(self, mode='human', close=False):
        # Mimics functionality of parent render method, but adds lowres overlay
        if close:
            if self.viewer:
                self.viewer.close()
            return
        # Get game and overlay screens
        game_img = RetroEnv.get_screen(self)
        game_img_shape = game_img.shape
        lowres_overhead = self.get_screen()
        lowres_shape = lowres_overhead.shape
        # Extend the image
        actual_game_image = np.concatenate((game_img,np.zeros((game_img_shape[0], lowres_shape[1], 3))), axis=1)
        actual_game_image[0:lowres_shape[0],
                          game_img_shape[1]:game_img_shape[1] + lowres_shape[1],
                          :] = lowres_overhead
        actual_game_image = actual_game_image.astype("uint8")

        # Scale
        scale_percent = 400
        width = int(actual_game_image.shape[1] * scale_percent / 100)
        height = int(actual_game_image.shape[0] * scale_percent / 100)
        dim = (width, height)

        # resize image
        actual_game_image = cv2.resize(actual_game_image, dim, interpolation=cv2.INTER_AREA)


        if mode == "rgb_array":
            return actual_game_image
        elif mode == "human":
            if self.viewer is None:
                from gym.envs.classic_control.rendering import SimpleImageViewer
                self.viewer = SimpleImageViewer(maxwidth=width)
            self.viewer.imshow(actual_game_image)
            return self.viewer.isopen