-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathutils.py
83 lines (69 loc) · 2.37 KB
/
utils.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
import os
import cv2
import numpy as np
from plyfile import PlyData, PlyElement
ITEM2FORLDER = {
"image": "images",
"masked_image": "masked_images",
"mask": "masks",
"uv": "uvs_256",
"scan": "scans",
"lmk_2d": "lmks_2d",
"lmk_3d": "lmks_3d",
"audio": "audios",
}
ITEM2EXT = {
"image": ".png",
"masked_image": ".png",
"mask": ".png",
"uv": ".png",
"scan": ".ply",
"lmk_2d": ".npy",
"lmk_3d": ".npy",
"audio": ".wav",
}
def directory(path):
if not os.path.exists(path):
try:
os.makedirs(path)
except FileExistsError as e:
print(path + " exists. (multiprocess conflict)")
def vislmks(filename, lmks_2d, img_h, img_w, bg_img=None):
if bg_img is None:
bg_img = np.zeros((img_h, img_w, 3))
# img_h, img_w = bg_img.shape[:2]
bg_img[lmks_2d[:, 1].astype(np.int64), lmks_2d[:, 0].astype(np.int64), :] = 255.0
cv2.imwrite(filename, bg_img)
def write_obj(filepath, verts, tris=None, log=True):
"""将mesh顶点与三角面片存储为.obj文件,方便查看
Args:
verts: Vx3, vertices coordinates
tris: n_facex3, faces consisting of vertices id
"""
fw = open(filepath, "w")
# vertices
for vert in verts:
fw.write(f"v {vert[0]} {vert[1]} {vert[2]}\n")
if not tris is None:
for tri in tris:
fw.write(f"f {tri[0]} {tri[1]} {tri[2]}\n")
fw.close()
if log:
print(f"mesh has been saved in {filepath}.")
def write_ply(scan, outpath):
vertex = np.empty(len(scan["vertex"]), dtype=[("x", "f4"), ("y", "f4"), ("z", "f4")])
for i in range(len(scan["vertex"])):
vertex[i] = np.array(
[(scan["vertex"][i, 0], scan["vertex"][i, 1], scan["vertex"][i, 2])],
dtype=[("x", "f4"), ("y", "f4"), ("z", "f4")],
)
triangles = scan["vertex_indices"]
face = np.empty(
len(triangles), dtype=[("vertex_indices", "i4", (3,)), ("red", "u1"), ("green", "u1"), ("blue", "u1")]
)
for i in range(len(triangles)):
face[i] = np.array(
[([triangles[i, 0], triangles[i, 1], triangles[i, 2]], 255, 255, 255)],
dtype=[("vertex_indices", "i4", (3,)), ("red", "u1"), ("green", "u1"), ("blue", "u1")],
)
PlyData([PlyElement.describe(vertex, "vertex"), PlyElement.describe(face, "face")], text=True).write(outpath)