zejunyang commited on
Commit
537435d
1 Parent(s): c8ab10f
Files changed (1) hide show
  1. src/vid2vid.py +9 -6
src/vid2vid.py CHANGED
@@ -23,7 +23,7 @@ from src.utils.util import get_fps, read_frames, save_videos_grid
23
 
24
  from src.utils.mp_utils import LMKExtractor
25
  from src.utils.draw_util import FaceMeshVisualizer
26
- from src.utils.pose_util import project_points_with_trans, matrix_to_euler_and_translation
27
  from src.audio2vid import smooth_pose_seq
28
 
29
 
@@ -153,21 +153,24 @@ def video2video(ref_img, source_video, size=512, steps=25, length=150, seed=42):
153
  min_bs_idx = np.argmin(bs_arr.sum(1))
154
 
155
  # compute delta pose
156
- trans_mat_inv_frame_0 = np.linalg.inv(trans_mat_arr[0])
157
  pose_arr = np.zeros([trans_mat_arr.shape[0], 6])
158
 
159
  for i in range(pose_arr.shape[0]):
160
- pose_mat = trans_mat_inv_frame_0 @ trans_mat_arr[i]
161
- euler_angles, translation_vector = matrix_to_euler_and_translation(pose_mat)
162
  pose_arr[i, :3] = euler_angles
163
  pose_arr[i, 3:6] = translation_vector
 
 
 
164
 
165
- pose_arr = smooth_pose_seq(pose_arr)
 
 
166
 
167
  # face retarget
168
  verts_arr = verts_arr - verts_arr[min_bs_idx] + face_result['lmks3d']
169
  # project 3D mesh to 2D landmark
170
- projected_vertices = project_points_with_trans(verts_arr, pose_arr, [frame_height, frame_width])
171
 
172
  pose_list = []
173
  for i, verts in enumerate(projected_vertices):
 
23
 
24
  from src.utils.mp_utils import LMKExtractor
25
  from src.utils.draw_util import FaceMeshVisualizer
26
+ from src.utils.pose_util import project_points_with_trans, matrix_to_euler_and_translation, euler_and_translation_to_matrix
27
  from src.audio2vid import smooth_pose_seq
28
 
29
 
 
153
  min_bs_idx = np.argmin(bs_arr.sum(1))
154
 
155
  # compute delta pose
 
156
  pose_arr = np.zeros([trans_mat_arr.shape[0], 6])
157
 
158
  for i in range(pose_arr.shape[0]):
159
+ euler_angles, translation_vector = matrix_to_euler_and_translation(trans_mat_arr[i]) # real pose of source
 
160
  pose_arr[i, :3] = euler_angles
161
  pose_arr[i, 3:6] = translation_vector
162
+
163
+ init_tran_vec = face_result['trans_mat'][:3, 3] # init translation of tgt
164
+ pose_arr[:, 3:6] = pose_arr[:, 3:6] - pose_arr[0, 3:6] + init_tran_vec # (relative translation of source) + (init translation of tgt)
165
 
166
+ pose_arr_smooth = smooth_pose_seq(pose_arr, window_size=3)
167
+ pose_mat_smooth = [euler_and_translation_to_matrix(pose_arr_smooth[i][:3], pose_arr_smooth[i][3:6]) for i in range(pose_arr_smooth.shape[0])]
168
+ pose_mat_smooth = np.array(pose_mat_smooth)
169
 
170
  # face retarget
171
  verts_arr = verts_arr - verts_arr[min_bs_idx] + face_result['lmks3d']
172
  # project 3D mesh to 2D landmark
173
+ projected_vertices = project_points_with_trans(verts_arr, pose_mat_smooth, [frame_height, frame_width])
174
 
175
  pose_list = []
176
  for i, verts in enumerate(projected_vertices):