Spaces:
Running on Zero
Running on Zero
Download src/misc/stabilize_camera.py from hugging-apps/codecsplat: direct link, hf CLI and curl.
- Browser
- Download file 1.42 kB
-
https://huggingface.co/spaces/hugging-apps/codecsplat/resolve/main/src/misc/stabilize_camera.py
- Command line
-
hf download hf://spaces/hugging-apps/codecsplat/src/misc/stabilize_camera.py
-
curl -L -o stabilize_camera.py https://huggingface.co/spaces/hugging-apps/codecsplat/resolve/main/src/misc/stabilize_camera.py
1.42 kB
| """ | |
| https://github.com/google/dynibar/blob/main/ibrnet/data_loaders/llff_data_utils.py | |
| """ | |
| import numpy as np | |
| import cv2 | |
| def render_stabilization_path(poses, k_size=45): | |
| """Render a stabilized camera path.""" | |
| # hwf = poses[0, :, 4:5] | |
| num_frames = poses.shape[0] | |
| output_poses = [] | |
| input_poses = [] | |
| for i in range(num_frames): | |
| input_poses.append( | |
| np.concatenate( | |
| [poses[i, :3, 0:1], poses[i, :3, 1:2], poses[i, :3, 3:4]], axis=-1 | |
| ) | |
| ) | |
| input_poses = np.array(input_poses) | |
| gaussian_kernel = cv2.getGaussianKernel(ksize=k_size, sigma=-1) | |
| output_r1 = cv2.filter2D(input_poses[:, :, 0], -1, gaussian_kernel) | |
| output_r2 = cv2.filter2D(input_poses[:, :, 1], -1, gaussian_kernel) | |
| output_r1 = output_r1 / np.linalg.norm(output_r1, axis=-1, keepdims=True) | |
| output_r2 = output_r2 / np.linalg.norm(output_r2, axis=-1, keepdims=True) | |
| output_t = cv2.filter2D(input_poses[:, :, 2], -1, gaussian_kernel) | |
| for i in range(num_frames): | |
| output_r3 = np.cross(output_r1[i], output_r2[i]) | |
| render_pose = np.concatenate( | |
| [ | |
| output_r1[i, :, None], | |
| output_r2[i, :, None], | |
| output_r3[:, None], | |
| output_t[i, :, None], | |
| ], | |
| axis=-1, | |
| ) | |
| output_poses.append(render_pose[:3, :]) | |
| return output_poses | |