From 7af65ba23a7f2588eacb1de8c9c646298a2b07de Mon Sep 17 00:00:00 2001 From: Qizhi Chen Date: Mon, 12 May 2025 20:16:13 +0800 Subject: [PATCH] add support for robomind2lerobot (#26) Co-authored-by: HaomingSong --- README.md | 3 +- robomind2lerobot/README.md | 271 ++++++++++++ robomind2lerobot/convert.sh | 8 + robomind2lerobot/libtcmalloc.so.4.5.3 | Bin 0 -> 303040 bytes robomind2lerobot/robomind_h5.py | 415 ++++++++++++++++++ .../robomind_uitls/configs/__init__.py | 21 + .../robomind_uitls/configs/agilex_3rgb.py | 118 +++++ .../robomind_uitls/configs/franka_1rgb.py | 37 ++ .../robomind_uitls/configs/franka_3rgb.py | 57 +++ .../configs/franka_fr3_dual_arm.py | 101 +++++ .../configs/tienkung_gello_1rgb.py | 66 +++ .../configs/tienkung_prod1_gello_1rgb.py | 66 +++ .../configs/tienkung_xsens_1rgb.py | 102 +++++ .../robomind_uitls/configs/ur_1rgb.py | 33 ++ .../robomind_uitls/lerobot_uitls.py | 74 ++++ .../robomind_uitls/robomind_uitls.py | 74 ++++ 16 files changed, 1445 insertions(+), 1 deletion(-) create mode 100644 robomind2lerobot/README.md create mode 100644 robomind2lerobot/convert.sh create mode 100755 robomind2lerobot/libtcmalloc.so.4.5.3 create mode 100644 robomind2lerobot/robomind_h5.py create mode 100644 robomind2lerobot/robomind_uitls/configs/__init__.py create mode 100644 robomind2lerobot/robomind_uitls/configs/agilex_3rgb.py create mode 100644 robomind2lerobot/robomind_uitls/configs/franka_1rgb.py create mode 100644 robomind2lerobot/robomind_uitls/configs/franka_3rgb.py create mode 100644 robomind2lerobot/robomind_uitls/configs/franka_fr3_dual_arm.py create mode 100644 robomind2lerobot/robomind_uitls/configs/tienkung_gello_1rgb.py create mode 100644 robomind2lerobot/robomind_uitls/configs/tienkung_prod1_gello_1rgb.py create mode 100644 robomind2lerobot/robomind_uitls/configs/tienkung_xsens_1rgb.py create mode 100644 robomind2lerobot/robomind_uitls/configs/ur_1rgb.py create mode 100644 robomind2lerobot/robomind_uitls/lerobot_uitls.py create mode 100644 robomind2lerobot/robomind_uitls/robomind_uitls.py diff --git a/README.md b/README.md index 0af94ca..162d94c 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,7 @@ A curated collection of utilities for [LeRobot Projects](https://github.com/hugg ## πŸš€ What's New +- **\[2025.05.12\]** We have supported Data Conversion from RoboMIND to LeRobot! πŸ”₯πŸ”₯πŸ”₯ - **\[2025.04.20\]** We add Dataset Version Converter for LeRobotv2.0 to LeRobotv2.1! πŸ”₯πŸ”₯πŸ”₯ - **\[2025.04.15\]** We add Dataset Merging Tool for merging multi-source lerobot datasets! πŸ”₯πŸ”₯πŸ”₯ - **\[2025.04.14\]** We have supported Data Conversion from AgiBotWorld to LeRobot! πŸ”₯πŸ”₯πŸ”₯ @@ -31,7 +32,7 @@ A curated collection of utilities for [LeRobot Projects](https://github.com/hugg - [x] [Open X-Embodiment to LeRobot](./openx2lerobot/README.md) - [x] [AgiBot-World to LeRobot](./agibot2lerobot/README.md) - - [ ] RoboMIND to LeRobot + - [x] [RoboMIND to LeRobot](./robomind2lerobot/README.md) - [ ] LeRobot to RLDS - ​**Version Conversion​**​: diff --git a/robomind2lerobot/README.md b/robomind2lerobot/README.md new file mode 100644 index 0000000..481f64c --- /dev/null +++ b/robomind2lerobot/README.md @@ -0,0 +1,271 @@ +# RoboMIND to LeRobot + +RoboMIND (Multi-embodiment Intelligence Normative Data for Robot Manipulation), a dataset containing 107k demonstration trajectories across 479 diverse tasks involving 96 object classes. RoboMIND is collected through human teleoperation and encompasses comprehensive robotic-related information, including multi-view observations, proprioceptive robot state information, and linguistic task descriptions.. (Copied from [docs](https://x-humanoid-robomind.github.io/)) + +## πŸš€ What's New in This Script + +In this dataset, we have made several key improvements: + +- **Preservation of RoboMIND’s Original Information** 🧠: We have preserved as much of RoboMIND’s original information as possible, with field names strictly adhering to the original dataset’s naming conventions to ensure compatibility and consistency. +- **State and Action as Dictionaries** 🧾: The traditional one-dimensional state and action have been transformed into dictionaries, allowing for greater flexibility in designing custom states and actions, enabling modular and scalable handling. + +Dataset Structure of `meta/info.json`: + +```json +{ + "codebase_version": "v2.1", // lastest lerobot format + "robot_type": "franka_3rgb", // specific robot type + "fps": 30, // control frequency + "features": { + "observation.images.image_key": { + "dtype": "video", + "shape": [ + 720, + 1280, + 3 + ], + "names": [ + "height", + "width", + "rgb" + ], + "info": { + "video.height": 720, + "video.width": 1280, + "video.codec": "av1", + "video.pix_fmt": "yuv420p", + "video.is_depth_map": false, + "video.fps": 30, + "video.channels": 3, + "has_audio": false + } + }, + // for more states key, see configs + "observation.states.end_effector": { + "dtype": "float32", + "shape": [ + 6 + ], + "names": { + "motors": [ + "x", + "y", + "z", + "r", + "p", + "y" + ] + } + }, + ... + // for more actions key, see configs + "actions.joint_position": { + "dtype": "float32", + "shape": [ + 8 + ], + "names": { + "motors": [ + "joint_0", + "joint_1", + "joint_2", + "joint_3", + "joint_4", + "joint_5", + "joint_6", + "gripper" + ] + } + }, + ... + } +} +``` + +## Installation + +1. Install LeRobot: + Follow instructions in [official repo](https://github.com/huggingface/lerobot?tab=readme-ov-file#installation). + +2. Install others: + We use ray for parallel conversion, significantly speeding up data processing tasks by distributing the workload across multiple cores or nodes (if any). + ```bash + pip install h5py + pip install -U "ray[default]" + ``` + +## Get started + +> [!IMPORTANT] +> 1. If you want to save depth when converting the dataset, modify `_assert_type_and_shape()` function in [lerobot.common.datasets.compute_stats.py](https://github.com/huggingface/lerobot/blob/main/lerobot/common/datasets/compute_stats.py). +> +> ```python +> def _assert_type_and_shape(stats_list: list[dict[str, dict]]): +> for i in range(len(stats_list)): +> for fkey in stats_list[i]: +> for k, v in stats_list[i][fkey].items(): +> if not isinstance(v, np.ndarray): +> raise ValueError( +> f"Stats must be composed of numpy array, but key '{k}' of feature '{fkey}' is of type '{type(v)}' instead." +> ) +> if v.ndim == 0: +> raise ValueError("Number of dimensions must be at least 1, and is 0 instead.") +> if k == "count" and v.shape != (1,): +> raise ValueError(f"Shape of 'count' must be (1), but is {v.shape} instead.") +> # bypass depth check +> if "image" in fkey and k != "count": +> if "depth" not in fkey and v.shape != (3, 1, 1): +> raise ValueError(f"Shape of '{k}' must be (3,1,1), but is {v.shape} instead.") +> if "depth" in fkey and v.shape != (1, 1, 1): +> raise ValueError(f"Shape of '{k}' must be (1,1,1), but is {v.shape} instead.") +> ``` +> +> 2. The dataset needs to be organized into the following format before running the script due to differences in storage formats across platforms: +> ```bash +> /path/to/robomind/ +> β”œβ”€β”€ benchmark1_0_release +> β”‚ β”œβ”€β”€ h5_agilex_3rgb +> β”‚ β”‚ β”œβ”€β”€ 10_packplate +> β”‚ β”‚ β”œβ”€β”€ ... +> β”‚ β”œβ”€β”€ h5_franka_1rgb +> β”‚ β”‚ β”œβ”€β”€ bread_in_basket +> β”‚ └── ... +> β”œβ”€β”€ benchmark1_1_release +> β”‚ β”œβ”€β”€ h5_agilex_3rgb +> β”‚ β”‚ β”œβ”€β”€ 20_takecorn_2 +> β”‚ β”‚ β”œβ”€β”€ ... +> β”‚ β”œβ”€β”€ h5_franka_3rgb +> β”‚ β”‚ β”œβ”€β”€ apples_placed_on_a_ceramic_plate +> β”‚ └── ... +> β”œβ”€β”€ benchmark1_2_release +> β”‚ β”œβ”€β”€ h5_franka_3rgb +> β”‚ β”‚ └── 241223_upright_cup +> β”‚ └── h5_sim_franka_3rgb +> β”‚ β”œβ”€β”€ 408-place_upright_mug_on_the_left_middle +> β”‚ β”œβ”€β”€ ... +> β”œβ”€β”€ language_description_annotation_json +> β”‚ β”œβ”€β”€ h5_agilex_3rgb.json +> β”‚ β”œβ”€β”€ h5_franka_1rgb.json +> β”‚ β”œβ”€β”€ h5_franka_3rgb.json +> β”‚ β”œβ”€β”€ h5_simulation_franka.json +> β”‚ β”œβ”€β”€ h5_tienkung_xsens.json +> β”‚ └── h5_ur_1rgb.json +> └── RoboMIND_v1_2_instr.csv +> ``` + +> [!NOTE] +> The conversion speed of this script is limited by the performance of the physical machine running it, including **CPU cores and memory**. We recommend using **2 CPU cores per task** for optimal performance. However, each task requires approximately 20 GiB of memory. To avoid running out of memory, you may need to increase the number of CPU cores per task depending on your system’s available memory. + +### Download source code: + +```bash +git clone https://github.com/Tavish9/any4lerobot.git +``` + +### Modify path in `convert.sh`: + +There are three benchmarks, each with several embodiments, including `agilex_3rgb`, `franka_1rgb`, `franka_3rgb`, `franka_fr3_dual`, `tienkung_gello_1rgb`, `tienkung_prod1_gello_1rgb`, `tienkung_xsens_1rgb`, `ur_1rgb`. + +```bash +python robomind_h5.py \ + --src-path /path/to/robomind/ \ + --output-path /path/to/local \ + --benchmark benchmark1_1_release \ + --embodiments agilex_3rgb franka_1rgb \ + --cpus-per-task 2 +``` + +### Execute the script: + +#### For single node + +```bash +cd robomind2lerobot && bash convert.sh +``` + +#### For multi nodes + +**Direct Access to Nodes (2 nodes in example)** + +On Node 1: + +```bash +ray start --head --port=6379 +``` + +On Node 2: + +```bash +ray start --address='node_1_ip:6379' +``` + +On either Node, check the ray cluster status, and start the script + +```bash +ray status +cd robomind2lerobot && bash convert.sh +``` + +**Slurm-managed System** + +```bash +#!/bin/bash +#SBATCH --job-name=ray-cluster +#SBATCH --ntasks=2 +#SBATCH --nodes=2 +#SBATCH --partition=partition + +# Getting the node names +nodes=$(scontrol show hostnames "$SLURM_JOB_NODELIST") +nodes_array=($nodes) + +head_node=${nodes_array[0]} +head_node_ip=$(srun --nodes=1 --ntasks=1 -w "$head_node" hostname --ip-address) + +# if we detect a space character in the head node IP, we'll +# convert it to an ipv4 address. This step is optional. +if [[ "$head_node_ip" == *" "* ]]; then +IFS=' ' read -ra ADDR <<<"$head_node_ip" +if [[ ${#ADDR[0]} -gt 16 ]]; then + head_node_ip=${ADDR[1]} +else + head_node_ip=${ADDR[0]} +fi +echo "IPV6 address detected. We split the IPV4 address as $head_node_ip" +fi + +port=6379 +ip_head=$head_node_ip:$port +export ip_head +echo "IP Head: $ip_head" + +echo "Starting HEAD at $head_node" +srun --nodes=1 --ntasks=1 -w "$head_node" \ + ray start --head \ + --node-ip-address="$head_node_ip" \ + --port=$port \ + --block & + +sleep 10 + +# number of nodes other than the head node +worker_num=$((SLURM_JOB_NUM_NODES - 1)) + +for ((i = 1; i <= worker_num; i++)); do + node_i=${nodes_array[$i]} + echo "Starting WORKER $i at $node_i" + srun --nodes=1 --ntasks=1 -w "$node_i" \ + ray start \ + --address "$ip_head" \ + --block & + sleep 5 +done + +sleep 10 + +cd robomind2lerobot && bash convert.sh +``` + +**Other Community Supported Cluster Managers** + +See the [doc](https://docs.ray.io/en/latest/cluster/vms/user-guides/community/index.html) for more details. diff --git a/robomind2lerobot/convert.sh b/robomind2lerobot/convert.sh new file mode 100644 index 0000000..1fec604 --- /dev/null +++ b/robomind2lerobot/convert.sh @@ -0,0 +1,8 @@ +export HDF5_USE_FILE_LOCKING=FALSE +export RAY_DEDUP_LOGS=0 +python robomind_h5.py \ + --src-path /path/to/robomind/ \ + --output-path /path/to/local \ + --benchmark benchmark1_1_release \ + --embodiments agilex_3rgb franka_1rgb franka_3rgb franka_fr3_dual tienkung_gello_1rgb tienkung_prod1_gello_1rgb tienkung_xsens_1rgb ur_1rgb \ + --cpus-per-task 2 diff --git a/robomind2lerobot/libtcmalloc.so.4.5.3 b/robomind2lerobot/libtcmalloc.so.4.5.3 new file mode 100755 index 0000000000000000000000000000000000000000..133c8170a9885278d512d94cd8de2c5a3407333a GIT binary patch literal 303040 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 z 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 None: + self.info["total_episodes"] += 1 + self.info["total_frames"] += episode_length + + chunk = self.get_episode_chunk(episode_index) + if chunk >= self.total_chunks: + self.info["total_chunks"] += 1 + + if split == "train": + self.info["splits"]["train"] = f"0:{self.info['total_episodes']}" + self.train_count = self.info["total_episodes"] + elif "val" in split: + self.info["splits"]["validation"] = f"{self.train_count}:{self.info['total_episodes']}" + self.info["total_videos"] += len(self.video_keys) + if len(self.video_keys) > 0: + self.update_video_info() + + write_info(self.info, self.root) + + episode_dict = { + "episode_index": episode_index, + "tasks": episode_tasks, + "length": episode_length, + **({"action_config": action_config} if action_config else {}), + } + self.episodes[episode_index] = episode_dict + write_episode(episode_dict, self.root) + + self.episodes_stats[episode_index] = episode_stats + self.stats = aggregate_stats([self.stats, episode_stats]) if self.stats else episode_stats + write_episode_stats(episode_index, episode_stats, self.root) + + +class RoboMINDDataset(LeRobotDataset): + @classmethod + def create( + cls, + repo_id: str, + fps: int, + root: str | Path | None = None, + robot: Robot | None = None, + robot_type: str | None = None, + features: dict | None = None, + use_videos: bool = True, + tolerance_s: float = 1e-4, + image_writer_processes: int = 0, + image_writer_threads: int = 0, + video_backend: str | None = None, + ) -> "LeRobotDataset": + """Create a LeRobot Dataset from scratch in order to record data.""" + obj = cls.__new__(cls) + obj.meta = RoboMINDDatasetMetadata.create( + repo_id=repo_id, + fps=fps, + root=root, + robot=robot, + robot_type=robot_type, + features=features, + use_videos=use_videos, + ) + obj.repo_id = obj.meta.repo_id + obj.root = obj.meta.root + obj.revision = None + obj.tolerance_s = tolerance_s + obj.image_writer = None + + if image_writer_processes or image_writer_threads: + obj.start_image_writer(image_writer_processes, image_writer_threads) + + # TODO(aliberts, rcadene, alexander-soare): Merge this with OnlineBuffer/DataBuffer + obj.episode_buffer = obj.create_episode_buffer() + + obj.episodes = None + obj.hf_dataset = obj.create_hf_dataset() + obj.image_transforms = None + obj.delta_timestamps = None + obj.delta_indices = None + obj.episode_data_index = None + obj.video_backend = video_backend if video_backend is not None else get_safe_default_codec() + return obj + + def create_hf_dataset(self) -> datasets.Dataset: + features = get_hf_features_from_features(self.features) + ft_dict = {col: [] for col in features} + hf_dataset = datasets.Dataset.from_dict(ft_dict, features=features, split="train") + + # TODO(aliberts): hf_dataset.set_format("torch") + hf_dataset.set_transform(hf_transform_to_torch) + return hf_dataset + + def add_frame(self, frame: dict) -> None: + """ + This function only adds the frame to the episode_buffer. Apart from images β€” which are written in a + temporary directory β€” nothing is written to disk. To save those frames, the 'save_episode()' method + then needs to be called. + """ + # Convert torch to numpy if needed + for name in frame: + if isinstance(frame[name], torch.Tensor): + frame[name] = frame[name].numpy() + + validate_frame(frame, self.features) + + if self.episode_buffer is None: + self.episode_buffer = self.create_episode_buffer() + + # Automatically add frame_index and timestamp to episode buffer + frame_index = self.episode_buffer["size"] + timestamp = frame.pop("timestamp") if "timestamp" in frame else frame_index / self.fps + self.episode_buffer["frame_index"].append(frame_index) + self.episode_buffer["timestamp"].append(timestamp) + + # Add frame features to episode_buffer + for key, value in frame.items(): + if key == "task": + # Note: we associate the task in natural language to its task index during `save_episode` + self.episode_buffer["task"].append(frame["task"]) + continue + + if key not in self.features: + raise ValueError( + f"An element of the frame is not in the features. '{key}' not in '{self.features.keys()}'." + ) + + if self.features[key]["dtype"] in ["video"]: + img_path = self._get_image_file_path( + episode_index=self.episode_buffer["episode_index"], image_key=key, frame_index=frame_index + ) + if frame_index == 0: + img_path.parent.mkdir(parents=True, exist_ok=True) + self._save_image(value, img_path) + self.episode_buffer[key].append(str(img_path)) + else: + self.episode_buffer[key].append(value) + + self.episode_buffer["size"] += 1 + + def save_episode( + self, split, action_config: dict, episode_data: dict | None = None, keep_images: bool = False + ) -> None: + """ + This will save to disk the current episode in self.episode_buffer. + + Args: + episode_data (dict | None, optional): Dict containing the episode data to save. If None, this will + save the current episode in self.episode_buffer, which is filled with 'add_frame'. Defaults to + None. + """ + if not episode_data: + episode_buffer = self.episode_buffer + + validate_episode_buffer(episode_buffer, self.meta.total_episodes, self.features) + + # size and task are special cases that won't be added to hf_dataset + episode_length = episode_buffer.pop("size") + tasks = episode_buffer.pop("task") + episode_tasks = list(set(tasks)) + episode_index = episode_buffer["episode_index"] + + episode_buffer["index"] = np.arange(self.meta.total_frames, self.meta.total_frames + episode_length) + episode_buffer["episode_index"] = np.full((episode_length,), episode_index) + + # Add new tasks to the tasks dictionary + for task in episode_tasks: + task_index = self.meta.get_task_index(task) + if task_index is None: + self.meta.add_task(task) + + # Given tasks in natural language, find their corresponding task indices + episode_buffer["task_index"] = np.array([self.meta.get_task_index(task) for task in tasks]) + + for key, ft in self.features.items(): + # index, episode_index, task_index are already processed above, and image and video + # are processed separately by storing image path and frame info as meta data + if key in ["index", "episode_index", "task_index"] or ft["dtype"] in ["video"]: + continue + episode_buffer[key] = np.stack(episode_buffer[key]).squeeze() + + self._wait_image_writer() + self._save_episode_table(episode_buffer, episode_index) + ep_stats = compute_episode_stats(episode_buffer, self.features) + + if len(self.meta.video_keys) > 0: + video_paths = self.encode_episode_videos(episode_index) + for key in self.meta.video_keys: + episode_buffer[key] = video_paths[key] + + # `meta.save_episode` be executed after encoding the videos + self.meta.save_episode(split, episode_index, episode_length, episode_tasks, ep_stats, action_config) + + ep_data_index = get_episode_data_index(self.meta.episodes, [episode_index]) + ep_data_index_np = {k: t.numpy() for k, t in ep_data_index.items()} + check_timestamps_sync( + episode_buffer["timestamp"], + episode_buffer["episode_index"], + ep_data_index_np, + self.fps, + self.tolerance_s, + ) + + if not keep_images: + # delete images + img_dir = self.root / "images" + if img_dir.is_dir(): + shutil.rmtree(self.root / "images") + + if not episode_data: # Reset the buffer + self.episode_buffer = self.create_episode_buffer() + + +def get_all_tasks(src_path: Path, output_path: Path, embodiment: str): + output_path = output_path / src_path.name / embodiment + src_path = src_path / f"h5_{embodiment}" + + if src_path.exists(): + df = pd.read_csv(src_path.parent.parent / "RoboMIND_v1_2_instr.csv", index_col=0).drop_duplicates() + instruction_dict = df.set_index("task")["instruction"].to_dict() + for task_type in src_path.iterdir(): + yield ( + task_type.name, + {"train": task_type / "success_episodes" / "train", "val": task_type / "success_episodes" / "val"}, + (output_path / task_type.name).resolve(), + instruction_dict[task_type.name], + ) + + +def save_as_lerobot_dataset(task: tuple[dict, Path, str], src_path, benchmark, embodiment, save_depth): + task_type, splits, local_dir, task_instruction = task + + config = ROBOMIND_CONFIG[embodiment] + # HACK: not consistent image shape... + if "1_0" in benchmark: + match embodiment: + case "tienkung_gello_1rgb": + if task_type in ( + "clean_table_2_241211", + "clean_table_3_241210", + "clean_table_3_241211", + "place_paper_cup_dustbin_241212", + "place_plate_table_241211", + "place_plate_table_241211_12", + "place_plate_table_241212", + ): + for value in config["images"].values(): + value["shape"] = (720, 1280) + (value["shape"][2],) + + case "tienkung_xsens_1rgb": + if task_type == "switch_manipulation": + for value in config["images"].values(): + value["shape"] = (720, 1280) + (value["shape"][2],) + + features = generate_features_from_config(config) + + if local_dir.exists(): + shutil.rmtree(local_dir) + + if not save_depth: + features = dict(filter(lambda item: "depth" not in item[0], features.items())) + + dataset: RoboMINDDataset = RoboMINDDataset.create( + repo_id=f"{embodiment}/{local_dir.name}", + root=local_dir, + fps=30, + robot_type=embodiment, + features=features, + ) + + logging.info(f"start processing for {benchmark}, {embodiment}, {task_type}, saving to {local_dir}") + for split, path in splits.items(): + action_config_path = src_path / "language_description_annotation_json" / f"h5_{embodiment}.json" + if action_config_path.exists(): + action_config = json.load(open(action_config_path)) + action_config = { + Path(config["id"]).parent.name: config["response"] + for config in action_config + if local_dir.name in config["id"] and split in config["id"] + } + else: + action_config = {} + for episode_path in path.glob("**/trajectory.hdf5"): + status, raw_dataset, err = load_local_dataset(episode_path, config, save_depth) + if status and len(raw_dataset) >= 50: + for frame_data in raw_dataset: + frame_data.update({"task": task_instruction}) + dataset.add_frame(frame_data) + dataset.save_episode(split, action_config.get(episode_path.parent.parent.name, {})) + logging.info(f"process done for {path}, len {len(raw_dataset)}") + else: + logging.warning(f"Skipped {episode_path}: len of dataset:{len(raw_dataset)} or {str(err)}") + gc.collect() + + del dataset + + +def main( + src_path: Path, + output_path: Path, + benchmark: str, + embodiments: list[str], + cpus_per_task: int, + save_depth: bool, + debug: bool = False, +): + if debug: + tasks = get_all_tasks(src_path / benchmark, output_path, embodiments[0]) + save_as_lerobot_dataset(next(tasks), src_path, benchmark, embodiments[0], save_depth) + else: + runtime_env = RuntimeEnv( + env_vars={ + "HDF5_USE_FILE_LOCKING": "FALSE", + "HF_DATASETS_DISABLE_PROGRESS_BARS": "TRUE", + "LD_PRELOAD": str(Path(__file__).resolve().parent / "libtcmalloc.so.4.5.3"), + } + ) + ray.init(runtime_env=runtime_env) + resources = ray.available_resources() + cpus = int(resources["CPU"]) + + logging.info(f"Available CPUs: {cpus}, num_cpus_per_task: {cpus_per_task}") + remote_task = ray.remote(save_as_lerobot_dataset).options(num_cpus=cpus_per_task) + + futures = [] + for embodiment in embodiments: + tasks = get_all_tasks(src_path / benchmark, output_path, embodiment) + for task in tasks: + futures.append((task[1], remote_task.remote(task, src_path, benchmark, embodiment, save_depth))) + + for task_path, future in futures: + try: + ray.get(future) + except Exception as e: + logging.error(f"Exception occurred for {task_path['train']}") + with open("output.txt", "a") as f: + f.write(f"{task_path['train']}, exception details: {str(e)}\n") + ray.shutdown() + + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument("--src-path", type=Path, required=True) + parser.add_argument( + "--benchmark", + type=str, + choices=["benchmark1_0_release", "benchmark1_1_release", "benchmark1_2_release"], + default="benchmark1_1_release", + ) + parser.add_argument("--output-path", type=Path, required=True) + parser.add_argument( + "--embodiments", + type=str, + nargs="+", + help=str( + [ + "agilex_3rgb", + "franka_1rgb", + "franka_3rgb", + "franka_fr3_dual", + "tienkung_gello_1rgb", + "tienkung_prod1_gello_1rgb", + "tienkung_xsens_1rgb", + "ur_1rgb", + ] + ), + default=["agilex_3rgb"], + ) + parser.add_argument("--cpus-per-task", type=int, default=2) + parser.add_argument("--save-depth", action="store_true") + parser.add_argument("--debug", action="store_true") + args = parser.parse_args() + + main(**vars(args)) diff --git a/robomind2lerobot/robomind_uitls/configs/__init__.py b/robomind2lerobot/robomind_uitls/configs/__init__.py new file mode 100644 index 0000000..ed1378b --- /dev/null +++ b/robomind2lerobot/robomind_uitls/configs/__init__.py @@ -0,0 +1,21 @@ +from .agilex_3rgb import AgileX_3RGB_Config +from .franka_1rgb import Franka_1RGB_Config +from .franka_3rgb import Franka_3RGB_Config +from .franka_fr3_dual_arm import Franka_Fr3_Dual_Arm_Config +from .tienkung_gello_1rgb import Tien_Kung_Gello_1RGB_Config +from .tienkung_prod1_gello_1rgb import Tien_Kung_Prod1_Gello_1RGB_Config +from .tienkung_xsens_1rgb import Tien_Kung_Xsens_1RGB_Config +from .ur_1rgb import UR_1RGB_Config + +ROBOMIND_CONFIG = dict( + agilex_3rgb=AgileX_3RGB_Config, + franka_1rgb=Franka_1RGB_Config, + franka_3rgb=Franka_3RGB_Config, + franka_fr3_dual=Franka_Fr3_Dual_Arm_Config, + sim_franka_3rgb="", + sim_tienkung_1rgb="", + tienkung_gello_1rgb=Tien_Kung_Gello_1RGB_Config, + tienkung_prod1_gello_1rgb=Tien_Kung_Prod1_Gello_1RGB_Config, + tienkung_xsens_1rgb=Tien_Kung_Xsens_1RGB_Config, + ur_1rgb=UR_1RGB_Config, +) diff --git a/robomind2lerobot/robomind_uitls/configs/agilex_3rgb.py b/robomind2lerobot/robomind_uitls/configs/agilex_3rgb.py new file mode 100644 index 0000000..8fe03aa --- /dev/null +++ b/robomind2lerobot/robomind_uitls/configs/agilex_3rgb.py @@ -0,0 +1,118 @@ +AgileX_3RGB_Config = { + "images": { + "camera_front": { + "dtype": "video", + "shape": (480, 640, 3), + "names": ["height", "width", "rgb"], + }, + "camera_left_wrist": { + "dtype": "video", + "shape": (480, 640, 3), + "names": ["height", "width", "rgb"], + }, + "camera_right_wrist": { + "dtype": "video", + "shape": (480, 640, 3), + "names": ["height", "width", "rgb"], + }, + "camera_front_depth": { + "dtype": "image", + "shape": (480, 640, 1), + "names": ["height", "width", "channel"], + }, + "camera_left_wrist_depth": { + "dtype": "image", + "shape": (480, 640, 1), + "names": ["height", "width", "channel"], + }, + "camera_right_wrist_depth": { + "dtype": "image", + "shape": (480, 640, 1), + "names": ["height", "width", "channel"], + }, + }, + "states": { + "end_effector_left": { + "dtype": "float32", + "shape": (7,), + "names": {"motors": ["x", "y", "z", "rx", "ry", "rz", "rw"]}, + }, + "end_effector_right": { + "dtype": "float32", + "shape": (7,), + "names": {"motors": ["x", "y", "z", "rx", "ry", "rz", "rw"]}, + }, + "joint_effort_left": { + "dtype": "float32", + "shape": (7,), + "names": {"motors": ["joint_0", "joint_1", "joint_2", "joint_3", "joint_4", "joint_5", "gripper"]}, + }, + "joint_effort_right": { + "dtype": "float32", + "shape": (7,), + "names": {"motors": ["joint_0", "joint_1", "joint_2", "joint_3", "joint_4", "joint_5", "gripper"]}, + }, + "joint_position_left": { + "dtype": "float32", + "shape": (7,), + "names": {"motors": ["joint_0", "joint_1", "joint_2", "joint_3", "joint_4", "joint_5", "gripper"]}, + }, + "joint_position_right": { + "dtype": "float32", + "shape": (7,), + "names": {"motors": ["joint_0", "joint_1", "joint_2", "joint_3", "joint_4", "joint_5", "gripper"]}, + }, + "joint_velocity_left": { + "dtype": "float32", + "shape": (7,), + "names": {"motors": ["joint_0", "joint_1", "joint_2", "joint_3", "joint_4", "joint_5", "gripper"]}, + }, + "joint_velocity_right": { + "dtype": "float32", + "shape": (7,), + "names": {"motors": ["joint_0", "joint_1", "joint_2", "joint_3", "joint_4", "joint_5", "gripper"]}, + }, + }, + "actions": { + "end_effector_left": { + "dtype": "float32", + "shape": (7,), + "names": {"motors": ["x", "y", "z", "rx", "ry", "rz", "rw"]}, + }, + "end_effector_right": { + "dtype": "float32", + "shape": (7,), + "names": {"motors": ["x", "y", "z", "rx", "ry", "rz", "rw"]}, + }, + "joint_effort_left": { + "dtype": "float32", + "shape": (7,), + "names": {"motors": ["joint_0", "joint_1", "joint_2", "joint_3", "joint_4", "joint_5", "gripper"]}, + }, + "joint_effort_right": { + "dtype": "float32", + "shape": (7,), + "names": {"motors": ["joint_0", "joint_1", "joint_2", "joint_3", "joint_4", "joint_5", "gripper"]}, + }, + "joint_position_left": { + "dtype": "float32", + "shape": (7,), + "names": {"motors": ["joint_0", "joint_1", "joint_2", "joint_3", "joint_4", "joint_5", "gripper"]}, + }, + "joint_position_right": { + "dtype": "float32", + "shape": (7,), + "names": {"motors": ["joint_0", "joint_1", "joint_2", "joint_3", "joint_4", "joint_5", "gripper"]}, + }, + "joint_velocity_left": { + "dtype": "float32", + "shape": (7,), + "names": {"motors": ["joint_0", "joint_1", "joint_2", "joint_3", "joint_4", "joint_5", "gripper"]}, + }, + "joint_velocity_right": { + "dtype": "float32", + "shape": (7,), + "names": {"motors": ["joint_0", "joint_1", "joint_2", "joint_3", "joint_4", "joint_5", "gripper"]}, + }, + }, +} diff --git a/robomind2lerobot/robomind_uitls/configs/franka_1rgb.py b/robomind2lerobot/robomind_uitls/configs/franka_1rgb.py new file mode 100644 index 0000000..0a34b92 --- /dev/null +++ b/robomind2lerobot/robomind_uitls/configs/franka_1rgb.py @@ -0,0 +1,37 @@ +Franka_1RGB_Config = { + "images": { + "camera_top": { + "dtype": "video", + "shape": (720, 1280, 3), + "names": ["height", "width", "rgb"], + }, + "camera_top_depth": { + "dtype": "image", + "shape": (480, 640, 1), + "names": ["height", "width", "channel"], + }, + }, + "states": { + "end_effector": { + "dtype": "float32", + "shape": (6,), + "names": {"motors": ["x", "y", "z", "r", "p", "y"]}, + }, + "joint_position": { + "dtype": "float32", + "shape": (8,), + "names": { + "motors": ["joint_0", "joint_1", "joint_2", "joint_3", "joint_4", "joint_5", "joint_6", "gripper"] + }, + }, + }, + "actions": { + "joint_position": { + "dtype": "float32", + "shape": (8,), + "names": { + "motors": ["joint_0", "joint_1", "joint_2", "joint_3", "joint_4", "joint_5", "joint_6", "gripper"] + }, + }, + }, +} diff --git a/robomind2lerobot/robomind_uitls/configs/franka_3rgb.py b/robomind2lerobot/robomind_uitls/configs/franka_3rgb.py new file mode 100644 index 0000000..c63ae2c --- /dev/null +++ b/robomind2lerobot/robomind_uitls/configs/franka_3rgb.py @@ -0,0 +1,57 @@ +Franka_3RGB_Config = { + "images": { + "camera_top": { + "dtype": "video", + "shape": (720, 1280, 3), + "names": ["height", "width", "rgb"], + }, + "camera_left": { + "dtype": "video", + "shape": (480, 640, 3), + "names": ["height", "width", "rgb"], + }, + "camera_right": { + "dtype": "video", + "shape": (480, 640, 3), + "names": ["height", "width", "rgb"], + }, + "camera_top_depth": { + "dtype": "image", + "shape": (720, 1280, 1), + "names": ["height", "width", "channel"], + }, + "camera_left_depth": { + "dtype": "image", + "shape": (480, 640, 1), + "names": ["height", "width", "channel"], + }, + "camera_right_depth": { + "dtype": "image", + "shape": (480, 640, 1), + "names": ["height", "width", "channel"], + }, + }, + "states": { + "end_effector": { + "dtype": "float32", + "shape": (6,), + "names": {"motors": ["x", "y", "z", "r", "p", "y"]}, + }, + "joint_position": { + "dtype": "float32", + "shape": (8,), + "names": { + "motors": ["joint_0", "joint_1", "joint_2", "joint_3", "joint_4", "joint_5", "joint_6", "gripper"] + }, + }, + }, + "actions": { + "joint_position": { + "dtype": "float32", + "shape": (8,), + "names": { + "motors": ["joint_0", "joint_1", "joint_2", "joint_3", "joint_4", "joint_5", "joint_6", "gripper"] + }, + }, + }, +} diff --git a/robomind2lerobot/robomind_uitls/configs/franka_fr3_dual_arm.py b/robomind2lerobot/robomind_uitls/configs/franka_fr3_dual_arm.py new file mode 100644 index 0000000..0ddf4f5 --- /dev/null +++ b/robomind2lerobot/robomind_uitls/configs/franka_fr3_dual_arm.py @@ -0,0 +1,101 @@ +Franka_Fr3_Dual_Arm_Config = { + "images": { + "camera_front": { + "dtype": "video", + "shape": (720, 1280, 3), + "names": ["height", "width", "rgb"], + }, + "camera_top": { + "dtype": "video", + "shape": (720, 1280, 3), + "names": ["height", "width", "rgb"], + }, + "camera_left": { + "dtype": "video", + "shape": (480, 640, 3), + "names": ["height", "width", "rgb"], + }, + "camera_right": { + "dtype": "video", + "shape": (480, 640, 3), + "names": ["height", "width", "rgb"], + }, + "camera_front_depth": { + "dtype": "image", + "shape": (720, 1280, 1), + "names": ["height", "width", "channel"], + }, + "camera_top_depth": { + "dtype": "image", + "shape": (720, 1280, 1), + "names": ["height", "width", "channel"], + }, + "camera_left_depth": { + "dtype": "image", + "shape": (480, 640, 1), + "names": ["height", "width", "channel"], + }, + "camera_right_depth": { + "dtype": "image", + "shape": (480, 640, 1), + "names": ["height", "width", "channel"], + }, + }, + "states": { + "end_effector": { + "dtype": "float32", + "shape": (12,), + "names": {"motors": ["left_xyzrpy", "right_xyzrpy"]}, + }, + "joint_position": { + "dtype": "float32", + "shape": (16,), + "names": { + "motors": [ + "left_joint_0", + "left_joint_1", + "left_joint_2", + "left_joint_3", + "left_joint_4", + "left_joint_5", + "left_joint_6", + "left_gripper", + "right_joint_0", + "right_joint_1", + "right_joint_2", + "right_joint_3", + "right_joint_4", + "right_joint_5", + "right_joint_6", + "right_gripper", + ] + }, + }, + }, + "actions": { + "joint_position": { + "dtype": "float32", + "shape": (16,), + "names": { + "motors": [ + "left_joint_0", + "left_joint_1", + "left_joint_2", + "left_joint_3", + "left_joint_4", + "left_joint_5", + "left_joint_6", + "left_gripper", + "right_joint_0", + "right_joint_1", + "right_joint_2", + "right_joint_3", + "right_joint_4", + "right_joint_5", + "right_joint_6", + "right_gripper", + ] + }, + }, + }, +} diff --git a/robomind2lerobot/robomind_uitls/configs/tienkung_gello_1rgb.py b/robomind2lerobot/robomind_uitls/configs/tienkung_gello_1rgb.py new file mode 100644 index 0000000..6caaeb7 --- /dev/null +++ b/robomind2lerobot/robomind_uitls/configs/tienkung_gello_1rgb.py @@ -0,0 +1,66 @@ +Tien_Kung_Gello_1RGB_Config = { + "images": { + "camera_top": { + "dtype": "video", + "shape": (480, 640, 3), + "names": ["height", "width", "rgb"], + }, + "camera_top_depth": { + "dtype": "image", + "shape": (480, 640, 1), + "names": ["height", "width", "channel"], + }, + }, + "states": { + "joint_position": { + "dtype": "float32", + "shape": (16,), + "names": { + "motors": [ + "left_arm_0", + "left_arm_1", + "left_arm_2", + "left_arm_3", + "left_arm_4", + "left_arm_5", + "left_arm_6", + "left hand_closure", + "right_arm_0", + "right_arm_1", + "right_arm_2", + "right_arm_3", + "right_arm_4", + "right_arm_5", + "right_arm_6", + "right hand closure", + ] + }, + }, + }, + "actions": { + "joint_position": { + "dtype": "float32", + "shape": (16,), + "names": { + "motors": [ + "left_arm_0", + "left_arm_1", + "left_arm_2", + "left_arm_3", + "left_arm_4", + "left_arm_5", + "left_arm_6", + "left hand_closure", + "right_arm_0", + "right_arm_1", + "right_arm_2", + "right_arm_3", + "right_arm_4", + "right_arm_5", + "right_arm_6", + "right hand closure", + ] + }, + }, + }, +} diff --git a/robomind2lerobot/robomind_uitls/configs/tienkung_prod1_gello_1rgb.py b/robomind2lerobot/robomind_uitls/configs/tienkung_prod1_gello_1rgb.py new file mode 100644 index 0000000..3f5831e --- /dev/null +++ b/robomind2lerobot/robomind_uitls/configs/tienkung_prod1_gello_1rgb.py @@ -0,0 +1,66 @@ +Tien_Kung_Prod1_Gello_1RGB_Config = { + "images": { + "camera_top": { + "dtype": "video", + "shape": (720, 1280, 3), + "names": ["height", "width", "rgb"], + }, + "camera_top_depth": { + "dtype": "image", + "shape": (720, 1280, 1), + "names": ["height", "width", "channel"], + }, + }, + "states": { + "joint_position": { + "dtype": "float32", + "shape": (16,), + "names": { + "motors": [ + "left_arm_0", + "left_arm_1", + "left_arm_2", + "left_arm_3", + "left_arm_4", + "left_arm_5", + "left_arm_6", + "left hand_closure", + "right_arm_0", + "right_arm_1", + "right_arm_2", + "right_arm_3", + "right_arm_4", + "right_arm_5", + "right_arm_6", + "right hand closure", + ] + }, + }, + }, + "actions": { + "joint_position": { + "dtype": "float32", + "shape": (16,), + "names": { + "motors": [ + "left_arm_0", + "left_arm_1", + "left_arm_2", + "left_arm_3", + "left_arm_4", + "left_arm_5", + "left_arm_6", + "left hand_closure", + "right_arm_0", + "right_arm_1", + "right_arm_2", + "right_arm_3", + "right_arm_4", + "right_arm_5", + "right_arm_6", + "right hand closure", + ] + }, + }, + }, +} diff --git a/robomind2lerobot/robomind_uitls/configs/tienkung_xsens_1rgb.py b/robomind2lerobot/robomind_uitls/configs/tienkung_xsens_1rgb.py new file mode 100644 index 0000000..1f70a34 --- /dev/null +++ b/robomind2lerobot/robomind_uitls/configs/tienkung_xsens_1rgb.py @@ -0,0 +1,102 @@ +Tien_Kung_Xsens_1RGB_Config = { + "images": { + "camera_top": { + "dtype": "video", + "shape": (480, 640, 3), + "names": ["height", "width", "rgb"], + }, + "camera_top_depth": { + "dtype": "image", + "shape": (480, 640, 1), + "names": ["height", "width", "channel"], + }, + }, + "states": { + "end_effector": { + "dtype": "float32", + "shape": (12,), + "names": { + "motors": [ + "left_little_finger", + "left_ring_finger", + "left_middle_finger", + "left_index_finger", + "left_thumb0_for_bending", + "left_thumb1_for_rotation", + "right_little_finger", + "right_ring_finger", + "right_middle_finger", + "right_index_finger", + "right_thumb0_for_bending", + "right_thumb1_for_rotation", + ] + }, + }, + "joint_position": { + "dtype": "float32", + "shape": (14,), + "names": { + "motors": [ + "left_arm_0", + "left_arm_1", + "left_arm_2", + "left_arm_3", + "left_arm_4", + "left_arm_5", + "left_arm_6", + "right_arm_0", + "right_arm_1", + "right_arm_2", + "right_arm_3", + "right_arm_4", + "right_arm_5", + "right_arm_6", + ] + }, + }, + }, + "actions": { + "end_effector": { + "dtype": "float32", + "shape": (12,), + "names": { + "motors": [ + "left_little_finger", + "left_ring_finger", + "left_middle_finger", + "left_index_finger", + "left_thumb0_for_bending", + "left_thumb1_for_rotation", + "right_little_finger", + "right_ring_finger", + "right_middle_finger", + "right_index_finger", + "right_thumb0_for_bending", + "right_thumb1_for_rotation", + ] + }, + }, + "joint_position": { + "dtype": "float32", + "shape": (14,), + "names": { + "motors": [ + "left_arm_0", + "left_arm_1", + "left_arm_2", + "left_arm_3", + "left_arm_4", + "left_arm_5", + "left_arm_6", + "right_arm_0", + "right_arm_1", + "right_arm_2", + "right_arm_3", + "right_arm_4", + "right_arm_5", + "right_arm_6", + ] + }, + }, + }, +} diff --git a/robomind2lerobot/robomind_uitls/configs/ur_1rgb.py b/robomind2lerobot/robomind_uitls/configs/ur_1rgb.py new file mode 100644 index 0000000..2025fe0 --- /dev/null +++ b/robomind2lerobot/robomind_uitls/configs/ur_1rgb.py @@ -0,0 +1,33 @@ +UR_1RGB_Config = { + "images": { + "camera_top": { + "dtype": "video", + "shape": (480, 640, 3), + "names": ["height", "width", "rgb"], + }, + "camera_top_depth": { + "dtype": "image", + "shape": (480, 640, 1), + "names": ["height", "width", "channel"], + }, + }, + "states": { + "end_effector": { + "dtype": "float32", + "shape": (6,), + "names": {"motors": ["x", "y", "z", "r", "p", "y"]}, + }, + "joint_position": { + "dtype": "float32", + "shape": (7,), + "names": {"motors": ["joint_0", "joint_1", "joint_2", "joint_3", "joint_4", "joint_5", "gripper"]}, + }, + }, + "actions": { + "joint_position": { + "dtype": "float32", + "shape": (7,), + "names": {"motors": ["joint_0", "joint_1", "joint_2", "joint_3", "joint_4", "joint_5", "gripper"]}, + }, + }, +} diff --git a/robomind2lerobot/robomind_uitls/lerobot_uitls.py b/robomind2lerobot/robomind_uitls/lerobot_uitls.py new file mode 100644 index 0000000..5a0360d --- /dev/null +++ b/robomind2lerobot/robomind_uitls/lerobot_uitls.py @@ -0,0 +1,74 @@ +import numpy as np +import torchvision +from lerobot.common.datasets.compute_stats import auto_downsample_height_width, get_feature_stats, sample_indices +from lerobot.common.datasets.utils import load_image_as_numpy + +torchvision.set_video_backend("pyav") + + +def generate_features_from_config(AgiBotWorld_CONFIG): + features = {} + for key, value in AgiBotWorld_CONFIG["images"].items(): + features[f"observation.images.{key}"] = value + for key, value in AgiBotWorld_CONFIG["states"].items(): + features[f"observation.states.{key}"] = value + for key, value in AgiBotWorld_CONFIG["actions"].items(): + features[f"actions.{key}"] = value + return features + + +def sample_images(input): + if type(input) is list: + image_paths = input + + sampled_indices = sample_indices(len(image_paths)) + images = None + for i, idx in enumerate(sampled_indices): + path = image_paths[idx] + + img = load_image_as_numpy(path, dtype=np.uint8, channel_first=True) + img = auto_downsample_height_width(img) + + if images is None: + images = np.empty((len(sampled_indices), *img.shape), dtype=np.uint8) + + images[i] = img + elif type(input) is np.ndarray: + frames_array = input[:, None, :, :] # Shape: [T, 1, H, W] + sampled_indices = sample_indices(len(frames_array)) + images = None + for i, idx in enumerate(sampled_indices): + img = frames_array[idx] + img = auto_downsample_height_width(img) + + if images is None: + images = np.empty((len(sampled_indices), *img.shape), dtype=np.uint8) + + images[i] = img + + return images + + +def compute_episode_stats(episode_data: dict[str, list[str] | np.ndarray], features: dict) -> dict: + ep_stats = {} + for key, data in episode_data.items(): + if features[key]["dtype"] == "string": + continue # HACK: we should receive np.arrays of strings + elif features[key]["dtype"] in ["image", "video"]: + ep_ft_array = sample_images(data) + axes_to_reduce = (0, 2, 3) # keep channel dim + keepdims = True + else: + ep_ft_array = data # data is already a np.ndarray + axes_to_reduce = 0 # compute stats over the first axis + keepdims = data.ndim == 1 # keep as np.array + + ep_stats[key] = get_feature_stats(ep_ft_array, axis=axes_to_reduce, keepdims=keepdims) + + if features[key]["dtype"] in ["image", "video"]: + value_norm = 1.0 if "depth" in key else 255.0 + ep_stats[key] = { + k: v if k == "count" else np.squeeze(v / value_norm, axis=0) for k, v in ep_stats[key].items() + } + + return ep_stats diff --git a/robomind2lerobot/robomind_uitls/robomind_uitls.py b/robomind2lerobot/robomind_uitls/robomind_uitls.py new file mode 100644 index 0000000..878e7b0 --- /dev/null +++ b/robomind2lerobot/robomind_uitls/robomind_uitls.py @@ -0,0 +1,74 @@ +from pathlib import Path + +import cv2 +import h5py +import numpy as np + + +def decode_images(camera_key, input_images): + if "depth" not in camera_key: + rgb_images = [] + camera_rgb_images = input_images + for camera_rgb_image in camera_rgb_images: + camera_rgb_image = np.array(camera_rgb_image) + rgb = cv2.imdecode(camera_rgb_image, cv2.IMREAD_COLOR) + if rgb is None: + rgb = np.frombuffer(camera_rgb_image, dtype=np.uint8) + if rgb.size == 2764800: + rgb = rgb.reshape(720, 1280, 3) + elif rgb.size == 921600: + rgb = rgb.reshape(480, 640, 3) + rgb_images.append(rgb) + rgb_images = np.asarray(rgb_images) + return rgb_images + else: + depth_images = [] + camera_depth_images = input_images + for camera_depth_image in camera_depth_images: + if isinstance(camera_depth_image, np.ndarray): + depth_array = camera_depth_image + else: + depth_array = np.frombuffer(camera_depth_image, dtype=np.uint8) + depth = cv2.imdecode(depth_array, cv2.IMREAD_UNCHANGED) + if depth is None: + if depth_array.size == 921600: + depth = depth_array.reshape(720, 1280) + elif depth_array.size == 307200: + depth = depth_array.reshape(480, 640) + depth_images.append(depth) + depth_images = np.asarray(depth_images)[..., None] + return depth_images + + +def load_local_dataset(episode_path: Path, config: dict, save_depth: bool): + try: + images = {} + states = {} + actions = {} + with h5py.File(episode_path, "r") as file: + for key in config["images"]: + if save_depth and "depth" in key: + image_key = f"observations/depth_images/{key[:-6]}" + elif "depth" not in key: + image_key = f"observations/rgb_images/{key}" + else: + continue + images[f"observation.images.{key}"] = decode_images(image_key, file[image_key]) + for key in config["states"]: + states[f"observation.states.{key}"] = np.array(file[f"puppet/{key}"], dtype=np.float32) + for key in config["actions"]: + actions[f"actions.{key}"] = np.array(file[f"master/{key}"], dtype=np.float32) + + num_frames = len(next(iter(states.values()))) + frames = [ + { + **{key: value[i] for key, value in images.items() if save_depth or "depth" not in key}, + **{key: value[i] for key, value in states.items()}, + **{key: value[i] for key, value in actions.items()}, + } + for i in range(num_frames) + ] + return True, frames, "" + + except (FileNotFoundError, OSError, KeyError) as e: + return False, [], e