|
|
|
|
|
|
|
import numpy as np |
|
|
|
from util.logger import log |
|
from lib.rays import rays_from_silh |
|
from models.smpl import model_params_in_camera_coords |
|
|
|
sess = None |
|
|
|
|
|
class FrameData(object): |
|
pass |
|
|
|
|
|
def batch_invert(x): |
|
try: |
|
import tensorflow as tf |
|
global sess |
|
|
|
tx = tf.convert_to_tensor(x, dtype=tf.float32) |
|
txi = tf.transpose(tf.matrix_inverse(tf.transpose(tx))) |
|
|
|
if sess is None: |
|
sess = tf.Session() |
|
|
|
return sess.run(txi) |
|
|
|
except ImportError: |
|
log.info('Could not load tensorflow. Falling back to matrix inversion with numpy (slower).') |
|
|
|
return np.asarray([np.linalg.inv(t) for t in x.T]).T |
|
|
|
|
|
def setup_frame_rays(base_smpl, camera, camera_t, camera_rt, pose, trans, mask): |
|
f = FrameData() |
|
|
|
f.trans, f.pose = model_params_in_camera_coords(trans, pose, base_smpl.J[0], camera_t, camera_rt) |
|
f.mask = mask |
|
|
|
base_smpl.pose[:] = f.pose |
|
camera.t[:] = f.trans |
|
|
|
f.Vi = batch_invert(base_smpl.V.r) |
|
f.rays = rays_from_silh(f.mask, camera) |
|
|
|
return f |
|
|