mirror of
https://github.com/huggingface/lerobot.git
synced 2026-05-23 12:40:08 +00:00
fix(typos): fixing multiple typos
This commit is contained in:
@@ -19,7 +19,7 @@ This makes `save_episode()` near-instant (the video is already encoded by the ti
|
|||||||
| `streaming_encoding` | `--dataset.streaming_encoding` | `bool` | `True` | Enable real-time encoding during capture |
|
| `streaming_encoding` | `--dataset.streaming_encoding` | `bool` | `True` | Enable real-time encoding during capture |
|
||||||
| `vcodec` | `--dataset.camera_encoder_config.vcodec` | `str` | `"libsvtav1"` | Video codec. `"auto"` detects best HW encoder |
|
| `vcodec` | `--dataset.camera_encoder_config.vcodec` | `str` | `"libsvtav1"` | Video codec. `"auto"` detects best HW encoder |
|
||||||
| `encoder_threads` | `--dataset.encoder_threads` | `int \| None` | `None` (auto) | Threads per encoder instance. `None` will leave the vcoded decide |
|
| `encoder_threads` | `--dataset.encoder_threads` | `int \| None` | `None` (auto) | Threads per encoder instance. `None` will leave the vcoded decide |
|
||||||
| `encoder_queue_maxsize` | `--dataset.encoder_queue_maxsize` | `int` | `60` | Max buffered frames per camera (~2s at 30fps). Consumes RAM |
|
| `encoder_queue_maxsize` | `--dataset.encoder_queue_maxsize` | `int` | `30` | Max buffered frames per camera (~2s at 30fps). Consumes RAM |
|
||||||
|
|
||||||
## 3. Performance Considerations
|
## 3. Performance Considerations
|
||||||
|
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ import pyarrow as pa
|
|||||||
import pyarrow.parquet as pq
|
import pyarrow.parquet as pq
|
||||||
from huggingface_hub import snapshot_download
|
from huggingface_hub import snapshot_download
|
||||||
|
|
||||||
|
from lerobot.configs import VideoEncoderConfig
|
||||||
from lerobot.utils.constants import DEFAULT_FEATURES, HF_LEROBOT_HOME, HF_LEROBOT_HUB_CACHE
|
from lerobot.utils.constants import DEFAULT_FEATURES, HF_LEROBOT_HOME, HF_LEROBOT_HUB_CACHE
|
||||||
from lerobot.utils.feature_utils import _validate_feature_names
|
from lerobot.utils.feature_utils import _validate_feature_names
|
||||||
from lerobot.utils.utils import flatten_dict
|
from lerobot.utils.utils import flatten_dict
|
||||||
@@ -48,7 +49,7 @@ from .utils import (
|
|||||||
is_valid_version,
|
is_valid_version,
|
||||||
update_chunk_file_indices,
|
update_chunk_file_indices,
|
||||||
)
|
)
|
||||||
from .video_utils import VideoEncoderConfig, get_video_info
|
from .video_utils import get_video_info
|
||||||
|
|
||||||
CODEBASE_VERSION = "v3.0"
|
CODEBASE_VERSION = "v3.0"
|
||||||
|
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ import pyarrow.parquet as pq
|
|||||||
import torch
|
import torch
|
||||||
from tqdm import tqdm
|
from tqdm import tqdm
|
||||||
|
|
||||||
|
from lerobot.configs import VideoEncoderConfig, camera_encoder_defaults
|
||||||
from lerobot.utils.constants import ACTION, HF_LEROBOT_HOME, OBS_IMAGE, OBS_STATE
|
from lerobot.utils.constants import ACTION, HF_LEROBOT_HOME, OBS_IMAGE, OBS_STATE
|
||||||
from lerobot.utils.utils import flatten_dict
|
from lerobot.utils.utils import flatten_dict
|
||||||
|
|
||||||
@@ -63,8 +64,6 @@ from .utils import (
|
|||||||
update_chunk_file_indices,
|
update_chunk_file_indices,
|
||||||
)
|
)
|
||||||
from .video_utils import (
|
from .video_utils import (
|
||||||
VideoEncoderConfig,
|
|
||||||
camera_encoder_defaults,
|
|
||||||
encode_video_frames,
|
encode_video_frames,
|
||||||
get_video_info,
|
get_video_info,
|
||||||
)
|
)
|
||||||
@@ -107,7 +106,7 @@ def delete_episodes(
|
|||||||
output_dir: Root directory where the edited dataset will be stored. If not specified, defaults to $HF_LEROBOT_HOME/repo_id. Equivalent to new_root in EditDatasetConfig.
|
output_dir: Root directory where the edited dataset will be stored. If not specified, defaults to $HF_LEROBOT_HOME/repo_id. Equivalent to new_root in EditDatasetConfig.
|
||||||
repo_id: Edited dataset identifier. Equivalent to new_repo_id in EditDatasetConfig.
|
repo_id: Edited dataset identifier. Equivalent to new_repo_id in EditDatasetConfig.
|
||||||
camera_encoder_config: Video encoder settings used when re-encoding video segments
|
camera_encoder_config: Video encoder settings used when re-encoding video segments
|
||||||
(``None`` uses :func:`~lerobot.datasets.video_utils.camera_encoder_defaults`).
|
(``None`` uses :func:`~lerobot.configs.camera_encoder_defaults`).
|
||||||
"""
|
"""
|
||||||
if not episode_indices:
|
if not episode_indices:
|
||||||
raise ValueError("No episodes to delete")
|
raise ValueError("No episodes to delete")
|
||||||
@@ -172,7 +171,7 @@ def split_dataset(
|
|||||||
split names to fractions (must sum to <= 1.0).
|
split names to fractions (must sum to <= 1.0).
|
||||||
output_dir: Root directory where the split datasets will be stored. If not specified, defaults to $HF_LEROBOT_HOME/repo_id.
|
output_dir: Root directory where the split datasets will be stored. If not specified, defaults to $HF_LEROBOT_HOME/repo_id.
|
||||||
camera_encoder_config: Video encoder settings used when re-encoding video segments
|
camera_encoder_config: Video encoder settings used when re-encoding video segments
|
||||||
(``None`` uses :func:`~lerobot.datasets.video_utils.camera_encoder_defaults`).
|
(``None`` uses :func:`~lerobot.configs.camera_encoder_defaults`).
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
Split by specific episodes
|
Split by specific episodes
|
||||||
@@ -606,7 +605,7 @@ def _keep_episodes_from_video_with_av(
|
|||||||
is inclusive and end_frame is exclusive.
|
is inclusive and end_frame is exclusive.
|
||||||
fps: Frame rate of the video.
|
fps: Frame rate of the video.
|
||||||
camera_encoder_config: Video encoder settings
|
camera_encoder_config: Video encoder settings
|
||||||
(``None`` uses :func:`~lerobot.datasets.video_utils.camera_encoder_defaults`).
|
(``None`` uses :func:`~lerobot.configs.camera_encoder_defaults`).
|
||||||
"""
|
"""
|
||||||
if camera_encoder_config is None:
|
if camera_encoder_config is None:
|
||||||
camera_encoder_config = camera_encoder_defaults()
|
camera_encoder_config = camera_encoder_defaults()
|
||||||
@@ -714,7 +713,7 @@ def _copy_and_reindex_videos(
|
|||||||
dst_meta: Destination metadata object
|
dst_meta: Destination metadata object
|
||||||
episode_mapping: Mapping from old episode indices to new indices
|
episode_mapping: Mapping from old episode indices to new indices
|
||||||
camera_encoder_config: Video encoder settings used when re-encoding segments
|
camera_encoder_config: Video encoder settings used when re-encoding segments
|
||||||
(``None`` uses :func:`~lerobot.datasets.video_utils.camera_encoder_defaults`).
|
(``None`` uses :func:`~lerobot.configs.camera_encoder_defaults`).
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
dict mapping episode index to its video metadata (chunk_index, file_index, timestamps)
|
dict mapping episode index to its video metadata (chunk_index, file_index, timestamps)
|
||||||
@@ -1664,7 +1663,7 @@ def convert_image_to_video_dataset(
|
|||||||
output_dir: Root directory where the edited dataset will be stored. If not specified, defaults to $HF_LEROBOT_HOME/repo_id. Equivalent to new_root in EditDatasetConfig.
|
output_dir: Root directory where the edited dataset will be stored. If not specified, defaults to $HF_LEROBOT_HOME/repo_id. Equivalent to new_root in EditDatasetConfig.
|
||||||
repo_id: Edited dataset identifier. Equivalent to new_repo_id in EditDatasetConfig.
|
repo_id: Edited dataset identifier. Equivalent to new_repo_id in EditDatasetConfig.
|
||||||
camera_encoder_config: Video encoder settings
|
camera_encoder_config: Video encoder settings
|
||||||
(``None`` uses :func:`~lerobot.datasets.video_utils.camera_encoder_defaults`).
|
(``None`` uses :func:`~lerobot.configs.camera_encoder_defaults`).
|
||||||
episode_indices: List of episode indices to convert (None = all episodes)
|
episode_indices: List of episode indices to convert (None = all episodes)
|
||||||
num_workers: Number of threads for parallel processing (default: 4)
|
num_workers: Number of threads for parallel processing (default: 4)
|
||||||
max_episodes_per_batch: Maximum episodes per video batch to avoid memory issues (None = no limit)
|
max_episodes_per_batch: Maximum episodes per video batch to avoid memory issues (None = no limit)
|
||||||
|
|||||||
@@ -31,6 +31,8 @@ import PIL.Image
|
|||||||
import pyarrow.parquet as pq
|
import pyarrow.parquet as pq
|
||||||
import torch
|
import torch
|
||||||
|
|
||||||
|
from lerobot.configs import VideoEncoderConfig, camera_encoder_defaults
|
||||||
|
|
||||||
from .compute_stats import compute_episode_stats
|
from .compute_stats import compute_episode_stats
|
||||||
from .dataset_metadata import LeRobotDatasetMetadata
|
from .dataset_metadata import LeRobotDatasetMetadata
|
||||||
from .feature_utils import (
|
from .feature_utils import (
|
||||||
@@ -52,8 +54,6 @@ from .utils import (
|
|||||||
)
|
)
|
||||||
from .video_utils import (
|
from .video_utils import (
|
||||||
StreamingVideoEncoder,
|
StreamingVideoEncoder,
|
||||||
VideoEncoderConfig,
|
|
||||||
camera_encoder_defaults,
|
|
||||||
concatenate_video_files,
|
concatenate_video_files,
|
||||||
encode_video_frames,
|
encode_video_frames,
|
||||||
get_video_duration_in_s,
|
get_video_duration_in_s,
|
||||||
@@ -109,7 +109,7 @@ class DatasetWriter:
|
|||||||
settings, and episode persistence).
|
settings, and episode persistence).
|
||||||
root: Local dataset root directory.
|
root: Local dataset root directory.
|
||||||
camera_encoder_config: Video encoder settings applied to all cameras.
|
camera_encoder_config: Video encoder settings applied to all cameras.
|
||||||
``None`` uses :func:`~lerobot.datasets.video_utils.camera_encoder_defaults`.
|
``None`` uses :func:`~lerobot.configs.camera_encoder_defaults`.
|
||||||
encoder_threads: Number of encoder threads (global). ``None``
|
encoder_threads: Number of encoder threads (global). ``None``
|
||||||
lets the codec decide.
|
lets the codec decide.
|
||||||
batch_encoding_size: Number of episodes to accumulate before
|
batch_encoding_size: Number of episodes to accumulate before
|
||||||
|
|||||||
@@ -140,7 +140,6 @@ def features_equal_for_merge(features_a: dict[str, dict], features_b: dict[str,
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
if _without_encoder_info_keys(fa_key) != _without_encoder_info_keys(fb_key):
|
if _without_encoder_info_keys(fa_key) != _without_encoder_info_keys(fb_key):
|
||||||
raise ValueError(f"Features {fa_key} and {fb_key} are not equal")
|
|
||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ import torch.utils
|
|||||||
from huggingface_hub import HfApi, snapshot_download
|
from huggingface_hub import HfApi, snapshot_download
|
||||||
from huggingface_hub.errors import RevisionNotFoundError
|
from huggingface_hub.errors import RevisionNotFoundError
|
||||||
|
|
||||||
|
from lerobot.configs import VideoEncoderConfig
|
||||||
from lerobot.utils.constants import HF_LEROBOT_HUB_CACHE
|
from lerobot.utils.constants import HF_LEROBOT_HUB_CACHE
|
||||||
|
|
||||||
from .dataset_metadata import CODEBASE_VERSION, LeRobotDatasetMetadata
|
from .dataset_metadata import CODEBASE_VERSION, LeRobotDatasetMetadata
|
||||||
@@ -36,7 +37,6 @@ from .utils import (
|
|||||||
)
|
)
|
||||||
from .video_utils import (
|
from .video_utils import (
|
||||||
StreamingVideoEncoder,
|
StreamingVideoEncoder,
|
||||||
VideoEncoderConfig,
|
|
||||||
get_safe_default_video_backend,
|
get_safe_default_video_backend,
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -178,7 +178,7 @@ class LeRobotDataset(torch.utils.data.Dataset):
|
|||||||
batch_encoding_size (int, optional): Number of episodes to accumulate before batch encoding videos.
|
batch_encoding_size (int, optional): Number of episodes to accumulate before batch encoding videos.
|
||||||
Set to 1 for immediate encoding (default), or higher for batched encoding. Defaults to 1.
|
Set to 1 for immediate encoding (default), or higher for batched encoding. Defaults to 1.
|
||||||
camera_encoder_config (VideoEncoderConfig | None, optional): Video encoder settings for cameras
|
camera_encoder_config (VideoEncoderConfig | None, optional): Video encoder settings for cameras
|
||||||
(codec, quality, etc.). When ``None``, :func:`~lerobot.datasets.video_utils.camera_encoder_defaults`
|
(codec, quality, etc.). When ``None``, :func:`~lerobot.configs.video.camera_encoder_defaults`
|
||||||
is used by the writer.
|
is used by the writer.
|
||||||
encoder_threads (int | None, optional): Number of encoder threads (global). ``None`` lets the
|
encoder_threads (int | None, optional): Number of encoder threads (global). ``None`` lets the
|
||||||
codec decide.
|
codec decide.
|
||||||
@@ -654,7 +654,7 @@ class LeRobotDataset(torch.utils.data.Dataset):
|
|||||||
batch_encoding_size: Number of episodes to accumulate before
|
batch_encoding_size: Number of episodes to accumulate before
|
||||||
batch-encoding videos. ``1`` means encode immediately.
|
batch-encoding videos. ``1`` means encode immediately.
|
||||||
camera_encoder_config: Video encoder settings for cameras (codec, quality, etc.).
|
camera_encoder_config: Video encoder settings for cameras (codec, quality, etc.).
|
||||||
When ``None``, :func:`~lerobot.datasets.video_utils.camera_encoder_defaults` is used.
|
When ``None``, :func:`~lerobot.configs.video.camera_encoder_defaults` is used.
|
||||||
encoder_threads: Number of encoder threads (global). ``None``
|
encoder_threads: Number of encoder threads (global). ``None``
|
||||||
lets the codec decide.
|
lets the codec decide.
|
||||||
metadata_buffer_size: Number of episode metadata records to buffer
|
metadata_buffer_size: Number of episode metadata records to buffer
|
||||||
@@ -755,7 +755,7 @@ class LeRobotDataset(torch.utils.data.Dataset):
|
|||||||
batch_encoding_size: Number of episodes to accumulate before
|
batch_encoding_size: Number of episodes to accumulate before
|
||||||
batch-encoding videos.
|
batch-encoding videos.
|
||||||
camera_encoder_config: Video encoder settings for cameras (codec, quality, etc.).
|
camera_encoder_config: Video encoder settings for cameras (codec, quality, etc.).
|
||||||
When ``None``, :func:`~lerobot.datasets.video_utils.camera_encoder_defaults` is used.
|
When ``None``, :func:`~lerobot.configs.video.camera_encoder_defaults` is used.
|
||||||
encoder_threads: Number of encoder threads (global). ``None``
|
encoder_threads: Number of encoder threads (global). ``None``
|
||||||
lets the codec decide.
|
lets the codec decide.
|
||||||
image_writer_processes: Subprocesses for async image writing.
|
image_writer_processes: Subprocesses for async image writing.
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ from typing import Any
|
|||||||
|
|
||||||
import av
|
import av
|
||||||
|
|
||||||
from lerobot.configs.video import VideoEncoderConfig
|
from lerobot.configs import VideoEncoderConfig
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ import torch
|
|||||||
from datasets.features.features import register_feature
|
from datasets.features.features import register_feature
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
|
|
||||||
from lerobot.configs.video import (
|
from lerobot.configs import (
|
||||||
VideoEncoderConfig,
|
VideoEncoderConfig,
|
||||||
camera_encoder_defaults,
|
camera_encoder_defaults,
|
||||||
)
|
)
|
||||||
@@ -905,7 +905,7 @@ def get_audio_info(video_path: Path | str) -> dict:
|
|||||||
|
|
||||||
def get_video_info(
|
def get_video_info(
|
||||||
video_path: Path | str,
|
video_path: Path | str,
|
||||||
camera_encoder_config: "VideoEncoderConfig | None" = None,
|
camera_encoder_config: VideoEncoderConfig | None = None,
|
||||||
) -> dict:
|
) -> dict:
|
||||||
"""Build the ``video.*`` / ``audio.*`` info dict persisted in ``info.json``.
|
"""Build the ``video.*`` / ``audio.*`` info dict persisted in ``info.json``.
|
||||||
|
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ import torch
|
|||||||
|
|
||||||
pytest.importorskip("datasets", reason="datasets is required (install lerobot[dataset])")
|
pytest.importorskip("datasets", reason="datasets is required (install lerobot[dataset])")
|
||||||
|
|
||||||
|
from lerobot.configs import VideoEncoderConfig
|
||||||
from lerobot.datasets.dataset_tools import (
|
from lerobot.datasets.dataset_tools import (
|
||||||
add_features,
|
add_features,
|
||||||
convert_image_to_video_dataset,
|
convert_image_to_video_dataset,
|
||||||
@@ -33,7 +34,6 @@ from lerobot.datasets.dataset_tools import (
|
|||||||
remove_feature,
|
remove_feature,
|
||||||
split_dataset,
|
split_dataset,
|
||||||
)
|
)
|
||||||
from lerobot.datasets.video_utils import VideoEncoderConfig
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
|
|||||||
@@ -25,10 +25,10 @@ from PIL import Image
|
|||||||
|
|
||||||
pytest.importorskip("datasets", reason="datasets is required (install lerobot[dataset])")
|
pytest.importorskip("datasets", reason="datasets is required (install lerobot[dataset])")
|
||||||
|
|
||||||
|
from lerobot.configs import VideoEncoderConfig
|
||||||
from lerobot.datasets.dataset_writer import _encode_video_worker
|
from lerobot.datasets.dataset_writer import _encode_video_worker
|
||||||
from lerobot.datasets.lerobot_dataset import LeRobotDataset
|
from lerobot.datasets.lerobot_dataset import LeRobotDataset
|
||||||
from lerobot.datasets.utils import DEFAULT_IMAGE_PATH
|
from lerobot.datasets.utils import DEFAULT_IMAGE_PATH
|
||||||
from lerobot.datasets.video_utils import VideoEncoderConfig
|
|
||||||
from tests.fixtures.constants import DEFAULT_FPS, DUMMY_REPO_ID
|
from tests.fixtures.constants import DEFAULT_FPS, DUMMY_REPO_ID
|
||||||
|
|
||||||
SIMPLE_FEATURES = {
|
SIMPLE_FEATURES = {
|
||||||
|
|||||||
@@ -29,9 +29,9 @@ from PIL import Image
|
|||||||
from safetensors.torch import load_file
|
from safetensors.torch import load_file
|
||||||
from torchvision.transforms import v2
|
from torchvision.transforms import v2
|
||||||
|
|
||||||
|
from lerobot.configs import VALID_VIDEO_CODECS, VideoEncoderConfig
|
||||||
from lerobot.configs.default import DatasetConfig
|
from lerobot.configs.default import DatasetConfig
|
||||||
from lerobot.configs.train import TrainPipelineConfig
|
from lerobot.configs.train import TrainPipelineConfig
|
||||||
from lerobot.configs.video import VALID_VIDEO_CODECS, VideoEncoderConfig
|
|
||||||
from lerobot.datasets import make_dataset
|
from lerobot.datasets import make_dataset
|
||||||
from lerobot.datasets.feature_utils import get_hf_features_from_features
|
from lerobot.datasets.feature_utils import get_hf_features_from_features
|
||||||
from lerobot.datasets.image_writer import image_array_to_pil_image
|
from lerobot.datasets.image_writer import image_array_to_pil_image
|
||||||
|
|||||||
@@ -26,10 +26,10 @@ pytest.importorskip("av", reason="av is required (install lerobot[dataset])")
|
|||||||
|
|
||||||
import av # noqa: E402
|
import av # noqa: E402
|
||||||
|
|
||||||
|
from lerobot.configs import VideoEncoderConfig
|
||||||
from lerobot.datasets.pyav_utils import get_codec
|
from lerobot.datasets.pyav_utils import get_codec
|
||||||
from lerobot.datasets.video_utils import (
|
from lerobot.datasets.video_utils import (
|
||||||
StreamingVideoEncoder,
|
StreamingVideoEncoder,
|
||||||
VideoEncoderConfig,
|
|
||||||
_CameraEncoderThread,
|
_CameraEncoderThread,
|
||||||
)
|
)
|
||||||
from lerobot.utils.constants import OBS_IMAGES
|
from lerobot.utils.constants import OBS_IMAGES
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ pytest.importorskip("av", reason="av is required (install lerobot[dataset])")
|
|||||||
|
|
||||||
import av # noqa: E402
|
import av # noqa: E402
|
||||||
|
|
||||||
from lerobot.configs.video import VALID_VIDEO_CODECS, VideoEncoderConfig
|
from lerobot.configs import VALID_VIDEO_CODECS, VideoEncoderConfig
|
||||||
from lerobot.datasets.image_writer import write_image
|
from lerobot.datasets.image_writer import write_image
|
||||||
from lerobot.datasets.lerobot_dataset import LeRobotDataset
|
from lerobot.datasets.lerobot_dataset import LeRobotDataset
|
||||||
from lerobot.datasets.pyav_utils import get_codec
|
from lerobot.datasets.pyav_utils import get_codec
|
||||||
|
|||||||
Reference in New Issue
Block a user