void UpdateFaceLandmark(ILandmarkController landmark, MRFaceLandmark landmarkType) { // TODO: Investigate why we get calls to OnMatchLoss continuously after tracking loss if (m_AssignedFace == null) { return; } if (m_FallbackLandmarkPoses == null) { m_FallbackLandmarkPoses = MARSFallbackFaceLandmarks.instance.GetFallbackFaceLandmarkPoses(); } Pose pose; if (m_AssignedFaceLandmarkPoses == null || !m_AssignedFaceLandmarkPoses.TryGetValue(landmarkType, out pose)) { pose = m_AssignedFace.pose.ApplyOffsetTo(m_FallbackLandmarkPoses[landmarkType]); } var landmarkPose = landmark.output as LandmarkOutputPose; if (landmarkPose != null) { landmarkPose.currentPose = this.ApplyOffsetToPose(pose); } }
public static FaceTrackingRecording Create(SignalTrack faceEventsTrack, int maxFaceCount, MRFaceLandmark[] landmarkEnumValues, MRFaceExpression[] expressionEnumValues) { var recording = CreateInstance <FaceTrackingRecording>(); recording.m_SignalTrack = faceEventsTrack; recording.m_MaxFaceCount = maxFaceCount; var landmarkEnumValuesCopy = new MRFaceLandmark[landmarkEnumValues.Length]; landmarkEnumValues.CopyTo(landmarkEnumValuesCopy, 0); recording.m_LandmarkEnumValues = landmarkEnumValuesCopy; var expressionEnumValuesCopy = new MRFaceExpression[expressionEnumValues.Length]; expressionEnumValues.CopyTo(expressionEnumValuesCopy, 0); recording.m_ExpressionEnumValues = expressionEnumValuesCopy; return(recording); }