Skip to content

Commit

Permalink
Refactoring PathProvider
Browse files Browse the repository at this point in the history
Summary:
Refactor PathProvider.py to use inheritance, aka.
i.e AriaDatasetPaths and QuestDatasetPaths inherit from  SequenceDatasetPathsBase and remove some duplicated definition of properties

Reviewed By: prithvirb

Differential Revision: D58632000

fbshipit-source-id: 0e453d3da1e59f90bd72f2ecb9a9426d45c92642
  • Loading branch information
SeaOtocinclus authored and facebook-github-bot committed Jun 20, 2024
1 parent 600f1c4 commit 4f49bd0
Showing 1 changed file with 39 additions and 54 deletions.
93 changes: 39 additions & 54 deletions hot3d/data_loaders/PathProvider.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,32 +13,18 @@
# limitations under the License.

import os
from abc import abstractmethod

from .headsets import Headset
from .io_utils import load_json


class Hot3dDataPathProvider(object):
@staticmethod
def fromRecordingFolder(recording_instance_folderpath):

metadata_filepath = os.path.join(recording_instance_folderpath, "metadata.json")
metadata_json = load_json(metadata_filepath)
headset = Headset[metadata_json["headset"]]
class SequenceDatasetPathsBase:
"""
Class defining the expected filepaths for a given HOT3D sequence
This base class can be extended to support headset specific filepaths (Aria, Quest, etc.)
"""

if headset is Headset.Aria:
return AriaDatasetPaths(
recording_instance_folderpath=recording_instance_folderpath
)
elif headset is Headset.Quest3:
return Quest3DatasetPaths(
recording_instance_folderpath=recording_instance_folderpath
)
else:
raise NotImplementedError(f"{headset} not supported at the moment.")


class Quest3DatasetPaths(object):
def __init__(self, recording_instance_folderpath):
self._recording_instance_folderpath = recording_instance_folderpath

Expand Down Expand Up @@ -74,6 +60,37 @@ def box2d_hands_filepath(self):
def scene_metadata_filepath(self):
return f"{self._recording_instance_folderpath}/metadata.json"

@abstractmethod
def is_valid(self) -> bool:
"""
Returns if the list of required file for the Headset sequence are available
"""


class Hot3dDataPathProvider(object):
@staticmethod
def fromRecordingFolder(recording_instance_folderpath) -> SequenceDatasetPathsBase:

metadata_filepath = os.path.join(recording_instance_folderpath, "metadata.json")
metadata_json = load_json(metadata_filepath)
headset = Headset[metadata_json["headset"]]

if headset is Headset.Aria:
return AriaDatasetPaths(
recording_instance_folderpath=recording_instance_folderpath
)
elif headset is Headset.Quest3:
return Quest3DatasetPaths(
recording_instance_folderpath=recording_instance_folderpath
)
else:
raise NotImplementedError(f"{headset} not supported at the moment.")


class Quest3DatasetPaths(SequenceDatasetPathsBase):
def __init__(self, recording_instance_folderpath):
super().__init__(self, recording_instance_folderpath)

@property
def camera_models_filepath(self):
return f"{self._recording_instance_folderpath}/camera_models.json"
Expand All @@ -92,46 +109,14 @@ def is_valid(self) -> bool:
return all(os.path.exists(filepath) for filepath in self.required_filepaths)


class AriaDatasetPaths(object):
class AriaDatasetPaths(SequenceDatasetPathsBase):
def __init__(self, recording_instance_folderpath):
self._recording_instance_folderpath = recording_instance_folderpath

@property
def recording_instance_folderpath(self):
return self._recording_instance_folderpath

@property
def dynamic_objects_filepath(self):
return f"{self._recording_instance_folderpath}/dynamic_objects.csv"

@property
def headset_trajectory_filepath(self):
return f"{self._recording_instance_folderpath}/headset_trajectory.csv"

@property
def mano_hand_pose_trajectory_filepath(self):
return f"{self._recording_instance_folderpath}/mano_hand_pose_trajectory.jsonl"

@property
def vrs_filepath(self):
return f"{self._recording_instance_folderpath}/recording.vrs"

@property
def box2d_objects_filepath(self):
return f"{self._recording_instance_folderpath}/box2d_objects.csv"

@property
def box2d_hands_filepath(self):
return f"{self._recording_instance_folderpath}/box2d_hands.csv"
super().__init__(recording_instance_folderpath)

@property
def mps_folderpath(self):
return f"{self._recording_instance_folderpath}/mps"

@property
def scene_metadata_filepath(self):
return f"{self._recording_instance_folderpath}/metadata.json"

@property
def required_filepaths(self):
return [
Expand Down

0 comments on commit 4f49bd0

Please sign in to comment.