public override void TrackPostures(ReplaySkeletonData skeleton) { if (LearningMachine.Match(skeleton.Joints.ToListOfVector2(), Epsilon, MinimalScore, MinimalSize)) { RaisePostureDetected(postureName); } }
public void AddTemplate(ReplaySkeletonData skeleton) { RecordedPath recordedPath = new RecordedPath(skeleton.Joints.Count); recordedPath.Points.AddRange(skeleton.Joints.ToListOfVector2()); LearningMachine.AddPath(recordedPath); }
public override void TrackPostures(ReplaySkeletonData skeleton) { if (skeleton.TrackingState != SkeletonTrackingState.Tracked) { return; } Vector3?headPosition = null; Vector3?leftHandPosition = null; Vector3?rightHandPosition = null; foreach (Joint joint in skeleton.Joints) { if (joint.Position.W < 0.8f || joint.TrackingState != JointTrackingState.Tracked) { continue; } switch (joint.ID) { case JointID.Head: headPosition = joint.Position.ToVector3(); break; case JointID.HandLeft: leftHandPosition = joint.Position.ToVector3(); break; case JointID.HandRight: rightHandPosition = joint.Position.ToVector3(); break; } } // HandsJoined if (CheckHandsJoined(rightHandPosition, leftHandPosition)) { return; } // LeftHandOverHead if (CheckHandOverHead(headPosition, leftHandPosition)) { RaisePostureDetected("LeftHandOverHead"); return; } // RightHandOverHead if (CheckHandOverHead(headPosition, rightHandPosition)) { RaisePostureDetected("RightHandOverHead"); return; } // LeftHello if (CheckHello(headPosition, leftHandPosition)) { RaisePostureDetected("LeftHello"); return; } // RightHello if (CheckHello(headPosition, rightHandPosition)) { RaisePostureDetected("RightHello"); return; } Reset(); }
public void TrackPostures(ReplaySkeletonData skeleton) { if (skeleton.TrackingState != SkeletonTrackingState.Tracked) return; Vector3? headPosition = null; Vector3? leftHandPosition = null; Vector3? rightHandPosition = null; foreach (Joint joint in skeleton.Joints) { if (joint.Position.W < 0.8f || joint.TrackingState != JointTrackingState.Tracked) continue; switch (joint.ID) { case JointID.Head: headPosition = joint.Position.ToVector3(); break; case JointID.HandLeft: leftHandPosition = joint.Position.ToVector3(); break; case JointID.HandRight: rightHandPosition = joint.Position.ToVector3(); break; } } // HandsJoined if (CheckHandsJoined(rightHandPosition, leftHandPosition)) return; // LeftHandOverHead if (CheckHandOverHead(headPosition, leftHandPosition)) { RaisePostureDetected(Posture.LeftHandOverHead); return; } // RightHandOverHead if (CheckHandOverHead(headPosition, rightHandPosition)) { RaisePostureDetected(Posture.RightHandOverHead); return; } // LeftHello if (CheckHello(headPosition, leftHandPosition)) { RaisePostureDetected(Posture.LeftHello); return; } // RightHello if (CheckHello(headPosition, rightHandPosition)) { RaisePostureDetected(Posture.RightHello); return; } previousPosture = Posture.None; accumulator = 0; }
void SkeletonFrameReady(object sender, ReplaySkeletonFrameReadyEventArgs e) { ReplaySkeletonData skeleton = e.SkeletonFrame.Skeletons[0]; // Retrieve the tracked skeleton foreach (var s in e.SkeletonFrame.Skeletons) { if (s.TrackingState == SkeletonTrackingState.Tracked) { skeleton = s; break; } } Joint leftHandUnscaled = new Joint(); Joint rightHandUnscaled = new Joint(); Vector3 skeletonPosition = new Vector3(skeleton.Position.X, skeleton.Position.Y, skeleton.Position.Z); barycenterHelper.Add(skeletonPosition, skeleton.TrackingID); IsStable = barycenterHelper.IsStable(skeleton.TrackingID); for (int i = 0; i < skeleton.Joints.Count; i++) { switch (skeleton.Joints.ElementAt(i).ID) { case (JointID.Head): Head = GetScaledPosition(skeleton.Joints.ElementAt(i)); break; case (JointID.HandLeft): HandLeft = GetScaledPosition(skeleton.Joints.ElementAt(i)); leftHandUnscaled = skeleton.Joints.ElementAt(i); break; case (JointID.HandRight): HandRight = GetScaledPosition(skeleton.Joints.ElementAt(i)); rightHandUnscaled = skeleton.Joints.ElementAt(i); break; case (JointID.ShoulderCenter): ShoulderCenter = GetScaledPosition(skeleton.Joints.ElementAt(i)); break; case (JointID.ShoulderRight): ShoulderRight = GetScaledPosition(skeleton.Joints.ElementAt(i)); break; case (JointID.ShoulderLeft): ShoulderLeft = GetScaledPosition(skeleton.Joints.ElementAt(i)); break; case (JointID.AnkleLeft): AnkleLeft = GetScaledPosition(skeleton.Joints.ElementAt(i)); break; case (JointID.AnkleRight): AnkleRight = GetScaledPosition(skeleton.Joints.ElementAt(i)); break; case (JointID.FootRight): FootRight = GetScaledPosition(skeleton.Joints.ElementAt(i)); break; case (JointID.FootLeft): FootLeft = GetScaledPosition(skeleton.Joints.ElementAt(i)); break; case (JointID.WristLeft): WristLeft = GetScaledPosition(skeleton.Joints.ElementAt(i)); break; case (JointID.WristRight): WristRight = GetScaledPosition(skeleton.Joints.ElementAt(i)); break; case (JointID.KneeRight): KneeRight = GetScaledPosition(skeleton.Joints.ElementAt(i)); break; case (JointID.KneeLeft): KneeLeft = GetScaledPosition(skeleton.Joints.ElementAt(i)); break; case (JointID.ElbowLeft): ElbowLeft = GetScaledPosition(skeleton.Joints.ElementAt(i)); break; case (JointID.ElbowRight): ElbowRight = GetScaledPosition(skeleton.Joints.ElementAt(i)); break; case (JointID.HipCenter): HipCenter = GetScaledPosition(skeleton.Joints.ElementAt(i)); break; } } RaiseSkeletonUpdate(new SkeletonEventArgs() { LeftHandPosition = leftHandUnscaled.Position, RightHandPosition = rightHandUnscaled.Position }); }
public abstract void TrackPostures(ReplaySkeletonData skeleton);