def generate_video( video_option: List[str], video_dir: Optional[str], images: List[np.ndarray], episode_id: Union[int, str], checkpoint_idx: int, metrics: Dict[str, float], tb_writer: TensorboardWriter, fps: int = 10, ) -> None: r"""Generate video according to specified information. Args: video_option: string list of "tensorboard" or "disk" or both. video_dir: path to target video directory. images: list of images to be converted to video. episode_id: episode id for video naming. checkpoint_idx: checkpoint index for video naming. metric_name: name of the performance metric, e.g. "spl". metric_value: value of metric. tb_writer: tensorboard writer object for uploading video. fps: fps for generated video. Returns: None """ if len(images) < 1: return metric_strs = [] for k, v in metrics.items(): if isinstance(v, str): metric_strs.append(f"{k}={v}") else: metric_strs.append(f"{k}={v:.2f}") video_name = f"episode={episode_id}-ckpt={checkpoint_idx}-" + "-".join( metric_strs) if "disk" in video_option: assert video_dir is not None images_to_video(images, video_dir, video_name, fps=fps) if "tensorboard" in video_option: tb_writer.add_video_from_np_images(f"episode{episode_id}", checkpoint_idx, images, fps=fps) return video_name
def generate_video( video_option: List[str], video_dir: Optional[str], images: List[np.ndarray], episode_id: int, checkpoint_idx: int, tag: str, metrics: Dict[str, float], tb_writer: TensorboardWriter, fps: int = 10, ) -> None: r"""Generate video according to specified information. Args: video_option: string list of "tensorboard" or "disk" or both. video_dir: path to target video directory. images: list of images to be converted to video. episode_id: episode id for video naming. checkpoint_idx: checkpoint index for video naming. info: metric dictionary tag: Additional tag for naming video tb_writer: tensorboard writer object for uploading video. fps: fps for generated video. Returns: None """ print(len(images)) if len(images) < 1: return metric_strs = [] for k, v in metrics.items(): metric_strs.append(f"{k}={v:.2f}") video_name = f"{tag}_episode={episode_id}-ckpt={checkpoint_idx}-" + "-".join( metric_strs ) if "disk" in video_option: assert video_dir is not None images_to_video(images, video_dir, video_name) if "tensorboard" in video_option: tb_writer.add_video_from_np_images( f"episode{episode_id}", checkpoint_idx, images, fps=fps )
def generate_video( video_option: List[str], video_dir: Optional[str], images: List[np.ndarray], episode_id: int, checkpoint_idx: int, metric_name: str, metric_value: float, tb_writer: TensorboardWriter, fps: int = 10, ) -> None: r"""Generate video according to specified information. Args: video_option: string list of "tensorboard" or "disk" or both. video_dir: path to target video directory. images: list of images to be converted to video. episode_id: episode id for video naming. checkpoint_idx: checkpoint index for video naming. metric_name: name of the performance metric, e.g. "spl". metric_value: value of metric. tb_writer: tensorboard writer object for uploading video. fps: fps for generated video. Returns: None """ if len(images) < 1: return video_name = f"episode{episode_id}_ckpt{checkpoint_idx}_{metric_name}{metric_value:.2f}" if "disk" in video_option: assert video_dir is not None images_to_video(images, video_dir, video_name) if "tensorboard" in video_option: tb_writer.add_video_from_np_images(f"episode{episode_id}", checkpoint_idx, images, fps=fps)