Skip to content

Latest commit

 

History

History
74 lines (53 loc) · 2.57 KB

File metadata and controls

74 lines (53 loc) · 2.57 KB

SUNCG scene with object switching

The ObjectReplacer tries to replace objects with other objects. First, you can specify the group of objects, which should be replaced: objects_to_be_replaced and second you can select the objects you want to them to replace them with: objects_to_replace_with. Both groups of objects can be selected with the getter.Entity

Usage

Execute in the Blender-Proc main directory:

blenderpoc run examples/datasets/suncg_with_object_replacer/main.py <path to house.json> <path to new object> examples/datasets/suncg_with_object_replacer/output
  • examples/datasets/suncg_with_object_replacer/main.py: path to the python file with pipeline configuration.
  • <path to house.json>: path to the house.json file of the SUNCG scene you want to render.
  • <path to new object>: path to the objects_to_replace_with.
  • examples/datasets/suncg_with_object_replacer/output: path to the output directory.

Visualization

Visualize the generated data:

blenderproc vis hdf5 example/suncg_with_object_replacer/output/0.hdf5

Steps

  • Loads a SUNCG scene.
  • Loads new object.
  • Hides the new loaded objects from the renderer.
  • Replacing objects.
  • Sample camera positions inside every room.
  • Automatically adds light sources inside each room.
  • Writes sampled camera poses to file.
  • Renders rgb, depth and normals.
  • Merges all into an .hdf5 file.

Python file (main.py)

ObjectReplacer

chair_obj = bproc.loader.load_obj(args.object_path)
if len(chair_obj) != 1:
    raise Exception(f"There should only be one chair object not: {len(chair_obj)}")
chair_obj = chair_obj[0]


def relative_pose_sampler(obj):
    # Sample random rotation and apply it to the objects pose
    obj.blender_obj.rotation_euler.rotate(Euler((0, 0, np.random.uniform(0.0, 6.283185307))))


replace_ratio = 1.0
bproc.object.replace_objects(
    objects_to_be_replaced=bproc.filter.by_cp(objs, "coarse_grained_class", "chair"),
    objects_to_replace_with=[chair_obj],
    ignore_collision_with=bproc.filter.by_cp(objs, "type", "Floor"),
    replace_ratio=replace_ratio,
    copy_properties=True,
    relative_pose_sampler=relative_pose_sampler
)
  • This replaces objects from objects_to_be_replaced with objects from objects_to_replace_with.
  • When copy_properties is set to True, the objects_to_replace_with gets all the custom properties that the objects_to_be_replaced used to have.
  • This doesn't do collision checking between objects_to_replace_with and object provided by ignore_collision_with.