Files
2022-09-30 21:57:07 +00:00

140 lines
5.2 KiB
Python

import os
from socket import close
import sys
import tqdm
import math
import time
import random
import shutil
import collections
import argparse
import threading
import numpy as np
import scipy as sp
import trimesh as tm
import cmapy as cm
import cv2
import plotly.express as ex
import plotly.graph_objects as go
def m2uv_array(m2uv):
result = np.zeros((14475, 2), dtype=np.int32)
for k, v in m2uv.items():
if len(v) == 2:
result[k] = list(v)
elif len(v) == 1:
x = v.pop()
result[k] = [x, x]
else:
assert False
return result
if __name__ == '__main__':
F = np.load("custom_utils/smpl_faces.npy")
uv_map = np.load('custom_utils/stretched_uv_map_3.npy')
m2uv = np.load('custom_utils/m2uv.npy', allow_pickle=True).item()
uv_mask = np.load('custom_utils/mask_256x512.npy')
left = [10602, 14090, 10601, 14299, 10623, 14102, 8739, 13152, 8738, 14292, 10737, 14244, 10738, 14288, 10736, 14243, 8728, 13149, 8730, 13982, 10419, 14241, 8721, 13147, 8723, 14239, 8717, 13145, 8716, 14237, 8711, 13143, 8710, 14235, 10734, 14283, 10729, 14226, 10381, 13948, 10383, 14225, 10725, 14222, 8620, 13107, 8622, 14305, 10761, 14293, 10732, 14233, 10720, 14214, 10721, 14217, 7114]
right = list(reversed([12418, 7113, 12415, 7112, 12434, 7125, 12494, 7155, 12506, 4964, 11308, 4963, 12423, 7118, 12426, 6752, 12149, 6751, 12427, 7122, 12484, 7127, 12436, 5054, 11344, 5056, 12438, 5060, 11346, 5062, 12440, 5067, 11348, 5066, 12442, 6788, 12183, 5074, 11350, 5072, 12444, 7129, 12489, 7131, 12445, 7130, 12493, 5082, 11353, 5084, 12303, 7009, 12500, 6987, 12291, 6989]))
corners = np.array([[0,0],[0,1],[2,0],[2,1]])
# left_orig = []
# for l in left:
# left_orig.append(list(m2uv[l])[0])
# left_orig.append(list(m2uv[l])[1])
# ex.scatter(x=np.concatenate((uv_map[left_orig, 0], corners[:,0]), axis=-1), y=np.concatenate((uv_map[left_orig, 1], corners[:,1]), axis=-1)).show()
# left_1 = [[0,0],[0,1],[2,0],[2,1]]
# right_1 = [[0,0],[0,1],[2,0],[2,1]]
# left_2 = [[0,0],[0,1],[2,0],[2,1]]
# right_2 = [[0,0],[0,1],[2,0],[2,1]]
left_1 = []
right_1 = []
left_2 = []
right_2 = []
for l in left:
print(list(m2uv[l])[0])
if uv_map[list(m2uv[l])[0], 0] < 1:
left_1.append(list(m2uv[l])[0])
else:
left_2.append(list(m2uv[l])[0])
if uv_map[list(m2uv[l])[1], 0] < 1:
left_1.append(list(m2uv[l])[1])
else:
left_2.append(list(m2uv[l])[1])
left_1 = np.array(left_1)[:56]
left_2 = np.array(left_2)[:56]
# ex.scatter(x=uv_map[:, 0], y=uv_map[:, 1]).show()
for r in right:
print(list(m2uv[r])[0])
if uv_map[list(m2uv[r])[0], 0] < 1:
right_1.append(list(m2uv[r])[0])
else:
right_2.append(list(m2uv[r])[0])
if uv_map[list(m2uv[r])[1], 0] < 1:
right_1.append(list(m2uv[r])[1])
else:
right_2.append(list(m2uv[r])[1])
right_1 = np.array(right_1)
right_2 = np.array(right_2)
c = np.ones((60, 3), dtype=np.int32) * 50
c[5, :] = 200
# ex.scatter(x=np.concatenate((uv_map[left_1, 0], corners[:,0]), axis=-1), y=np.concatenate((uv_map[left_1, 1], corners[:,1]), axis=-1), color=c[:,0]).show()
# ex.scatter(x=np.concatenate((uv_map[right_1, 0], corners[:,0]), axis=-1), y=np.concatenate((uv_map[right_1, 1], corners[:,1]), axis=-1), color=c[:,0]).show()
# # ex.scatter(x=uv_map[right_1, 0], y=uv_map[right_1, 1], color=c[:,0]).show()
# ex.scatter(x=np.concatenate((uv_map[left_2, 0], corners[:,0]), axis=-1), y=np.concatenate((uv_map[left_2, 1], corners[:,1]), axis=-1), color=c[:,0]).show()
# ex.scatter(x=np.concatenate((uv_map[right_2, 0], corners[:,0]), axis=-1), y=np.concatenate((uv_map[right_2, 1], corners[:,1]), axis=-1), color=c[:,0]).show()
# # ex.scatter(x=uv_map[left_2, 0], y=uv_map[left_2, 1]).show()
# # ex.scatter(x=uv_map[right_2, 0], y=uv_map[right_2, 1]).show()
# new_pairs_1 = np.concatenate((left_1, right_1), axis=-1)
# new_pairs_2 = np.concatenate((left_2, right_2), axis=-1)
# ex.scatter(x=uv_map[new_pairs_1, 0], y=uv_map[new_pairs_1, 1]).show()
# ex.scatter(x=uv_map[new_pairs_2, 0], y=uv_map[new_pairs_2, 1]).show()
for i, l in enumerate(left[:56]):
m2uv[l] = {left_2[i], right_2[i]}
for i, r in enumerate(right):
m2uv[r] = {left_1[i], right_1[i]}
m2uv[left[-1]] = {7131} #7133
p = uv_map[7133, :]
closest = None
min_dist = 10000
for i in range(uv_map.shape[0]):
dist = np.sqrt((p[0] - uv_map[i, 0])**2 + (p[1] - uv_map[i, 1]))
if dist < min_dist and i != 7133:
min_dist = dist
closest = i
mesh_coord = None
for key in m2uv.keys():
if len(list(m2uv[key])) == 2:
continue
if list(m2uv[key])[0] == closest:
mesh_coord = key
assert m2uv[mesh_coord] == { closest }
m2uv[mesh_coord] = { closest, 7133 }
np.save('custom_utils/m2uv_skirt.npy', m2uv)
# m2uv = m2uv_array(m2uv)
# uv_counter = np.zeros((uv_map.shape[0]))
# uv_counter[m2uv[:, 0]] = 1
# uv_counter[m2uv[:, 1]] += 1
print()