From eeabb4d258069510a06c0359403703ce07d39544 Mon Sep 17 00:00:00 2001 From: CarolinePascal Date: Thu, 21 May 2026 16:11:22 +0200 Subject: [PATCH] chore(typos): fixing typos --- src/lerobot/datasets/compute_stats.py | 6 ++++-- src/lerobot/datasets/dataset_metadata.py | 4 ++-- src/lerobot/datasets/feature_utils.py | 4 +--- src/lerobot/datasets/video_utils.py | 15 ++++++++++----- src/lerobot/utils/visualization_utils.py | 4 ++-- 5 files changed, 19 insertions(+), 14 deletions(-) diff --git a/src/lerobot/datasets/compute_stats.py b/src/lerobot/datasets/compute_stats.py index f489c84a7..99678ee4b 100644 --- a/src/lerobot/datasets/compute_stats.py +++ b/src/lerobot/datasets/compute_stats.py @@ -550,8 +550,10 @@ def _validate_stat_value(value: np.ndarray, key: str, feature_key: str) -> None: if key == "count" and value.shape != (1,): raise ValueError(f"Shape of 'count' must be (1), but is {value.shape} instead.") - if "image" in feature_key and key != "count" and value.shape != (3, 1, 1): - raise ValueError(f"Shape of quantile '{key}' must be (3,1,1), but is {value.shape} instead.") + if "image" in feature_key and key != "count" and value.shape not in ((3, 1, 1), (1, 1, 1)): + raise ValueError( + f"Shape of quantile '{key}' must be (3,1,1) or (1,1,1) but is {value.shape} instead." + ) def _assert_type_and_shape(stats_list: list[dict[str, dict]]): diff --git a/src/lerobot/datasets/dataset_metadata.py b/src/lerobot/datasets/dataset_metadata.py index a5ff9718d..9072f70d3 100644 --- a/src/lerobot/datasets/dataset_metadata.py +++ b/src/lerobot/datasets/dataset_metadata.py @@ -557,7 +557,7 @@ class LeRobotDatasetMetadata: def update_video_info( self, video_key: str | None = None, - camera_encoder: VideoEncoderConfig | None = None, + video_encoder: VideoEncoderConfig | None = None, ) -> None: """Populate per-feature video info in ``info.json``. @@ -579,7 +579,7 @@ class LeRobotDatasetMetadata: for key in video_keys: if not self.features[key].get("info", None): video_path = self.root / self.video_path.format(video_key=key, chunk_index=0, file_index=0) - self.info.features[key]["info"] = get_video_info(video_path, camera_encoder=camera_encoder) + self.info.features[key]["info"] = get_video_info(video_path, video_encoder=video_encoder) def update_chunk_settings( self, diff --git a/src/lerobot/datasets/feature_utils.py b/src/lerobot/datasets/feature_utils.py index 9df670913..ac60efc68 100644 --- a/src/lerobot/datasets/feature_utils.py +++ b/src/lerobot/datasets/feature_utils.py @@ -333,9 +333,7 @@ def validate_feature_image_or_video( actual_shape = value.shape c, h, w = expected_shape if len(actual_shape) != 3 or (actual_shape != (c, h, w) and actual_shape != (h, w, c)): - error_message += f"The feature '{name}' of shape '{actual_shape}' does not have the expected shape '{(c, h, w)}' or '{(h, w, c)}'.\n" - else: - error_message += f"The feature '{name}' has an unsupported expected_shape '{expected_shape}'.\n" + error_message += f"The feature '{name}' of shape '{actual_shape}' does not have the expected shape '{(c, h, w)}' or '{(h, w, c)}'.\n" elif isinstance(value, PILImage.Image): pass else: diff --git a/src/lerobot/datasets/video_utils.py b/src/lerobot/datasets/video_utils.py index f21508b01..1c68de52d 100644 --- a/src/lerobot/datasets/video_utils.py +++ b/src/lerobot/datasets/video_utils.py @@ -372,7 +372,8 @@ def encode_video_frames( video_path.parent.mkdir(parents=True, exist_ok=True) # Get input frames - template = "frame-" + ("[0-9]" * 6) + ".png" + suffix = ".png" if not isinstance(video_encoder, DepthEncoderConfig) else ".tiff" + template = "frame-" + ("[0-9]" * 6) + suffix input_list = sorted( glob.glob(str(imgs_dir / template)), key=lambda x: int(x.split("-")[-1].split(".")[0]) ) @@ -696,20 +697,23 @@ class StreamingVideoEncoder: self._episode_active = False self._closed = False - def start_episode(self, video_keys: list[str], depth_video_keys: list[str], temp_dir: Path) -> None: + def start_episode( + self, video_keys: list[str], temp_dir: Path, depth_video_keys: list[str] | None = [] + ) -> None: """Start encoder threads for a new episode. Args: video_keys: List of video feature keys (e.g. ["observation.images.laptop"]) - depth_video_keys: List of video feature keys that carry depth maps (e.g. ["observation.images.laptop_depth"]) temp_dir: Base directory for temporary MP4 files + depth_video_keys: List of video feature keys that carry depth maps (e.g. + ["observation.images.laptop_depth"]). Defaults to ``[]`` (no depth keys). """ if self._episode_active: self.cancel_episode() self._dropped_frames.clear() - for video_key in video_keys + depth_video_keys: + for video_key in video_keys: frame_queue: queue.Queue = queue.Queue(maxsize=self.queue_maxsize) result_queue: queue.Queue = queue.Queue(maxsize=1) stop_event = threading.Event() @@ -978,7 +982,8 @@ def get_video_info( if field_name == "vcodec": continue video_info.setdefault(f"video.{field_name}", field_value) - video_info["is_depth_map"] = isinstance(video_encoder, DepthEncoderConfig) + + video_info["is_depth_map"] = isinstance(video_encoder, DepthEncoderConfig) return video_info diff --git a/src/lerobot/utils/visualization_utils.py b/src/lerobot/utils/visualization_utils.py index f13d55e0f..0cab0bcb3 100644 --- a/src/lerobot/utils/visualization_utils.py +++ b/src/lerobot/utils/visualization_utils.py @@ -111,11 +111,11 @@ def log_rerun_data( img_entity = ( rr.DepthImage(arr, colormap=rr.components.Colormap.Viridis).compress() if compress_images - else rr.rr.DepthImage(arr, colormap=rr.components.Colormap.Viridis) + else rr.DepthImage(arr, colormap=rr.components.Colormap.Viridis) ) else: img_entity = rr.Image(arr).compress() if compress_images else rr.Image(arr) - rr.log(key, entity=img_entity, static=True) + rr.log(key, entity=img_entity) if action: for k, v in action.items():