Merge branch 'master' of github.com:emilianavt/OpenSeeFace
# Conflicts: # tracker.py
This commit is contained in:
commit
adbf3a4bed
1 changed files with 32 additions and 15 deletions
47
tracker.py
47
tracker.py
|
|
@ -614,8 +614,19 @@ class Tracker():
|
||||||
self.scan_every = scan_every
|
self.scan_every = scan_every
|
||||||
self.bbox_growth = bbox_growth
|
self.bbox_growth = bbox_growth
|
||||||
self.silent = silent
|
self.silent = silent
|
||||||
|
|
||||||
self.res = 224.
|
self.res = 224.
|
||||||
|
if model_type < 0:
|
||||||
|
self.res = 56.
|
||||||
self.res_i = int(self.res)
|
self.res_i = int(self.res)
|
||||||
|
self.out_res = 27.
|
||||||
|
if model_type < 0:
|
||||||
|
self.out_res = 13.
|
||||||
|
self.out_res_i = int(self.out_res) + 1
|
||||||
|
self.logit_factor = 16.
|
||||||
|
if model_type < 0:
|
||||||
|
self.logit_factor = 8.
|
||||||
|
|
||||||
self.no_gaze = no_gaze
|
self.no_gaze = no_gaze
|
||||||
self.debug_gaze = False
|
self.debug_gaze = False
|
||||||
self.max_feature_updates = max_feature_updates
|
self.max_feature_updates = max_feature_updates
|
||||||
|
|
@ -676,7 +687,17 @@ class Tracker():
|
||||||
|
|
||||||
rmat, _ = cv2.Rodrigues(rotation)
|
rmat, _ = cv2.Rodrigues(rotation)
|
||||||
inverse_rotation = np.linalg.inv(rmat)
|
inverse_rotation = np.linalg.inv(rmat)
|
||||||
pnp_error = 0.0
|
t_reference = face_info.face_3d.dot(rmat.transpose())
|
||||||
|
t_reference = t_reference + face_info.translation
|
||||||
|
t_reference = t_reference.dot(self.camera.transpose())
|
||||||
|
t_depth = t_reference[:, 2]
|
||||||
|
t_depth[t_depth == 0] = 0.000001
|
||||||
|
t_depth_e = np.expand_dims(t_depth[:],1)
|
||||||
|
t_reference = t_reference[:] / t_depth_e
|
||||||
|
pts_3d[0:66] = np.stack([lms[0:66,0], lms[0:66,1], np.ones((66,))], 1) * t_depth_e[0:66]
|
||||||
|
pts_3d[0:66] = (pts_3d[0:66].dot(self.inverse_camera.transpose()) - face_info.translation).dot(inverse_rotation.transpose())
|
||||||
|
pnp_error = np.power(lms[0:17,0:2] - t_reference[0:17,0:2], 2).sum()
|
||||||
|
pnp_error += np.power(lms[30,0:2] - t_reference[30,0:2], 2).sum()
|
||||||
for i, pt in enumerate(face_info.face_3d):
|
for i, pt in enumerate(face_info.face_3d):
|
||||||
if i == 68:
|
if i == 68:
|
||||||
# Right eyeball
|
# Right eyeball
|
||||||
|
|
@ -705,20 +726,16 @@ class Tracker():
|
||||||
d2 = np.linalg.norm(lms[i,0:2] - lms[45,0:2])
|
d2 = np.linalg.norm(lms[i,0:2] - lms[45,0:2])
|
||||||
d = d1 + d2
|
d = d1 + d2
|
||||||
pt = (pts_3d[42] * d1 + pts_3d[45] * d2) / d
|
pt = (pts_3d[42] * d1 + pts_3d[45] * d2) / d
|
||||||
reference = rmat.dot(pt)
|
if i == 66 or i == 67:
|
||||||
reference = reference + face_info.translation
|
reference = rmat.dot(pt)
|
||||||
reference = self.camera.dot(reference)
|
reference = reference + face_info.translation
|
||||||
depth = reference[2]
|
reference = self.camera.dot(reference)
|
||||||
if i < 17 or i == 30:
|
depth = reference[2]
|
||||||
reference = reference / depth
|
pt_3d = np.array([lms[i][0] * depth, lms[i][1] * depth, depth], np.float32)
|
||||||
e1 = lms[i][0] - reference[0]
|
pt_3d = self.inverse_camera.dot(pt_3d)
|
||||||
e2 = lms[i][1] - reference[1]
|
pt_3d = pt_3d - face_info.translation
|
||||||
pnp_error += e1*e1 + e2*e2
|
pt_3d = inverse_rotation.dot(pt_3d)
|
||||||
pt_3d = np.array([lms[i][0] * depth, lms[i][1] * depth, depth], np.float32)
|
pts_3d[i,:] = pt_3d[:]
|
||||||
pt_3d = self.inverse_camera.dot(pt_3d)
|
|
||||||
pt_3d = pt_3d - face_info.translation
|
|
||||||
pt_3d = inverse_rotation.dot(pt_3d)
|
|
||||||
pts_3d[i,:] = pt_3d[:]
|
|
||||||
|
|
||||||
pnp_error = np.sqrt(pnp_error / (2.0 * image_pts.shape[0]))
|
pnp_error = np.sqrt(pnp_error / (2.0 * image_pts.shape[0]))
|
||||||
if pnp_error > 300:
|
if pnp_error > 300:
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue