Recording Camera Movements¶
Before I show you how to control the camera movement programmatically from the python side,
let me first show you how to record the camera movements. This simple tutorial will produce
a camera movement file in assets/camera_movement.pkl
. You can then use this file to control
the camera movement programmatically in the next tutorial.
Collecting User Camera Movement¶
here is a simple example for logging the camera movement.
import numpy as np
from vuer import Vuer, VuerSession
from vuer.events import ClientEvent
from vuer.schemas import DefaultScene, CameraView
Collecting Render¶
This example requires saving and loading data from the local disk.
Let’s first instantiate a local ML-Logger instance.
import os
from ml_logger import ML_Logger
logger = ML_Logger(root=os.getcwd(), prefix="assets")
doc.print(logger)
async def track_movement(event: ClientEvent, sess: VuerSession):
# only intercept the ego camera.
if event.key != "ego":
return
print("camera moved", event.value["matrix"])
logger.log(**event.value, flush=True, silent=True, file="camera_movement.pkl")
app = Vuer()
app.add_handler("CAMERA_MOVE", track_movement)
# We don't auto start the vuer app because we need to bind a handler.
@app.spawn(start=True)
async def show_heatmap(proxy):
proxy.set @ DefaultScene(
rawChildren=[
CameraView(
fov=50,
width=320,
height=240,
key="ego",
position=[-0.5, 1.25, 0.5],
rotation=[-0.4 * np.pi, -0.1 * np.pi, 0.15 + np.pi],
stream="frame",
fps=30,
near=0.45,
far=1.8,
showFrustum=True,
downsample=1,
distanceToCamera=2
# dpr=1,
),
],
# hide the helper to only render the objects.
grid=False,
show_helper=False,
)
while True:
await asyncio.sleep(1.0)
ML_Logger(root="/Users/ge/mit/vuer/docs/tutorials/virtual_camera",
prefix="assets")