EgoBody
Official code and data for EgoBody dataset (2022 ECCV)
Install / Use
npx skills add sanweiliti/EgoBodyInstalls into whichever agent you are using.
README
EgoBody: Human Body Shape and Motion of Interacting People from Head-Mounted Devices
EgoBody dataset is a novel large-scale dataset for egocentric 3D human pose, shape and motions under interactions in complex 3D scenes.
[Project page] [Paper] [Dataset] [EgoBody challenge]
<img src="images/teaser_v2.jpg" width = 900 align=middle>News
[December 04, 2023] Text descriptions for motions are provided by Motion-X Dataset.
[October 20, 2022] All modalities of EgoBody are released (including third-person view RGBD, 3D scene, eye gaze/hand/head tracking, 3D human shape and motion annotations for the camera wearer, etc.)!
[July 17, 2022] The EgoBody challenge is released! The first phase of the challenge will end at October 1st. The participants are welcome to submit a 2-4 page abstract to our ECCV workshop.
[July 08, 2022] The EgoSet (egocentric RGB subset of EgoBody) is released! Other modalities (third-person view RGBD, 3D scene, eye gaze, etc.) will come soon.
[June 01, 2022] The EgoBody dataset will be part of the ECCV2022 workshop: Human Body, Hands, and Activities from Egocentric and Multi-view Cameras. Please check out our workshop website for more information.
Dataset License/Download
Please register, sign the dataset license and download the dataset at https://egobody.inf.ethz.ch.
Dataset Information
EgoBody dataset contains 125 sequences, 36 subjects and 15 indoor scenes. Please find more detailed statistics in our paper.
|frames | train | val | test | total |
|--------------------|:------------:|:----------:|:---------:|:----------:|
| MVSet | 116630 | 29140 | 73961 | 219731 |
| EgoSet | 105388 | 25416 | 68307 | 199111 |
| EgoSet_interactee | 90124 | 23332 | 62155 | 175611 |
MVSet: synchronized frames captured from the Azure Kinects, from multiple third-person viewsEgoSet: egocentric RGB frames captured from the HoloLens, calibrated and synchronized with the Kinect framesEgoSet_interactee: frames where the interactee is visible in the egocentric view
Dataset Documentation
Info/calibration files:
EgoBody
├── data_info_release.csv
├── data_splits.csv
├── kinect_cam_params
│ ├── kinect_master/kinect_sub_1/kinect_sub_2/kinect_sub_3/kinect_sub_4
│ │ ├── Color.json
│ │ ├── IR.json
├── calibrations
│ ├── RECORDING_NAME
│ │ ├── kinect12_to_world/$scene_name$.json
│ │ ├── holo_to_kinect12.json
│ │ ├── kinect_11to12_color.json
│ │ ├── kinect_13to12_color.json
│ │ ├── (kinect_14to12_color.json)
│ │ ├── (kinect_15to12_color.json)
data_info_release.csv: basic information for all sequencesrecording_name: name for each sequence, named asrecording_202xxxxx_Sxx_Sxx_xx.202xxxxxis the capture date, andSxx_Sxxrefers tosubjectID(cemera_wearer)_subjectID(interactee)body_idx_0: gender of the body with index 0 in each sequencebody_idx_1: gender of the body with index 1 in each sequencebody_idx_fpv: body index and gender of the interactee in each sequencestart_frame/end_frame: the frame ID of starting/ending frame for each sequencescene_name: name of the 3D scene for each sequence
data_splits.csv: train/validation/test sequence splitscalibrations: extrinsics between kinects/hololens/3D scene for each sequence- Note that the kinects are labelled as: 12 (
master), 11 (sub_1), 13 (sub_2), 14 (sub_3), 15 (sub_4) kinect12_to_world/$scene_name$.json: extrinsics betweenmasterkinect RGB camera and the 3D scene meshholo_to_kinect12.json: extrinsics betweenmasterkinect RGB camera and the hololens world coordinate systemkinect_11to12_color.json: extrinsics between RGB camera of themasterkinect andsub_1kinectkinect_13to12_color.json: extrinsics between RGB camera of themasterkinect andsub_2kinectkinect_14to12_color.json: extrinsics between RGB camera of themasterkinect andsub_3kinect, only exists for data captured in 2022kinect_15to12_color.json: extrinsics between RGB camera of themasterkinect andsub_4kinect, only exists for data captured in 2022
- Note that the kinects are labelled as: 12 (
kinect_cam_params:kinect_master/kinect_sub_1/kinect_sub_2/kinect_sub_3/kinect_sub_4: intrinsics and extrinsics of the color/depth camera for each kinect
Egocentric data streams
EgoBody
├── egocentric_color
│ ├── RECORDING_NAME
│ │ ├── 202x-xx-xx-xxxxxx
│ │ │ ├── PV
│ │ │ ├── 202x-xx-xx-xxxxxx_pv.txt
│ │ │ ├── keypoints.npz
│ │ │ ├── valid_frame.npz
├── egocentric_depth
│ ├── RECORDING_NAME
│ │ ├── 202x-xx-xx-xxxxxx
│ │ │ ├── ...
├── egocentric_gaze
│ ├── RECORDING_NAME
│ │ ├── 202x-xx-xx-xxxxxx
│ │ │ ├── 202x-xx-xx-xxxxxx_head_hand_eye.csv
egocentric_color: egocentric RGB images and hololens camera informationRECORDING_NAME: recording_namePV: egocentric RGB frames of the current sequence, named astimestamp_frame_xxxxx.jpg, whereframe_xxxxxis the ID for each frame202x-xx-xx-xxxxxx_pv.txt:- row 1: RGB(PV) camera
cx,cy,w,hof the current sequence - row >=2:
timestamp,fx,fy,pv2world_transformof each each RGB(pv) frame.pv2world_transformis the extrinsics between the RGB(PV) camera of each frame and the hololens world coordinate of the current sequece (each hololens sequence has a consitent world coordinate system for the whle sequence).
- row 1: RGB(PV) camera
keypoints.npz:imgname: egocentric PV image paths (e.x.,egocentric_color/RECORDING_NAME/202x-xx-xx-xxxxxx/PV/timestamp_frame_xxxxx.jpg)center: center of the bounding box (to crop the person out) for each PV framescale: scale of the bounding box for each PV framekeypoints: openpose body joints (BODY_25 format) of the person (interactee) for each PV framegender: gender of the interactee for each PV frame
valid_frame.npz:imgname: egocentric PV image paths (e.x.,egocentric_color/RECORDING_NAME/202x-xx-xx-xxxxxx/PV/timestamp_frame_xxxxx.jpg)valid:True/False,Trueindicates that the detected openpose body joints >= 6 for the interactee in each PV frame
- Note:
keypoints.npz,valid_frame.npzand202x-xx-xx-xxxxxx_pv.txtcan contain frame IDs outside of the range of[start_frame, end_frame], please ignore those frames.
egocentric_depth: egocentric depth recordingsRECORDING_NAME: recording_name- each sequence contains recorded depth, lookup table, and depth camera extrinsics (please refer here for more information)
egocentric_gaze: egocentric eye gaze recordingsRECORDING_NAME: recording_name202x-xx-xx-xxxxxx_head_hand_eye.csv: each row includestimestampandhead/hand/eye gaze trackingfor the current timestamp, please referload_head_hand_eye_data()inutils.pyfor details.
Third-person view data streams
EgoBody
├── kinect_color
│ ├── RECORDING_NAME
│ │ ├── master/sub_1/sub_2(/sub_3/sub_4)
│ │ │ ├── frame_xxxxx.jpg
├── kinect_depth
│ ├── RECORDING_NAME
│ │ ├── master/sub_1/sub_2(/sub_3/sub_4)
│ │ │ ├── frame_xxxxx.png
kinect_color: multi-view third-person view RGB images captured by Kinect camerasRECORDING_NAME: recording_namemaster/frame_xxxxx.jpg: RGB frame formasterkinectsub_1/frame_xxxxx.jpg: RGB frame forsub_1kinect ...- Note that here frame ID
frame_xxxxxis synchronized with the corresponding egocentric RGB frametimestamp_frame_xxxxx.jpgof the same sequence.
kinect_depth: multi-view third-person view depth images captured by Kinect camerasRECORDING_NAME: recording_namemaster/frame_xxxxx.png: depth frame formasterkinectsub_1/frame_xxxxx.png: depth frame forsub_1kinect ...- Note that here frame ID
frame_xxxxxis synchronized with the kinect RGB frame with frame IDframe_xxxxx
3D scene meshes
EgoBody
├── scene_mesh
│ ├── $scene_name$
│ │ ├── $scene_name$.obj
$scene_name.obj$: 3D scene mesh for scene$scene_name$
3D human pose, shape and motion annotations
EgoBody
├── smplx_interactee_train
│ ├── RECORDING_NAME/body_idx_x/results/frame_xxxxx/000.pkl
├── smplx_interactee_val
├── smplx_camera_wearer_train
│ ├── RECORDING_NAME/body_idx_x/results/frame_xxxxx/000.pkl
├── smplx_camera_wearer_val
├── smpl_interactee_train
│ ├── RECORDING_NAME/body_idx_x/results/frame_xxxxx/000.pkl
├── smpl_interactee_val
├── smpl_camera_wearer_train
│ ├── RECORDING_NAME/body_idx_x/results/frame_xxxxx/000.pkl
├── smpl_camera_wearer_val
smplx_interactee_train/valandsmplx_camera_wearer_train/val: SMPL-X body parameters for each frame of the interactee/camera wearer in training/val set- always in the coordinate system of the
masterkinect RGB camera body_idx_xis the body index of the interactee/camera wearer in the current sequence, andframe_xxxxxis the ID for each frame.
- always in the coordinate system of the
smpl_interactee_train/valandsmpl_camera_wearer_train/val: SMPL body parameters for each frame of the interactee/camera wearer
Motion text descriptions
Text descriptions for motions are provided by Motion-X Dataset.
Vis
Related Skills
node-connect
385.5kDiagnose OpenClaw Android, iOS, or macOS node pairing, QR/setup code, route, auth, and connection failures.
blender-python-addon
40.5kBlender Python add-on rules for operators, panels, properties, registration, testing, and API-safe scripting
flutter-development-guidelines-cursorrules-prompt-file
40.5kCursor rules for Flutter development with MVVM architecture, Riverpod state management, Material widgets, and Dart style guidelines.
commit-push-pr
140.7kCommit, push, and open a PR
