def generate_bfm_base_obj(): bfm = MorphabelModel('../Data/BFM/Out/BFM.mat') sp = bfm.get_shape_para('zero') ep = bfm.get_exp_para('zero') tp = bfm.get_tex_para('random') vertices = bfm.generate_vertices(sp, ep) colors = bfm.generate_colors(tp) colors = np.minimum(np.maximum(colors, 0), 255) write_obj_with_colors('head_fit.obj', vertices, bfm.triangles, colors)
sys.path.append('..') import face3d from face3d import mesh from face3d.morphable_model import MorphabelModel # --------------------- Forward: parameters(shape, expression, pose) --> 3D obj --> 2D image --------------- # --- 1. load model bfm = MorphabelModel('Data/BFM/Out/BFM.mat') print('init bfm model success') # --- 2. generate face mesh: vertices(represent shape) & colors(represent texture) sp = bfm.get_shape_para('random') ep = bfm.get_exp_para('random') vertices = bfm.generate_vertices(sp, ep) tp = bfm.get_tex_para('random') colors = bfm.generate_colors(tp) colors = np.minimum(np.maximum(colors, 0), 1) # --- 3. transform vertices to proper position s = 8e-04 angles = [10, 30, 20] t = [0, 0, 0] transformed_vertices = bfm.transform(vertices, s, angles, t) projected_vertices = transformed_vertices.copy( ) # using stantard camera & orth projection # --- 4. render(3d obj --> 2d image) # set prop of rendering h = w = 256 c = 3
import face3d from face3d import mesh from face3d import mesh_cython from face3d.morphable_model import MorphabelModel # --------------------- Forward: parameters(shape, expression, pose) --> 3D obj --> 2D image --------------- # --- 1. load model bfm = MorphabelModel('Data/BFM/Out/BFM.mat') print('init bfm model success') # --- 2. generate face mesh: vertices(represent shape) & colors(represent texture) sp = bfm.get_shape_para('random') ep = bfm.get_exp_para('random') vertices = bfm.generate_vertices(sp, ep) tp = bfm.get_tex_para('random') colors = bfm.generate_colors(tp) colors = np.minimum(np.maximum(colors, 0), 1) # --- 3. transform vertices to proper position s = 8e-04 angles = [10, 30, 20] t = [0, 0, 0] transformed_vertices = bfm.transform(vertices, s, angles, t) projected_vertices = transformed_vertices.copy() # using stantard camera & orth projection # --- 4. render(3d obj --> 2d image) # set prop of rendering h = w = 256; c = 3 image_vertices = mesh.transform.to_image(projected_vertices, h, w) image = mesh_cython.render.render_colors(image_vertices, bfm.triangles, colors, h, w)
sys.path.append('..') import face3d from face3d import mesh from face3d.morphable_model import MorphabelModel # --------------------- Forward: parameters(shape, expression, pose) --> 3D obj --> 2D image --------------- # --- 1. load model 【载入3D参数,即BFM参数,用于生成mesh数据,从而进一步地生成2D人脸图像】 bfm = MorphabelModel('Data/BFM/Out/BFM.mat') print('init bfm model success') # --- 2. generate face mesh: vertices(represent shape) & colors(represent texture) sp = bfm.get_shape_para('random') # shape参数 ep = bfm.get_exp_para('random') # expression参数 vertices = bfm.generate_vertices(sp, ep) tp = bfm.get_tex_para('random') # texture参数,也即colors——颜色 colors = bfm.generate_colors(tp) colors = np.minimum(np.maximum(colors, 0), 1) # --- 3. transform vertices to proper position # 转换坐标系 s = 8e-04 angles = [10, 30, 20] t = [0, 0, 0] transformed_vertices = bfm.transform(vertices, s, angles, t) projected_vertices = transformed_vertices.copy() # using stantard camera & orth projection # --- 4. render(3d obj --> 2d image) # 渲染,将3d转变为颜色正常的2d # set prop of rendering h = w = 256; c = 3 image_vertices = mesh.transform.to_image(projected_vertices, h, w) image = mesh.render.render_colors(image_vertices, bfm.triangles, colors, h, w)
params = np.load(filename) params = np.float32(params) # sp = params[: bfm.n_shape_para][:, np.newaxis] # tp = params[bfm.n_shape_para : bfm.n_shape_para + bfm.n_tex_para][:, np.newaxis] # pose = params[bfm.n_shape_para + bfm.n_tex_para:] ep = params[:bfm.n_exp_para][:, np.newaxis] pose = params[bfm.n_exp_para:] # --- 2. generate face mesh: vertices(represent shape) & colors(represent texture) sp = bfm.get_shape_para('zero') #ep = bfm.get_exp_para('zero') tp = bfm.get_tex_para('zero') colors = bfm.generate_colors(tp) colors = np.minimum(np.maximum(colors, 0), 1) # --- 3. transform vertices to proper position s = pose[-1] angles = pose[:3] t = np.r_[pose[3:5], [0]] vertices = bfm.generate_vertices(sp, ep) transformed_vertices = bfm.transform(vertices, s, angles, t) projected_vertices = transformed_vertices.copy() # using stantard camera & orth projection # --- 4. render(3d obj --> 2d image) # set prop of rendering