コード例 #1
0
 public override void TrackPostures(ReplaySkeletonData skeleton)
 {
     if (LearningMachine.Match(skeleton.Joints.ToListOfVector2(), Epsilon, MinimalScore, MinimalSize))
     {
         RaisePostureDetected(postureName);
     }
 }
コード例 #2
0
        public void AddTemplate(ReplaySkeletonData skeleton)
        {
            RecordedPath recordedPath = new RecordedPath(skeleton.Joints.Count);

            recordedPath.Points.AddRange(skeleton.Joints.ToListOfVector2());

            LearningMachine.AddPath(recordedPath);
        }
コード例 #3
0
        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();
        }
コード例 #4
0
    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;
    }
コード例 #5
0
ファイル: ReplayKinectModel.cs プロジェクト: kurtcz/CS247
        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
            });
        }
コード例 #6
0
 public abstract void TrackPostures(ReplaySkeletonData skeleton);