def test_video(self): asset_path = self.asset_path + ".gif" event = video(asset_path=asset_path, tensor=tensor_np(shape=(4, 3, 1, 8, 8))) assert event.path == asset_path assert os.path.exists(asset_path) is True event = video( asset_path=asset_path, tensor=tensor_np(shape=(16, 48, 1, 28, 28)) ) assert event.path == asset_path assert os.path.exists(asset_path) is True event = video(asset_path=asset_path, tensor=tensor_np(shape=(20, 7, 1, 8, 8))) assert event.path == asset_path assert os.path.exists(asset_path) is True
def log_video(self, data, name=None, fps=4, step=None, timestamp=None, content_type=None): """Logs a video. ```python >>> log_video("path/to/my_video1"), >>> log_video(name="my_vide2", data=np.arange(np.prod((4, 3, 1, 8, 8)), dtype=float).reshape((4, 3, 1, 8, 8))) # noqa ``` Args: data: video data or str. name: str, optional, if data is a filepath the name will be the name of the file fps: int, optional, frames per second step: int, optional timestamp: datetime, optional content_type: str, optional, default "gif" """ self._log_has_events() is_file = isinstance(data, str) and os.path.exists(data) content_type = content_type or "gif" if is_file: name = name or os.path.basename(data) content_type = get_path_extension(filepath=data) or content_type else: name = name or "video" asset_path = get_asset_path( run_path=self._artifacts_path, kind=V1ArtifactKind.VIDEO, name=name, step=step, ext=content_type, ) asset_rel_path = os.path.relpath(asset_path, self._artifacts_path) if is_file: event_value = events_processors.video_path( from_path=data, asset_path=asset_path, content_type=content_type, asset_rel_path=asset_rel_path, ) else: event_value = events_processors.video( asset_path=asset_path, tensor=data, fps=fps, content_type=content_type, asset_rel_path=asset_rel_path, ) if event_value == UNKNOWN: return logged_event = LoggedEventSpec( name=name, kind=V1ArtifactKind.VIDEO, event=V1Event.make(timestamp=timestamp, step=step, video=event_value), ) self._event_logger.add_event(logged_event)