You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
classVideoRecorderCallback(BaseCallback):
def__init__(self, eval_env: gym.Env, render_freq: int, n_eval_episodes: int=5, deterministic: bool=True):
""" Records a video of an agent's trajectory traversing ``eval_env`` and logs it to TensorBoard :param eval_env: A gym environment from which the trajectory is recorded :param render_freq: Render the agent's trajectory every eval_freq call of the callback. :param n_eval_episodes: Number of episodes to render :param deterministic: Whether to use deterministic or stochastic policy """super().__init__()
self._eval_env=eval_envself._render_freq=render_freqself._n_eval_episodes=n_eval_episodesself._deterministic=deterministicdef_on_step(self) ->bool:
ifself.n_calls%self._render_freq==0:
screens= []
defgrab_screens(_locals: Dict[str, Any], _globals: Dict[str, Any]) ->None:
""" Renders the environment in its current state, recording the screen in the captured `screens` list :param _locals: A dictionary containing all local variables of the callback's scope :param _globals: A dictionary containing all global variables of the callback's scope """# We expect `render()` to return a uint8 array with values in [0, 255] or a float array# with values in [0, 1], as described in# https://pytorch.org/docs/stable/tensorboard.html#torch.utils.tensorboard.writer.SummaryWriter.add_video# screen = self._eval_env.render(mode="rgb_array")screen=self._eval_env.unwrapped.sim.renderer.render_offscreen(
width=640,
height=480,
camera_id=1)
# PyTorch uses CxHxW vs HxWxC gym (and tensorflow) image conventionscreens.append(screen.transpose(2, 0, 1))
evaluate_policy(
self.model,
self._eval_env,
callback=grab_screens,
n_eval_episodes=self._n_eval_episodes,
deterministic=self._deterministic,
)
self.logger.record(
"trajectory/video",
Video(torch.from_numpy(np.asarray([screens])), fps=40),
exclude=("stdout", "log", "json", "csv"),
)
returnTrue
But it seems stuck in rendering, do you have any suggestions? Or could you considering provide a usable one?
The text was updated successfully, but these errors were encountered:
As discussed in #212, I tried to modify
VideoRecorderCallback
from https://stable-baselines3.readthedocs.io/en/master/guide/tensorboard.html usingenv.sim.renderer.render_offscreen()
as follows:But it seems stuck in rendering, do you have any suggestions? Or could you considering provide a usable one?
The text was updated successfully, but these errors were encountered: