NOCS
The focus of this example is to show how to render the Normalized Object Coordinate Space (NOCS).
See the paper Normalized Object Coordinate Space for Category-Level6D Object Pose and Size Estimation for more details.
Usage
Execute in the BlenderProc main directory:
blenderproc run examples/datasets/nocs/main.py <PATH_TO_ShapeNetCore.v2> examples/datasets/nocs/output
examples/datasets/nocs/main.py
: path to the python file with pipeline configuration.<PATH_TO_ShapeNetCore.v2>: path to the downloaded shape net core v2 dataset, get it [here](http://www.shapenet.org/)
examples/advanced/nocs/output
: path to the output directory.
Visualization
In the output folder you will find a series of .hdf5
containers. These can be visualized with the script:
blenderproc vis hdf5 examples/datasets/nocs/output/*.hdf5
Steps
Set the ShapeNet category as specified with
bproc.loader.load_shapenet()
.Sample camera poses
bproc.camera
.Render RGB with
bproc.renderer.render()
.Render NOCS with
bproc.renderer.render_nocs()
.Write HDF5 file:
bproc.writer.write_hdf5()
.
Python file (main.py)
ShapeNetLoader
shapenet_obj = bproc.loader.load_shapenet(args.shapenet_path, used_synset_id="02942699", used_source_id="97690c4db20227d248e23e2c398d8046", move_object_origin=False)
This loads a camera object from the ShapeNet dataset
Make sure to disable
move_object_origin
, as otherwise the local coordinates of the object are changed.ShapeNet objects are already normalized, so all local coordinates should be in
[-1, 1]
NOCS Renderer
data.update(bproc.renderer.render_nocs())
bproc.renderer.render_nocs()
renders NOCS of all framesThereby, the local coordinates
[-1, 1]
are mapped into the[0, 1]
colorspaceThe rendering function returns a dict, containing one entry
nocs
which points to the list of rendered NOCS frames.