offline_stores_try_on / SMPL /projection2screen.py
Ali Mohsin
feat: Add virtual try-on system components including DensePose, SMPL, and pix2pixHD models, rendering, and utilities.
5db43ff
import numpy as np
import glm
def projection2screencoord(v,view,projection,height,width,hw=False):
view = view.transpose()
projection = projection.transpose()
transform = projection @ view
point = np.array([v[0], v[1], v[2], 1.0], dtype=v.dtype)
projected_point = transform @ np.expand_dims(point, 1)
#print(projection)
projected_point /= projected_point[3]
x, y = projected_point[0], projected_point[1]
# print('---------')
# print(x, y)
#print(x)
id_x = ((x + 1) / 2) * width
id_y = ((1 - y) / 2) * height
#print(id_x.shape)
if not hw:
return np.array([id_x[0], id_y[0]], v.dtype)
else:
return np.array([id_y[0], id_x[0]], v.dtype)
if __name__ == '__main__':
width=600
height=800
view = glm.mat4(1.0)
projection = glm.perspective(np.pi / 3, width / height, 0.1, 1000.0)
v=np.array([1/np.sqrt(3),-1/np.sqrt(3),-1],np.float32)
print(projection2screencoord(v,np.array(view.to_list()), np.array(projection.to_list()), height, width,True))