diff --git a/tracker.py b/tracker.py index f0588c2..26f8305 100644 --- a/tracker.py +++ b/tracker.py @@ -783,8 +783,10 @@ class Tracker(): face_info.translation = np.array([0.0, 0.0, 0.0], np.float32) return False, np.zeros(4), np.zeros(3), 99999., pts_3d, lms else: - face_info.rotation = np.transpose(face_info.rotation) - face_info.translation = np.transpose(face_info.translation) + # OpenCV returns (3,1); flatten so [0]/[1]/[2] are scalars for UDP packing + # and 1D .dot() math does not broadcast to (1,3). + face_info.rotation = np.asarray(face_info.rotation, dtype=np.float32).reshape(3) + face_info.translation = np.asarray(face_info.translation, dtype=np.float32).reshape(3) rmat, _ = cv2.Rodrigues(rotation) inverse_rotation = np.linalg.inv(rmat) @@ -833,7 +835,7 @@ class Tracker(): reference = rmat.dot(pt) reference = reference + face_info.translation reference = self.camera.dot(reference) - depth = reference[2] + depth = float(reference[2]) pt_3d = np.array([lms[66+i][0] * depth, lms[66+i][1] * depth, depth], np.float32) pt_3d = self.inverse_camera.dot(pt_3d) pt_3d = pt_3d - face_info.translation