EasyMocap/doc/realtime_visualization.md
2021-06-28 19:37:15 +08:00

5.5 KiB

EasyMoCap -> Real-time Visualization

We are the first one to release a real-time visualization tool for both skeletons and SMPL/SMPL+H/SMPL-X/MANO models.

Install

Please install EasyMocap first. This part requires Open3D==0.9.0:

python3 -m pip install open3d==0.9.0

Open the server

Before any visualization, you should run a server:

# quick start:
python3 apps/vis/vis_server.py --cfg config/vis3d/o3d_scene.yml
# If you want to specify the host and port:
python3 apps/vis/vis_server.py --cfg config/vis3d/o3d_scene.yml host <your_ip_address> port <set_a_port>

This step will open the visualization window:

You can alternate the viewpoints free. Press a to automatic rotate the scene. The configuration file config/vis/o3d_scene.yml defines the scene and other properties. In the default setting, we define the xyz-axis in the origin, the bounding box of the scene and a chessboard in the ground.

Send the data

If you are success to open the server, you can visualize your 3D data anywhere. We provide an example code:

python3 apps/vis/vis_client.py --path <path/to/your/keypoints3d> --host <previous_ip_address> --port <previous_port>

Take the zju-ls-feng results as example, you can show the skeleton in the main window:

Embed this feature to your code

To add this visualization to your other code, you can follow these steps:

# 1. import the base client
from easymocap.socket.base_client import BaseSocketClient
# 2. set the ip address and port
client = BaseSocketClient(host, port)
# 3. send the data
client.send(data)

The format of data is:

data = [
    {
        'id': 0,
        'keypoints3d': numpy.ndarray # (nJoints, 4) , (x, y, z, c) for each joint
    },
    {
        'id': 1,
        'keypoints3d': numpy.ndarray # (nJoints, 4)
    }
]

Define your scene

In the configuration file, we main define the body_model and scene. You can replace them for your data.

Examples

To understand our code, we provide lots of results for visualization.

First download the data here and set the path to vis:

vis=/path/to/vis/data

1. Skeletons

Basic skeletons:

# Start the server:
python3 apps/vis/vis_server.py --cfg config/vis3d/o3d_scene.yml write True out ${vis}/output/skel-body25 camera.cz 3. camera.cy 0.5
# Send the keypoints:
python3 apps/vis/vis_client.py --path ${vis}/smpl/keypoints3d

Body+Face+Hand:

# Start the server:
python3 apps/vis/vis_server.py --cfg config/vis3d/o3d_scene_total.yml write True out ${vis}/output/skel-total camera.cz 3. camera.cy 0.5
# Send the keypoints:
python3 apps/vis/vis_client.py --path ${vis}/smplx/keypoints3d

Multiple Person:

# Start the server:
python3 apps/vis/vis_server.py --cfg config/vis3d/o3d_scene.yml write True out ${vis}/output/skel-multi camera.cz 3. camera.cy 0.5
# Send the keypoints:
python3 apps/vis/vis_client.py --path ${vis}/multi/keypoints3d --step 4

2. Mesh

SMPL:

# Start the server:
python3 apps/vis/vis_server.py --cfg config/vis3d/o3d_scene_smpl.yml write True out ${vis}/output/mesh-smpl camera.cz 3. camera.cy 0.5
# Send the keypoints:
python3 apps/vis/vis_client.py --path ${vis}/smpl/smpl --smpl

SMPLX:

# Start the server:
python3 apps/vis/vis_server.py --cfg config/vis3d/o3d_scene_smplx.yml write True out ${vis}/output/mesh-smplx camera.cz 3. camera.cy 0.5
# Send the keypoints:
python3 apps/vis/vis_client.py --path ${vis}/smplx/smpl --smpl

MANO:

# Start the server:
python3 apps/vis/vis_server.py --cfg config/vis3d/o3d_scene_manol.yml write True out ${vis}/output/mesh-manol camera.cz 3. camera.cy 0.5
# Send the keypoints:
python3 apps/vis/vis_client.py --path ${vis}/manol/smpl --smpl

Advanced

1. Camera Setting

Try to modify these keys to control the location and rotation of the cameras.

camera:
  phi: 0
  theta: -30
  cx: 0.
  cy: 0.
  cz: 6.

2. Scene Setting

We provide some useful mesh in easymocap.visualize.o3dwrapper. If you want to add your own 3D mesh, add it to the key scene.

3. Body Model

At present, we just allow use one type of body model in the scene for fast visualization. So you must set the body model before you run the apps/vis/vis_server.py. If you want to use different models in a scene, you can implement it and pull a request.