CoolFace
Datasetpublic

KarolyArmin/Hand_tools

KarolyArmin/Hand_tools Growing multi-task RGB-D collection generated with the Label Factory workflow. Every capture is stored in its own zero-padded directory (0000, 0001, 0002, ...). Uploading a new capture appends it to the collection without replacing earlier directories. Task configurations aggregate compatible Parquet shards from every numbered directory. Training configurations depth_estimation: RGB input, metric depth target, intrinsics and depth units… See the full description on the dataset page: https://huggingface.co/datasets/KarolyArmin/Hand_tools.

sourceHugging Facemitupdated 11d agoView on Hugging Face
0likes309downloads
Dataset Card

KarolyArmin/Hand_tools

Growing multi-task RGB-D collection generated with the Label Factory workflow. Every capture is stored in its own zero-padded directory (0000, 0001, 0002, ...). Uploading a new capture appends it to the collection without replacing earlier directories. Task configurations aggregate compatible Parquet shards from every numbered directory.

Training configurations

  • depth_estimation: RGB input, metric depth target, intrinsics and depth units
  • instance_segmentation: RGB input, instance-mask target, boxes and annotations
  • object_pose_estimation: RGB-D input, masks, camera transforms and object poses
  • object_pose_models: one STL payload per object type and numbered dataset

Every configuration provides deterministic train, validation, and test splits. Adding another numbered capture appends rows through the wildcard paths; it does not replace earlier datasets.

Loading all or several numbered datasets

The configuration automatically combines every uploaded directory (0000, 0001, 0002, ...). Filter dataset_id to use selected captures:

python
from datasets import load_dataset

poses = load_dataset("KarolyArmin/Hand_tools", "object_pose_estimation")
selected_ids = set(["0000", "0001", "0004"])
for split_name in poses:
    poses[split_name] = poses[split_name].filter(
        lambda row: row["dataset_id"] in selected_ids
    )

Depth-estimation example

python
from datasets import load_dataset
import numpy as np

depth_dataset = load_dataset("KarolyArmin/Hand_tools", "depth_estimation")
sample = depth_dataset["train"][0]
rgb = sample["image"].convert("RGB")
depth_native = np.asarray(sample["depth"])
depth_mm = depth_native.astype(np.float32) * sample["depth_scale"]
depth_m = depth_mm / 1000.0
intrinsics_3x3 = np.asarray(sample["camera_intrinsics"]).reshape(3, 3)

Instance-segmentation example

python
from datasets import load_dataset
import json
import numpy as np

instances = load_dataset("KarolyArmin/Hand_tools", "instance_segmentation")
sample = instances["validation"][0]
rgb = sample["image"].convert("RGB")
instance_mask = np.asarray(sample["instance_mask"])
annotations = json.loads(sample["annotations_json"])
boxes_xywh = np.asarray(sample["boxes_xywh"])
instance_names = sample["instance_names"]

Object-pose-estimation example

python
from datasets import load_dataset
import numpy as np

poses = load_dataset("KarolyArmin/Hand_tools", "object_pose_estimation")
sample = poses["test"][0]
rgb = sample["image"].convert("RGB")
depth = np.asarray(sample["depth"])
instance_mask = np.asarray(sample["instance_mask"])
world_from_camera = np.asarray(sample["world_from_camera"]).reshape(4, 4)
camera_from_world = np.asarray(sample["camera_from_world"]).reshape(4, 4)
world_from_objects = np.asarray(sample["world_from_objects"]).reshape(-1, 4, 4)
camera_from_objects = np.asarray(sample["camera_from_objects"]).reshape(-1, 4, 4)
object_names = sample["object_names"]

# Resolve the STL models referenced by this pose sample.
models = load_dataset("KarolyArmin/Hand_tools", "object_pose_models")["train"]
required_keys = set(sample["object_model_keys"])
models = models.filter(lambda row: row["object_model_key"] in required_keys)
first_model = models[0]
with open(first_model["stl_file_name"], "wb") as file:
    file.write(first_model["stl"])

Collection contents

Each numbered directory contributes:

  • RGB images and aligned 16-bit metric depth maps
  • camera intrinsics and metric world-coordinate camera poses
  • instance masks, boxes, RLE annotations and visualization overlays
  • per-frame and consolidated object poses
  • metric scene reconstruction and object STL models
  • task-specific train, validation and test Parquet shards

Latest generated contribution

  • Directory: 0002/
  • RGB-D frames: 147
  • Annotated object instances: 4
  • Selected upload files: 922

Depth images are stored in millimetres. Pose conventions and coordinate-system metadata are recorded in 0002/sam6d_scene/annotations.json and 0002/reconstruction/metric_alignment/camera_poses_metric.json.

Limitations

Annotations are automatically generated and must be independently reviewed for the intended downstream use. Reconstruction, depth-alignment, segmentation and pose-estimation errors may remain.