Source code for blenderproc.python.modules.loader.BopLoaderModule

from blenderproc.python.modules.loader.LoaderInterface import LoaderInterface
from blenderproc.python.loader.BopLoader import load_bop_objs, load_bop_scene, load_bop_intrinsics


[docs]class BopLoaderModule(LoaderInterface): """ Loads the 3D models of any BOP dataset and allows replicating BOP scenes - Interfaces with the bob_toolkit, allows loading of train, val and test splits - Relative camera poses are loaded/computed with respect to a reference model - Sets real camera intrinsics **Configuration**: .. list-table:: :widths: 25 100 10 :header-rows: 1 * - Parameter - Description - Type * - cam_type - Camera type. If not defined, dataset-specific default camera type is used. Default value: "" - string * - source_frame - Can be used if the given positions and rotations are specified in frames different from the blender frame. Has to be a list of three strings. Example: ['X', '-Z', 'Y']: Point (1,2,3) will be transformed to (1, -3, 2). Default: ["X", "-Y", "-Z"]. " Available: ['X', 'Y', 'Z', '-X', '-Y', '-Z']. - list * - sys_paths - System paths to append. - list * - bop_dataset_path - Full path to a specific bop dataset e.g. /home/user/bop/tless. - string * - mm2m - Specify whether to convert poses and models to meters. Optional. Default: False. - bool * - split - Optionally, test or val split depending on BOP dataset. Optional. Default: test. - string * - scene_id - Optionally, specify BOP dataset scene to synthetically replicate. Default: -1 (no scene is replicated, only BOP Objects are loaded). - int * - sample_objects - Toggles object sampling from the specified dataset. Default: False. - boolean * - num_of_objs_to_sample - Amount of objects to sample from the specified dataset. If this amount is bigger than the dataset actually contains, then all objects will be loaded. - int * - obj_instances_limit - Limits the amount of object copies when sampling. Default: -1 (no limit). - int * - obj_ids - List of object ids to load. Default: [] (all objects from the given BOP dataset if scene_id is not specified). - list * - model_type - Optionally, specify type of BOP model. Type: string. Default: "". Available: [reconst, cad or eval]. - string * - move_origin_to_x_y_plane - Move center of the object to the lower side of the object, this will not work when used in combination with pose estimation tasks! This is designed for the use-case where BOP objects are used as filler objects in the background. Default: False - bool """ def __init__(self, config): LoaderInterface.__init__(self, config)
[docs] def run(self): """ Load BOP data """ sample_objects = self.config.get_bool("sample_objects", False) if sample_objects: num_of_objs_to_sample = self.config.get_int("num_of_objs_to_sample") obj_instances_limit = self.config.get_int("obj_instances_limit", -1) else: num_of_objs_to_sample = None obj_instances_limit = -1 scene_id = self.config.get_int("scene_id", -1) if scene_id == -1: loaded_objects = load_bop_objs( bop_dataset_path=self.config.get_string("bop_dataset_path"), model_type=self.config.get_string("model_type", ""), obj_ids=self.config.get_list("obj_ids", []), sample_objects=sample_objects, num_of_objs_to_sample=num_of_objs_to_sample, obj_instances_limit=obj_instances_limit, move_origin_to_x_y_plane=self.config.get_bool("move_origin_to_x_y_plane", False), mm2m=self.config.get_bool("mm2m", False), temp_dir=self._temp_dir ) load_bop_intrinsics( bop_dataset_path=self.config.get_string("bop_dataset_path"), split=self.config.get_string("split", "test"), cam_type=self.config.get_string("cam_type", "") ) else: loaded_objects = load_bop_scene( bop_dataset_path=self.config.get_string("bop_dataset_path"), scene_id=self.config.get_int("scene_id", -1), model_type=self.config.get_string("model_type", ""), cam_type=self.config.get_string("cam_type", ""), split=self.config.get_string("split", "test"), source_frame=self.config.get_list("source_frame", ["X", "-Y", "-Z"]), mm2m=self.config.get_bool("mm2m", False), temp_dir=self._temp_dir ) self._set_properties(loaded_objects)