星鸿阁

 找回密码
 立即注册
搜索
热搜: 活动 交友 动画
查看: 803|回复: 4

gcc下载地址

[复制链接]

2254

主题

2764

帖子

9644

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
9644
发表于 2023-3-20 16:52:42 | 显示全部楼层 |阅读模式
回复

使用道具 举报

2254

主题

2764

帖子

9644

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
9644
 楼主| 发表于 2023-3-21 14:52:09 | 显示全部楼层
回复

使用道具 举报

2254

主题

2764

帖子

9644

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
9644
 楼主| 发表于 2023-3-21 15:38:09 | 显示全部楼层
完成后要重新编译  python3 build.py build_ext --inplace
回复

使用道具 举报

2254

主题

2764

帖子

9644

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
9644
 楼主| 发表于 2023-3-21 16:54:37 | 显示全部楼层
https://github.com/cleardusk/3DDFA_V2/issues/83    更改后,可以看到uv


  1. # coding: utf-8

  2. __author__ = 'cleardusk'

  3. import numpy as np
  4. import os.path as osp
  5. import scipy.io as sio
  6. from utils.io import _load
  7. from .tddfa_util import _to_ctype
  8. from .functions import get_suffix

  9. header_temp = """ply
  10. format ascii 1.0
  11. element vertex {}
  12. property float x
  13. property float y
  14. property float z
  15. element face {}
  16. property list uchar int vertex_indices
  17. end_header
  18. """
  19. make_abs_path = lambda fn: osp.join(osp.dirname(osp.realpath(__file__)), fn)

  20. def load_uv_coords(fp):
  21.     C = sio.loadmat(fp)
  22.     uv_coords = C['UV'].copy(order='C').astype(np.float32)
  23.     return uv_coords


  24. def process_uv(uv_coords, uv_h=256, uv_w=256):
  25.     uv_coords[:, 0] = uv_coords[:, 0] * (uv_w - 1)
  26.     uv_coords[:, 1] = uv_coords[:, 1] * (uv_h - 1)
  27.     uv_coords[:, 1] = uv_h - uv_coords[:, 1] - 1
  28.     uv_coords = np.hstack((uv_coords, np.zeros((uv_coords.shape[0], 1), dtype=np.float32)))  # add z
  29.     return uv_coords

  30. g_uv_coords = load_uv_coords(make_abs_path('../configs/BFM_UV.mat'))
  31. indices = _load(make_abs_path('../configs/indices.npy'))  # todo: handle bfm_slim
  32. g_uv_coords = g_uv_coords[indices, :]

  33. def ser_to_ply_single(ver_lst, tri, height, wfp, reverse=True):
  34.     suffix = get_suffix(wfp)

  35.     for i, ver in enumerate(ver_lst):
  36.         wfp_new = wfp.replace(suffix, f'_{i + 1}{suffix}')

  37.         n_vertex = ver.shape[1]
  38.         n_face = tri.shape[0]
  39.         header = header_temp.format(n_vertex, n_face)

  40.         with open(wfp_new, 'w') as f:
  41.             f.write(header + '\n')
  42.             for i in range(n_vertex):
  43.                 x, y, z = ver[:, i]
  44.                 if reverse:
  45.                     f.write(f'{x:.2f} {height-y:.2f} {z:.2f}\n')
  46.                 else:
  47.                     f.write(f'{x:.2f} {y:.2f} {z:.2f}\n')
  48.             for i in range(n_face):
  49.                 idx1, idx2, idx3 = tri[i]  # m x 3
  50.                 if reverse:
  51.                     f.write(f'3 {idx3} {idx2} {idx1}\n')
  52.                 else:
  53.                     f.write(f'3 {idx1} {idx2} {idx3}\n')

  54.         print(f'Dump tp {wfp_new}')


  55. def ser_to_ply_multiple(ver_lst, tri, height, wfp, reverse=True):
  56.     n_ply = len(ver_lst)  # count ply

  57.     if n_ply <= 0:
  58.         return

  59.     n_vertex = ver_lst[0].shape[1]
  60.     n_face = tri.shape[0]
  61.     header = header_temp.format(n_vertex * n_ply, n_face * n_ply)

  62.     with open(wfp, 'w') as f:
  63.         f.write(header + '\n')

  64.         for i in range(n_ply):
  65.             ver = ver_lst[i]
  66.             for j in range(n_vertex):
  67.                 x, y, z = ver[:, j]
  68.                 if reverse:
  69.                     f.write(f'{x:.2f} {height - y:.2f} {z:.2f}\n')
  70.                 else:
  71.                     f.write(f'{x:.2f} {y:.2f} {z:.2f}\n')

  72.         for i in range(n_ply):
  73.             offset = i * n_vertex
  74.             for j in range(n_face):
  75.                 idx1, idx2, idx3 = tri[j]  # m x 3
  76.                 if reverse:
  77.                     f.write(f'3 {idx3 + offset} {idx2 + offset} {idx1 + offset}\n')
  78.                 else:
  79.                     f.write(f'3 {idx1 + offset} {idx2 + offset} {idx3 + offset}\n')

  80.     print(f'Dump tp {wfp}')


  81. def get_colors(img, ver):
  82.     h, w, _ = img.shape
  83.     ver[0, :] = np.minimum(np.maximum(ver[0, :], 0), w - 1)  # x
  84.     ver[1, :] = np.minimum(np.maximum(ver[1, :], 0), h - 1)  # y
  85.     ind = np.round(ver).astype(np.int32)
  86.     colors = img[ind[1, :], ind[0, :], :] / 255.  # n x 3

  87.     return colors.copy()


  88. def ser_to_obj_single(img, ver_lst, tri, height, wfp):
  89.     suffix = get_suffix(wfp)
  90.     uv_coords = g_uv_coords
  91.     n_face = tri.shape[0]
  92.     for i, ver in enumerate(ver_lst):
  93.         colors = get_colors(img, ver)

  94.         n_vertex = ver.shape[1]

  95.         wfp_new = wfp.replace(suffix, f'_{i + 1}{suffix}')


  96.         with open(wfp_new, 'w') as f:
  97.             for i in range(n_vertex):
  98.                 x, y, z = ver[:, i]
  99.                 f.write(
  100.                     f'v {x:.2f} {height - y:.2f} {z:.2f} {colors[i, 2]:.2f} {colors[i, 1]:.2f} {colors[i, 0]:.2f}\n')
  101.             for i in range(n_vertex):
  102.                 x, y = uv_coords[:, i]
  103.                 f.write(
  104.                     f'vt {x:.2f} {height - y:.2f} {z:.2f}\n')
  105.             for i in range(n_face):
  106.                 idx1, idx2, idx3 = tri[i]  # m x 3
  107.                 f.write(f'f {idx3 + 1} {idx2 + 1} {idx1 + 1}\n')

  108.         print(f'Dump tp {wfp_new}')


  109. def ser_to_obj_multiple(img, ver_lst, tri, height, wfp):
  110.     n_obj = len(ver_lst)  # count obj

  111.     if n_obj <= 0:
  112.         return
  113.     uv_coords = g_uv_coords
  114.     print(uv_coords)
  115.     n_vertex = ver_lst[0].shape[1]
  116.     n_face = tri.shape[0]

  117.     with open(wfp, 'w') as f:
  118.         for i in range(n_obj):
  119.             ver = ver_lst[i]
  120.             colors = get_colors(img, ver)
  121.             print(ver)

  122.             for j in range(n_vertex):
  123.                 x, y, z = ver[:, j]
  124.                 f.write(
  125.                     f'v {x:.2f} {height - y:.2f} {z:.2f} {colors[j, 2]:.2f} {colors[j, 1]:.2f} {colors[j, 0]:.2f}\n')

  126.         for i in range(n_obj):
  127.             ver = ver_lst[i]
  128.            

  129.             for j in range(n_vertex):
  130.                 x, y = uv_coords[j]
  131.                 f.write(
  132.                     f'vt {x:.6f} {y:.6f}\n')

  133.         for i in range(n_obj):
  134.             offset = i * n_vertex
  135.             for j in range(n_face):
  136.                 idx1, idx2, idx3 = tri[j]  # m x 3
  137.                 f.write(f'f {idx3 + 1 + offset}/{idx3 + 1 + offset} {idx2 + 1 + offset}/{idx2 + 1 + offset} {idx1 + 1 + offset}/{idx1 + 1 + offset}\n')

  138.     print(f'Dump tp {wfp}')


  139. ser_to_ply = ser_to_ply_multiple  # ser_to_ply_single
  140. ser_to_obj = ser_to_obj_multiple  # ser_to_obj_multiple
复制代码
回复

使用道具 举报

2254

主题

2764

帖子

9644

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
9644
 楼主| 发表于 2023-3-21 17:26:48 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|starfluidga

GMT+8, 2025-3-9 12:25 , Processed in 0.018146 second(s), 21 queries .

Made by Liga 星鸿阁

Copyright © 2020-2048, LigaStudio.

快速回复 返回顶部 返回列表