def render(self, mode='rgb_array', *args, **kwargs): """ @brief Parallel rendering of the current state of each environment. @param[in] mode Display mode. For now, only 'rgb_array' is supported. @param[in] args Extra arguments passed to `render` method of each Gym environment @param[in] kwargs Extra keyword arguments passed to `render` method of each Gym environment @return None or iterator of RGB images if mode == 'rgb_array'. """ # gather images from subprocesses. `mode` will be taken into account later for pipe in self.remotes: # gather images from subprocesses # `mode` will be taken into account later pipe.send(('render', (args, {'mode': 'rgb_array', **kwargs}))) imgs = [pipe.recv() for pipe in self.remotes] # Create a big image by tiling images from subprocesses bigimg = tile_images(imgs) if mode == 'rgb_array': return bigimg else: raise NotImplementedError
def attention_render(model_name, env_name, num_cpu, log_dir): if not os.path.exists(log_dir): raise ('log_dir not Exists') env_id = env_name + 'NoFrameskip-v4' env = SubprocVecEnv([make_env(env_id, i, log_dir) for i in range(num_cpu)]) # env = Monitor(env, log_dir, allow_early_resets=True) if model_name == 'A2C_Attention': model = A2C(AttentionPolicy, env, verbose=1, tensorboard_log=log_dir + 'tensorboard/') elif model_name == 'A2C_Attention2': model = A2C(Attention2Policy, env, verbose=1, tensorboard_log=log_dir + 'tensorboard/') elif model_name == 'A2C': model = A2C(LstmPolicy, env, verbose=1, tensorboard_log=log_dir + 'tensorboard/') else: model = None model = model.load(log_dir + model_name + '_' + env_name, env=env) obs = env.reset() # print(env.observation_space) # cv2.imshow('test', RGB2BGR(obs[0])) # cv2.waitKey(0) while True: action, _states = model.predict(obs) obs, rewards, done, info = env.step(action) attentions = model.get_attention(obs, _states, done)[0] attentions_img = [] # print('attention', np.array(attention).shape) for i, attention in enumerate(attentions): attention = np.array(attention) attention = np.reshape(attention, [ env.observation_space.shape[0] // 10, env.observation_space.shape[1] // 10, 1 ]) attention = np.repeat(attention, [10] * attention.shape[0], axis=0) attention = np.repeat(attention, [10] * attention.shape[1], axis=1) attention = attention * 255 attentions_img.append(attention) # print(np.sum(attention)) attentions = tile_images(attentions_img) cv2.imshow('attention', attentions) cv2.waitKey(1) # break env.render() return model
def render(self, mode='human'): for pipe in self.remotes: pipe.send(('render', None)) imgs = [pipe.recv() for pipe in self.remotes] bigimg = tile_images(imgs) if mode == 'human': import cv2 cv2.imshow('vecenv', bigimg[:, :, ::-1]) cv2.waitKey(1) elif mode == 'rgb_array': return bigimg else: raise NotImplementedError
def render(self, mode='human', *args, **kwargs): # gather images from subprocesses # `mode` will be taken into account later imgs = self.get_images(*args, **kwargs) # Create a big image by tiling images from subprocesses bigimg = tile_images(imgs) if mode == 'human': import cv2 cv2.imshow('vecenv', bigimg[:, :, ::-1]) cv2.waitKey(1) elif mode == 'rgb_array': return bigimg else: raise NotImplementedError
def render(self, mode='human', *args, **kwargs): for pipe in self.remotes: # gather images from subprocesses # `mode` will be taken into account later pipe.send(('render', (args, {'mode': 'rgb_array', **kwargs}))) imgs = [pipe.recv() for pipe in self.remotes] # Create a big image by tiling images from subprocesses bigimg = tile_images(imgs) if mode == 'human': import cv2 cv2.imshow('vecenv', bigimg[:, :, ::-1]) cv2.waitKey(1) elif mode == 'rgb_array': return bigimg else: raise NotImplementedError
def render(self, indices=None, *args, **kwargs): for pipe in self._get_target_remotes(indices): # gather images from subprocesses # `mode` will be taken into account later pipe.send(('render', (args, {**kwargs}))) figs = [pipe.recv() for pipe in self._get_target_remotes(indices)] if isinstance(indices, int): figs = figs[0] return figs # Create a big image by tiling images from subprocesses bigimg = tile_images(imgs) if mode == 'human': import cv2 cv2.imshow('vecenv', bigimg[:, :, ::-1]) cv2.waitKey(1) elif mode == 'rgb_array': return bigimg else: raise NotImplementedError
def _record(self, obs): self.last += 1 if self.last - self.reduction < 0: return else: self.last = 0 if self.record_obs: if self.unvec: for i, recorder in enumerate(self.recorders): recorder.record(obs[i]) else: self.recorders[0].record(tile_images(obs)) else: if self.unvec: images = self.venv.env_method("render", mode="rgb_array") for i, recorder in enumerate(self.recorders): recorder.record(images[i]) else: self.recorders[0].record(self.venv.render(mode="rgb_array"))
def render(self, mode: str, *args, **kwargs): """ Gym environment rendering :param mode: the rendering type """ try: imgs = self.get_images(*args, **kwargs) except NotImplementedError: logger.warn('Render not defined for {}'.format(self)) return # Create a big image by tiling images from subprocesses bigimg = tile_images(imgs) if mode == 'human': import cv2 # pytype:disable=import-error cv2.imshow('vecenv', bigimg[:, :, ::-1]) cv2.waitKey(1) elif mode == 'rgb_array': return bigimg else: raise NotImplementedError