void kinectRuntime_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            SkeletonFrame skeletonFrame = e.SkeletonFrame;

            foreach (SkeletonData data in skeletonFrame.Skeletons)
            {
                if (data.TrackingState != SkeletonTrackingState.Tracked)
                    continue;

                barycenterHelper.Add(data.Position.ToVector3(),data.TrackingID);
                if (!barycenterHelper.IsStable(data.TrackingID))
                    continue;

                foreach (Joint joint in data.Joints)
                {
                    if (joint.Position.W < 0.8f || joint.TrackingState != JointTrackingState.Tracked)
                        continue;

                    if (joint.ID == JointID.HandRight)
                    {
                        rightHandGestureRecognizer.Add(joint.Position, kinectRuntime.SkeletonEngine);
                        Trace.WriteLine(Gesture.Content = "HandRight.Add");
                    }
                }

                // ポーズの検出
                postureRecognizer.TrackPostures(data);
            }

            // スケルトンの描画
            skeletonDisplayManager.Draw(e.SkeletonFrame);

            labelPose.Content = "Pose: " + postureRecognizer.CurrentPosture.ToString();
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void runtime_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            SkeletonFrame skeletonSet = e.SkeletonFrame;

            SkeletonData data = (from s in skeletonSet.Skeletons
                                 where s.TrackingState == SkeletonTrackingState.Tracked
                                 select s).FirstOrDefault();

            SetEllipsePosition(head, data.Joints[JointID.Head]);
            SetEllipsePosition(leftHand, data.Joints[JointID.HandLeft]);
            SetEllipsePosition(rightHand, data.Joints[JointID.HandRight]);

            // draw joints
            Joint headjoint = data.Joints[JointID.Head];

            Joint leftShoulderJoint = data.Joints[JointID.ShoulderLeft];
            Joint centerShoulderJoint = data.Joints[JointID.ShoulderCenter];
            Joint rightShoulderJoint = data.Joints[JointID.ShoulderRight];

            Joint spineJoint = data.Joints[JointID.Spine];

            Joint leftWristJoint = data.Joints[JointID.WristLeft];
            Joint rightWristJoint = data.Joints[JointID.WristRight];

            Joint leftHandJoint = data.Joints[JointID.HandLeft];
            Joint rightHandJoint = data.Joints[JointID.HandRight];

            // draw skeleton
        }
        void nui_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            SkeletonFrame allSkeletons = e.SkeletonFrame;

            //get the first tracked skeleton
            SkeletonData skeleton = (from s in allSkeletons.Skeletons
                                     where s.TrackingState == SkeletonTrackingState.Tracked
                                     select s).FirstOrDefault();
            if (skeleton != null)
            {
                this._skel = skeleton;
                Joint head = skeleton.Joints[JointID.Head];
                HumanSkeleton hs = new HumanSkeleton(skeleton.Joints);
                NaoSkeleton ns = new NaoSkeleton(hs);
                UpdateTextBoxes(ns, hs);
                controller.update(ns);

                SetLineAngle(RightArmTopDown, Util.radToDeg(hs.RightShoulderYaw));
                SetLineAngle(LeftArmTopDown, Util.radToDeg(hs.LeftShoulderYaw));
                SetLineAngle(RightArmFront, Util.radToDeg(-hs.RightShoulderPitch) + 90);
                SetLineAngle(LeftArmFront, Util.radToDeg(hs.LeftShoulderPitch) - 90);
                SetLineAngle(RightArm, Util.radToDeg(-hs.RightShoulderRoll) + 90);
                SetLineAngle(LeftArm, Util.radToDeg(hs.LeftShoulderRoll) - 90);
            }
        }
Exemple #4
0
        public void nui_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            if (!IsRecording) return;

            lock (RecordStream)
            {
                SkeletonFrame skeletonFrame = e.SkeletonFrame;
                int iSkeleton = 0;

                foreach (SkeletonData data in skeletonFrame.Skeletons)
                {
                    if (SkeletonTrackingState.Tracked == data.TrackingState)
                    {
                        //Recording for longer than a day will cause the timer to roll over.  Who would record 24+ hours of Kinect data anyways?
                        TimeSpan elapsedTime = DateTime.Now - StartTime;
                        RecordStream.Write(elapsedTime.Hours.ToString() + ":" + elapsedTime.Minutes.ToString() + ":" + elapsedTime.Seconds.ToString() + ":" + elapsedTime.Milliseconds.ToString() + ",");
                        foreach (Joint joint in data.Joints)
                        {
                            RecordStream.Write(joint.ID.ToString() + "," + (joint.Position.X * 1000).ToString() + "," + (joint.Position.Y * 1000) + "," + (joint.Position.Z * 1000)+",");
                        }
                        RecordStream.WriteLine("");
                     }
                    iSkeleton++;
                } // for each skeleton
            }
        }
        void xtion_SkeletonFrameReady( object sender, SkeletonFrameReadyEventArgs e )
        {
            this.Dispatcher.BeginInvoke( DispatcherPriority.Background, new Action( () =>
            {
                canvas1.Children.Clear();

                foreach ( var u in e.Users ) {
                    if ( !e.Skeleton.IsTracking( u ) ) {
                        continue;
                    }

                    foreach ( SkeletonJoint s in Enum.GetValues( typeof( SkeletonJoint ) ) ) {
                        if ( !e.Skeleton.IsJointAvailable( s ) || !e.Skeleton.IsJointActive( s ) ) {
                            continue;
                        }

                        var joint = e.Skeleton.GetSkeletonJoint( u, s );
                        var point = e.DepthGenerator.ConvertRealWorldToProjective( joint.Position.Position );
                        point  = point.ScaleTo( e.DepthGenerator, 320, 240 );

                        const int dimeter = 10;
                        const int r = dimeter / 2;
                        canvas1.Children.Add( new Ellipse()
                        {
                            Fill = Brushes.Red,
                            Margin = new Thickness( point.X - r, point.Y - r, point.X + r, point.Y + r ),
                            Height = dimeter,
                            Width = dimeter,
                        } );
                    }
                }
            } ) );
        }
 private void kinectRuntime_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
 {
     if (e.SkeletonFrame == null)
         return;
     if (!e.SkeletonFrame.Skeletons.Any(s => s.TrackingState != SkeletonTrackingState.NotTracked))
         return;
     ProcessFrame(e.SkeletonFrame);
 }
        private void KinectRuntime_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            SkeletonFrame allSkeletons = e.SkeletonFrame;

            // Get the first tracked skeleton.
            skeleton.SkeletonData = (from s in allSkeletons.Skeletons
                                     where s.TrackingState == SkeletonTrackingState.Tracked
                                     select s).FirstOrDefault();
        }
        void runtime_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            var skeleton = e.SkeletonFrame.Skeletons.Where(s => s.TrackingState == SkeletonTrackingState.Tracked).FirstOrDefault();

            if (skeleton != null && this.SkeletonUpdated != null)
            {
                this.SkeletonUpdated(this,
                    new SkeletonUpdatedEventArgs() { HandRightJoint = skeleton.Joints[JointID.HandRight] });
            }
        }
Exemple #9
0
        void kinectRuntime_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            if (recorder != null)
                recorder.Record(e.SkeletonFrame);

            if (e.SkeletonFrame.Skeletons.Where(s => s.TrackingState != SkeletonTrackingState.NotTracked).Count() == 0)
                return;

            ProcessFrame(e.SkeletonFrame);
        }
        public void kinectSensor_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            Console.WriteLine("Hey, listen");
            SkeletonFrame skeletonFrame = e.SkeletonFrame;
            Boolean player1 = true;
            foreach (SkeletonData data in skeletonFrame.Skeletons)
            {
                if (data.TrackingState == SkeletonTrackingState.Tracked)
                    Console.WriteLine("Im watching you");
                {
                    if (player1)
                    {

                        foreach (Joint joint in data.Joints)
                        {
                            if (joint.ID == JointID.HandLeft)
                            {
                                player1LeftHand = joint.Position.ToVector2();
                            }
                            else if (joint.ID == JointID.ElbowLeft)
                            {
                                player1LeftElbow = joint.Position.ToVector2();
                            }
                        }

                        player1Theta = (float)Math.Atan(((player1LeftHand.Y - player1LeftElbow.Y) / (player1LeftHand.X - player1LeftElbow.X)));
                        player1Theta = (player1Theta * 180) / (float)Math.PI;
                        Console.WriteLine(player1Theta + "Is my angle");
                        thisGameIsAwesome.screenManager.input.myArmAngle = player1Theta;

                    }
                    else
                    {

                        foreach (Joint joint in data.Joints)
                        {
                            if (joint.ID == JointID.HandRight)
                            {
                                player2RightHand = joint.Position.ToVector2();
                            }
                            else if (joint.ID == JointID.ElbowRight)
                            {
                                player2RightElbow = joint.Position.ToVector2();
                            }
                        }

                        player2Theta = (float)Math.Atan(((player2RightHand.Y - player2RightElbow.Y) / (player2RightHand.X - player2RightElbow.X)));
                    }
                }
                //player1 = !player1;
                return;
            }
        }
 private void kinectSensor_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
 {
     foreach (SkeletonData s in e.SkeletonFrame.Skeletons)
     {
         if (s.TrackingState == SkeletonTrackingState.Tracked)
         {
             resolution = new Vector2(640, 480);
             skeleton = s;
             rightHandJoint = skeleton.Joints[JointID.HandRight];
             position = new Vector2((((0.5f * rightHandJoint.Position.X) + 0.5f) * (resolution.X)), (((-0.5f * rightHandJoint.Position.Y) + 0.5f) * (resolution.Y)));
         }
     }
 }
        private void KinectRuntime_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            SkeletonFrame allSkeletons = e.SkeletonFrame;

            SkeletonData skeleton = (from s in allSkeletons.Skeletons
                                     where s.TrackingState == SkeletonTrackingState.Tracked
                                     select s).FirstOrDefault();

            if (skeleton != null)
            {
                DrawSkeleton(skeleton);
            }
        }
        void Nui_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            canvas.Children.Clear();

            foreach (SkeletonData user in e.SkeletonFrame.Skeletons)
            {
                if (user.TrackingState == SkeletonTrackingState.Tracked)
                {
                    foreach (Joint joint in user.Joints)
                    {
                        DrawPoint(joint, Colors.Blue);
                    }
                }
            }
        }
        void nui_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            
            SkeletonFrame allSkeletons = e.SkeletonFrame;

            //get the first tracked skeleton
            SkeletonData skeleton = (from s in allSkeletons.Skeletons
                                     where s.TrackingState == SkeletonTrackingState.Tracked
                                     select s).FirstOrDefault();

            if(skeleton != null)
            {
                gestureController.processSkeletonFrame(skeleton);
            }
        }
        /// <summary>
        /// the event handler for the skeleton frame ready event 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void nui_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            SkeletonFrame allskeletons = e.SkeletonFrame;
            SkeletonData skeleton = (from s in allskeletons.Skeletons
                                     where s.TrackingState == SkeletonTrackingState.Tracked
                                     select s).FirstOrDefault();

            setpositionellipse(ellipse1,skeleton.Joints[JointID.Head]);
            setpositionellipse(ellipse2, skeleton.Joints[JointID.HandLeft]);
            setpositionellipse(ellipse3, skeleton.Joints[JointID.HandRight]);
            setpositionellipse(ellipse4, skeleton.Joints[JointID.FootLeft]);
            setpositionellipse(ellipse5, skeleton.Joints[JointID.FootRight]);

            getCoordinates_Playsound(skeleton.Joints[JointID.HandLeft]);
        }
        void runtime_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            var skeleton =
                           e.SkeletonFrame.Skeletons
                           .Where(s => s.TrackingState == SkeletonTrackingState.Tracked)
                           .FirstOrDefault();

            if (skeleton == null)
            {
                return;
            }

            var position = skeleton.Joints[JointID.HandRight].Position;
            if (this.SkeletonUpdated != null)
            {
                this.SkeletonUpdated(this, new SkeletonEventArgs() { RightHandPosition = position });
            }
        }
 void nui_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
 {
     foreach (SkeletonData data in e.SkeletonFrame.Skeletons)
     {
         Gesture.updateJoints(data);
         foreach (Gesture gesture in gestures)
         {
             if (gesture.timeDelayHasPassed())    //check for time delay.
             {
                 if (gesture.isDoingGesture())   //check to see if the gesture is being performed.
                 {
                     //hey, the gesture is being performed. Go do some thing with it in your program...
                     MessageBox.Show(gesture.getDescription());  //In this example I just print the Gesture's description.
                     gesture.updateGesture();
                 }
             }
         }
     }
 }
Exemple #18
0
		void runtime_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
		{
			foreach (SkeletonData data in e.SkeletonFrame.Skeletons)
			{
				if (data.TrackingState == SkeletonTrackingState.Tracked)
				{
					Joint joint = data.Joints[JointID.HandLeft];
					
					if (joint.TrackingState != JointTrackingState.Tracked)
						break;
					
					int handY = (int) joint.ScaleTo(kGameWidth, kGameHeight - kPaddleHeight, 0.6f, 0.4f).Position.Y;
					handY = Math.Max(handY, 0);
					handY = Math.Min(handY, kGameHeight - kPaddleHeight);
					ourPaddleRect.Y = handY;
					
					break;
				}
			}
		}
Exemple #19
0
        void nui_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            SkeletonFrame allSkeletons = e.SkeletonFrame;

            //get the first tracked skeleton
            SkeletonData skeleton = (from s in allSkeletons.Skeletons
                                     where s.TrackingState == SkeletonTrackingState.Tracked
                                     select s).FirstOrDefault();

            if(skeleton != null)
            {
                //set positions on our joints of interest (already defined as Ellipse objects in the xaml)
                SetEllipsePosition(headEllipse, skeleton.Joints[JointID.Head]);
                SetEllipsePosition(leftEllipse, skeleton.Joints[JointID.HandLeft]);
                SetEllipsePosition(rightEllipse, skeleton.Joints[JointID.HandRight]);
                SetEllipsePosition(shoulderCenter, skeleton.Joints[JointID.ShoulderCenter]);
                SetEllipsePosition(shoulderRight, skeleton.Joints[JointID.ShoulderRight]);
                SetEllipsePosition(shoulderLeft, skeleton.Joints[JointID.ShoulderLeft]);
                SetEllipsePosition(ankleRight, skeleton.Joints[JointID.AnkleRight]);
                SetEllipsePosition(ankleLeft, skeleton.Joints[JointID.AnkleLeft]);
                SetEllipsePosition(footLeft, skeleton.Joints[JointID.FootLeft]);
                SetEllipsePosition(footRight, skeleton.Joints[JointID.FootRight]);
                SetEllipsePosition(wristLeft, skeleton.Joints[JointID.WristLeft]);
                SetEllipsePosition(wristRight, skeleton.Joints[JointID.WristRight]);
                SetEllipsePosition(elbowLeft, skeleton.Joints[JointID.ElbowLeft]);
                SetEllipsePosition(elbowRight, skeleton.Joints[JointID.ElbowRight]);
                SetEllipsePosition(ankleLeft, skeleton.Joints[JointID.AnkleLeft]);
                SetEllipsePosition(footLeft, skeleton.Joints[JointID.FootLeft]);
                SetEllipsePosition(footRight, skeleton.Joints[JointID.FootRight]);
                SetEllipsePosition(wristLeft, skeleton.Joints[JointID.WristLeft]);
                SetEllipsePosition(wristRight, skeleton.Joints[JointID.WristRight]);
                SetEllipsePosition(kneeLeft, skeleton.Joints[JointID.KneeLeft]);
                SetEllipsePosition(kneeRight, skeleton.Joints[JointID.KneeRight]);
                SetEllipsePosition(hipCenter, skeleton.Joints[JointID.HipCenter]);
                currentController.processSkeletonFrame(skeleton, targets);

            }
        }
        void runtime_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            var skeleton = e.SkeletonFrame.Skeletons
                .Where(s => s.TrackingState == SkeletonTrackingState.Tracked)
                .FirstOrDefault();

            if (skeleton != null)
            {
                if (this.SkeletonUpdated != null)
                {
                    this.swipe.AddSwipePoint(skeleton.Joints[JointID.HandRight].Position);

                    this.SkeletonUpdated(this,
                        new SkeletonUpdatedEventArgs()
                        {
                            HandRight = skeleton.Joints[JointID.HandRight],
                            HipRight = skeleton.Joints[JointID.HipRight],
                            ShoulderRight = skeleton.Joints[JointID.ShoulderRight],
                            Head = skeleton.Joints[JointID.Head]
                        });
                }
            }
        }
        void SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            SkeletonFrame allSkeletons = e.SkeletonFrame;
            if (isRecorder)
            {
                recorder.Record(allSkeletons);
            }

            // Get the first tracked skeleton
            SkeletonData skeleton = (from s in allSkeletons.Skeletons
                                     where s.TrackingState == SkeletonTrackingState.Tracked
                                     select s).FirstOrDefault();

            if (skeleton != null)
            {
                // Set positions on our joints of interest

                Head = GetScaledPosition(skeleton.Joints[JointID.Head]);
                HandLeft = GetScaledPosition(skeleton.Joints[JointID.HandLeft]);
                HandRight = GetScaledPosition(skeleton.Joints[JointID.HandRight]);
                ShoulderCenter = GetScaledPosition(skeleton.Joints[JointID.ShoulderCenter]);
                ShoulderRight = GetScaledPosition(skeleton.Joints[JointID.ShoulderRight]);
                ShoulderLeft = GetScaledPosition(skeleton.Joints[JointID.ShoulderLeft]);
                AnkleRight = GetScaledPosition(skeleton.Joints[JointID.AnkleRight]);
                AnkleLeft = GetScaledPosition(skeleton.Joints[JointID.AnkleLeft]);
                FootLeft = GetScaledPosition(skeleton.Joints[JointID.FootLeft]);
                FootRight = GetScaledPosition(skeleton.Joints[JointID.FootRight]);
                WristLeft = GetScaledPosition(skeleton.Joints[JointID.WristLeft]);
                WristRight = GetScaledPosition(skeleton.Joints[JointID.WristRight]);
                ElbowLeft = GetScaledPosition(skeleton.Joints[JointID.ElbowLeft]);
                ElbowRight = GetScaledPosition(skeleton.Joints[JointID.ElbowRight]);
                KneeLeft = GetScaledPosition(skeleton.Joints[JointID.KneeLeft]);
                KneeRight = GetScaledPosition(skeleton.Joints[JointID.KneeRight]);
                HipCenter = GetScaledPosition(skeleton.Joints[JointID.HipCenter]);
            }
        }
        void nui_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            foreach (SkeletonData data in e.SkeletonFrame.Skeletons)
            {
                Gesture.updateJoints(data);
                foreach (TelemetryGesture gesture in gestures)
                {
                    if (gesture.timeDelayHasPassed())    //check for time delay.
                    {
                        if (gesture.isDoingGesture())   //check to see if the gesture is being performed.
                        {

                            short val = gesture.getAdditionalData();
                            if (val == TelemetryGesture.NO_ONE_CARES)
                            {
                                GlobalStuff.SendData(gesture.getID());
                            }
                            else
                            {
                                GlobalStuff.SendData(gesture.getID(), val);
                            }
                            gesture.updateGesture();
                            const string line = "\n=======================================";
                            richTextBox1.Text += line;
                            richTextBox1.Text += "Performing:\t" + gesture.getDescription();
                            richTextBox1.Text += "\nSending Command:\t" + gesture.getID();
                            richTextBox1.Text += "\nRobot Functionality:\t " + gesture.getRobotDescription();
                            if (gesture.getAdditionalData() != TelemetryGesture.NO_ONE_CARES)
                            {
                                richTextBox1.Text += "\nAdditional Robot Data:\t" + gesture.getAdditionalData();
                            }
                        }
                    }
                }
            }
        }
Exemple #23
0
 void sensor_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
 {
     Skeleton[] skeletons = new Skeleton[1]; //Declaramos el array del esqueleto
     //Abre un objeto SkeletonFrame, que contiene un marco de datos de esqueleto.
     using (SkeletonFrame skeletonframe = e.OpenSkeletonFrame())
     {
         if (skeletonframe != null)//Compruebe si el marco está abierto
         {
             skeletons = new Skeleton[skeletonframe.SkeletonArrayLength];
             //Copia los datos del esqueleto a una serie de esqueletos, donde cada esqueleto contiene una colección de las articulaciones.
             skeletonframe.CopySkeletonDataTo(skeletons);
             //dibujar el esqueleto basado en el modo predeterminado (de pie), "sentado"
             if (miKinect.SkeletonStream.TrackingMode == SkeletonTrackingMode.Default)
             {
                 DrawStandingSkeletons(skeletons);
             }
             else if (miKinect.SkeletonStream.TrackingMode == SkeletonTrackingMode.Seated)
             {
                 //Dibuja un esqueleto sentado con 10 articulaciones
                 DrawStandingSkeletons(skeletons);
             }
         }
     }
 }
Exemple #24
0
        private void kinect_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            using (SkeletonFrame skelFrame = e.OpenSkeletonFrame())
            {
                if (skelFrame != null && masterSettings.kinectOptionsList.Count > kinectID && (masterKinectSettings.mergeSkeletons || masterKinectSettings.sendRawSkeletons))
                {
                    DateTime   now       = DateTime.UtcNow;
                    Skeleton[] skeletons = new Skeleton[skelFrame.SkeletonArrayLength];
                    skelFrame.CopySkeletonDataTo(skeletons);


                    EigenWrapper.Matrix predAccel = new EigenWrapper.Matrix(3, 1);
                    predAccel[2, 0] = 1;
                    if (accelFilterStarted)
                    {
                        predAccel = accelerationFilter.PredictAndDiscard(0);
                    }

                    if (interactStream != null)
                    {
                        Vector4 filteredAccel = new Vector4();
                        filteredAccel.W = 0;
                        filteredAccel.X = (float)predAccel[0, 0];
                        filteredAccel.Y = (float)predAccel[1, 0];
                        filteredAccel.Z = (float)predAccel[2, 0];
                        interactStream.ProcessSkeleton(skeletons, filteredAccel, skelFrame.Timestamp);

                        //System.Diagnostics.Trace.WriteLine("[" + filteredAccel.X + ", " + filteredAccel.Y + ", " + filteredAccel.Z + "]");
                    }

                    //Generate the transformation matrix for the skeletons
                    double               kinectYaw                  = masterKinectSettings.kinectYaw;
                    Point3D              kinectPosition             = masterKinectSettings.kinectPosition;
                    Matrix3D             gravityBasedKinectRotation = findRotation(new Vector3D(predAccel[0, 0], predAccel[1, 0], predAccel[2, 0]), new Vector3D(0, -1, 0));
                    AxisAngleRotation3D  yawRotation                = new AxisAngleRotation3D(new Vector3D(0, 1, 0), -kinectYaw);
                    RotateTransform3D    tempYawTrans               = new RotateTransform3D(yawRotation);
                    TranslateTransform3D transTrans                 = new TranslateTransform3D((Vector3D)kinectPosition);
                    Matrix3D             rotationOnlyMatrix         = Matrix3D.Multiply(tempYawTrans.Value, gravityBasedKinectRotation);
                    Matrix3D             masterMatrix               = Matrix3D.Multiply(rotationOnlyMatrix, transTrans.Value);
                    skeletonTransformation = masterMatrix;
                    skeletonRotQuaternion  = KinectBase.HelperMethods.MatrixToQuaternion(rotationOnlyMatrix);

                    //Convert from Kinect v1 skeletons to KVR skeletons
                    KinectBase.KinectSkeleton[] kvrSkeletons = new KinectBase.KinectSkeleton[skeletons.Length];
                    for (int i = 0; i < kvrSkeletons.Length; i++)
                    {
                        //Set the tracking ID numbers for the hand grab data
                        int grabID = -1;
                        for (int j = 0; j < skeletonHandGrabData.Count; j++)
                        {
                            if (skeletonHandGrabData[j].skeletonTrackingID == skeletons[i].TrackingId)
                            {
                                grabID = j;
                                break;
                            }
                        }
                        if (grabID < 0)
                        {
                            skeletonHandGrabData.Add(new HandGrabInfo(skeletons[i].TrackingId));
                            grabID = skeletonHandGrabData.Count - 1;
                        }

                        kvrSkeletons[i]          = new KinectBase.KinectSkeleton();
                        kvrSkeletons[i].Position = new Point3D(skeletons[i].Position.X, skeletons[i].Position.Y, skeletons[i].Position.Z);
                        kvrSkeletons[i].SkeletonTrackingState = convertTrackingState(skeletons[i].TrackingState);
                        kvrSkeletons[i].TrackingId            = skeletons[i].TrackingId;
                        //kvrSkeletons[i].utcSampleTime = DateTime.UtcNow;
                        kvrSkeletons[i].sourceKinectID = kinectID;

                        for (int j = 0; j < skeletons[i].Joints.Count; j++)
                        {
                            KinectBase.Joint newJoint = new KinectBase.Joint();
                            newJoint.Confidence = KinectBase.TrackingConfidence.Unknown; //The Kinect 1 doesn't support the confidence property
                            newJoint.JointType  = convertJointType(skeletons[i].Joints[(JointType)j].JointType);
                            Vector4 tempQuat = skeletons[i].BoneOrientations[(JointType)j].AbsoluteRotation.Quaternion;
                            newJoint.Orientation.orientationQuaternion = new Quaternion(tempQuat.X, tempQuat.Y, tempQuat.Z, tempQuat.W);
                            Matrix4 tempMat = skeletons[i].BoneOrientations[(JointType)j].AbsoluteRotation.Matrix;
                            newJoint.Orientation.orientationMatrix = new Matrix3D(tempMat.M11, tempMat.M12, tempMat.M13, tempMat.M14,
                                                                                  tempMat.M21, tempMat.M22, tempMat.M23, tempMat.M24,
                                                                                  tempMat.M31, tempMat.M32, tempMat.M33, tempMat.M34,
                                                                                  tempMat.M41, tempMat.M42, tempMat.M43, tempMat.M44);
                            SkeletonPoint tempPos = skeletons[i].Joints[(JointType)j].Position;
                            newJoint.Position           = new Point3D(tempPos.X, tempPos.Y, tempPos.Z);
                            newJoint.TrackingState      = convertTrackingState(skeletons[i].Joints[(JointType)j].TrackingState);
                            newJoint.spatialErrorStdDev = getJointError(newJoint.Position, newJoint.TrackingState);
                            newJoint.utcTime            = now;
                            kvrSkeletons[i].skeleton[newJoint.JointType] = newJoint; //Skeleton doesn't need to be initialized because it is done in the KinectSkeleton constructor
                        }

                        //Get the hand states from the hand grab data array
                        kvrSkeletons[i].rightHandClosed = skeletonHandGrabData[grabID].rightHandClosed;
                        kvrSkeletons[i].leftHandClosed  = skeletonHandGrabData[grabID].leftHandClosed;
                    }

                    //Add the skeleton data to the event handler and throw the event
                    KinectBase.SkeletonEventArgs skelE = new KinectBase.SkeletonEventArgs();
                    skelE.skeletons = kvrSkeletons;
                    skelE.kinectID  = kinectID;

                    OnSkeletonChanged(skelE);
                }
            }
        }
        void nui_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            SkeletonFrame skeletonFrame = e.SkeletonFrame;
            int           iSkeleton     = 0;

            Brush[] brushes = new Brush[6];
            brushes[0] = new SolidColorBrush(Color.FromRgb(255, 0, 0));
            brushes[1] = new SolidColorBrush(Color.FromRgb(0, 255, 0));
            brushes[2] = new SolidColorBrush(Color.FromRgb(64, 255, 255));
            brushes[3] = new SolidColorBrush(Color.FromRgb(255, 255, 64));
            brushes[4] = new SolidColorBrush(Color.FromRgb(255, 64, 255));
            brushes[5] = new SolidColorBrush(Color.FromRgb(128, 128, 255));

            skeleton.Children.Clear();
            foreach (SkeletonData data in skeletonFrame.Skeletons)
            {
                if (SkeletonTrackingState.Tracked == data.TrackingState)
                {
                    // Draw bones
                    Brush brush = brushes[iSkeleton % brushes.Length];
                    skeleton.Children.Add(getBodySegment(data.Joints, brush, JointID.HipCenter, JointID.Spine, JointID.ShoulderCenter, JointID.Head));
                    skeleton.Children.Add(getBodySegment(data.Joints, brush, JointID.ShoulderCenter, JointID.ShoulderLeft, JointID.ElbowLeft, JointID.WristLeft, JointID.HandLeft));
                    skeleton.Children.Add(getBodySegment(data.Joints, brush, JointID.ShoulderCenter, JointID.ShoulderRight, JointID.ElbowRight, JointID.WristRight, JointID.HandRight));
                    skeleton.Children.Add(getBodySegment(data.Joints, brush, JointID.HipCenter, JointID.HipLeft, JointID.KneeLeft, JointID.AnkleLeft, JointID.FootLeft));
                    skeleton.Children.Add(getBodySegment(data.Joints, brush, JointID.HipCenter, JointID.HipRight, JointID.KneeRight, JointID.AnkleRight, JointID.FootRight));

                    // Draw joints
                    //motion = 0;
                    foreach (Joint joint in data.Joints)
                    {
                        Point jointPos  = getDisplayPosition(joint);
                        Line  jointLine = new Line();
                        jointLine.X1              = jointPos.X - 3;
                        jointLine.X2              = jointLine.X1 + 6;
                        jointLine.Y1              = jointLine.Y2 = jointPos.Y;
                        jointLine.Stroke          = jointColors[joint.ID];
                        jointLine.StrokeThickness = 6;
                        skeleton.Children.Add(jointLine);

                        // TEAM 16_2011
                        // POPULATE DATA
                        // Here populate programming variables with the data processed
                        if (joint.ID == JointID.WristRight)
                        {
                            r_wrist.x = joint.Position.X;
                            r_wrist.y = joint.Position.Y;
                            r_wrist.z = joint.Position.Z;
                        }
                        if (joint.ID == JointID.ElbowRight)
                        {
                            r_elbow.x = joint.Position.X;
                            r_elbow.y = joint.Position.Y;
                            r_elbow.z = joint.Position.Z;
                        }
                        if (joint.ID == JointID.ShoulderRight)
                        {
                            r_shldr.x = joint.Position.X;
                            r_shldr.y = joint.Position.Y;
                            r_shldr.z = joint.Position.Z;
                        }

                        if (joint.ID == JointID.HandRight)
                        {
                            r_hand.x = joint.Position.X;
                            r_hand.y = joint.Position.Y;
                            r_hand.z = joint.Position.Z;
                        }
                        if (joint.ID == JointID.ShoulderLeft)
                        {
                            l_shldr.x = joint.Position.X;
                            l_shldr.y = joint.Position.Y;
                            l_shldr.z = joint.Position.Z;
                        }
                        if (joint.ID == JointID.WristLeft)
                        {
                            l_wrist.x = joint.Position.X;
                            l_wrist.y = joint.Position.Y;
                            l_wrist.z = joint.Position.Z;
                        }
                        if (joint.ID == JointID.ElbowLeft)
                        {
                            l_elbow.x = joint.Position.X;
                            l_elbow.y = joint.Position.Y;
                            l_elbow.z = joint.Position.Z;
                        }
                        if (joint.ID == JointID.HandLeft)
                        {
                            l_hand.x = joint.Position.X;
                            l_hand.y = joint.Position.Y;
                            l_hand.z = joint.Position.Z;
                        }
                        if (joint.ID == JointID.ShoulderCenter)
                        {
                            shldr_center.x = joint.Position.X;
                            shldr_center.y = joint.Position.Y;
                            shldr_center.z = joint.Position.Z;
                        }

                        if (joint.ID == JointID.HipCenter)
                        {
                            hip_center.x = joint.Position.X;
                            hip_center.y = joint.Position.Y;
                            hip_center.z = joint.Position.Z;
                        }
                    }
                }
                iSkeleton++;
            } // for each skeleton
        }
Exemple #26
0
        void _sensor_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            using (SkeletonFrame skeletonFrame = e.OpenSkeletonFrame())
            {
                if (skeletonFrame != null)
                {
                    this.Dispatcher.Invoke(new Action(delegate()
                    {
                        _skeletonRenderer = new SkeletonRenderer(skeletonImage, e, _sensor);
                    }));

                    #region WalkingInPlace Update
                    Skeleton [] wipSkeletons = new Skeleton[skeletonFrame.SkeletonArrayLength];
                    skeletonFrame.CopySkeletonDataTo(wipSkeletons);

                    if (wipSkeletons.Length != 0)
                    {
                        Skeleton wipUser          = null;
                        float    AbsoluteDistance = 50000f;
                        foreach (Skeleton wipSkel in wipSkeletons)
                        {
                            if (wipSkel.TrackingState == SkeletonTrackingState.Tracked)
                            {
                                float skelDistance = wipSkel.Joints[JointType.HipCenter].Position.Z;
                                if (skelDistance < AbsoluteDistance)
                                {
                                    AbsoluteDistance = skelDistance;
                                    wipUser          = wipSkel;
                                }
                            }
                        }

                        if (wipUser != null)
                        {
                            float head      = wipUser.Joints[JointType.Head].Position.Y;
                            float rightHand = wipUser.Joints[JointType.HandRight].Position.Y;
                            float leftHand  = wipUser.Joints[JointType.HandLeft].Position.Y;


                            Joint leftHip  = wipUser.Joints[JointType.HipLeft];
                            Joint rightHip = wipUser.Joints[JointType.HipRight];

                            float leftHipAngle  = (float)Math.Atan(leftHip.Position.X / leftHip.Position.Z);
                            float rightHipAngle = (float)Math.Atan(rightHip.Position.X / rightHip.Position.Z);
                            float newAngle      = (leftHipAngle + rightHipAngle) / 2;



                            if (WipActiveState == 0 && leftHand > head && rightHand > head)
                            {
                                WipActiveState = 1;
                                WipActive      = !WipActive;
                                _wip.setUserHeight((float)userHeight(wipUser));
                            }
                            if (WipActiveState == 1 && leftHand < head && rightHand < head)
                            {
                                WipActiveState = 0;
                            }


                            if (_lastUserID > 0)
                            {
                                if (_lastUserID != wipUser.TrackingId)
                                {
                                    WipActiveState = 0;
                                    WipActive      = false;
                                }
                            }
                            _lastUserID = wipUser.TrackingId;



                            float footLeft  = wipUser.Joints[JointType.FootLeft].Position.Y;
                            float footRight = wipUser.Joints[JointType.FootRight].Position.Y;

                            float ankleLeft  = wipUser.Joints[JointType.AnkleLeft].Position.Y;
                            float ankleRight = wipUser.Joints[JointType.AnkleRight].Position.Y;

                            float kneeLeft  = wipUser.Joints[JointType.KneeLeft].Position.Y;
                            float kneeRight = wipUser.Joints[JointType.KneeRight].Position.Y;



                            Vector4 hipCenterOrientationQuaternionAbsolute     = wipUser.BoneOrientations[JointType.HipCenter].AbsoluteRotation.Quaternion;
                            Vector4 hipCenterOrientationQuaternionHierarchical = wipUser.BoneOrientations[JointType.HipCenter].HierarchicalRotation.Quaternion;
                            float[] hipCenterOrientationEulerAbsolute          = QuaternionToEuler.toEuler(hipCenterOrientationQuaternionAbsolute);
                            float[] hipCenterOrientationEulerHierarchical      = QuaternionToEuler.toEuler(hipCenterOrientationQuaternionHierarchical);

                            Vector4 spineCenterOrientationQuaternionAbsolute     = wipUser.BoneOrientations[JointType.Spine].AbsoluteRotation.Quaternion;
                            Vector4 spineCenterOrientationQuaternionHierarchical = wipUser.BoneOrientations[JointType.Spine].HierarchicalRotation.Quaternion;
                            float[] spineCenterOrientationEulerAbsolute          = QuaternionToEuler.toEuler(spineCenterOrientationQuaternionAbsolute);
                            float[] spineCenterOrientationEulerHierarchical      = QuaternionToEuler.toEuler(spineCenterOrientationQuaternionHierarchical);

                            Vector4 shoulderCenterOrientationQuaternionAbsolute     = wipUser.BoneOrientations[JointType.ShoulderCenter].AbsoluteRotation.Quaternion;
                            Vector4 shoulderCenterOrientationQuaternionHierarchical = wipUser.BoneOrientations[JointType.ShoulderCenter].HierarchicalRotation.Quaternion;
                            float[] shoulderCenterOrientationEulerAbsolute          = QuaternionToEuler.toEuler(shoulderCenterOrientationQuaternionAbsolute);
                            float[] shoulderCenterOrientationEulerHierarchical      = QuaternionToEuler.toEuler(shoulderCenterOrientationQuaternionHierarchical);



                            float rightDiff = 0f;
                            float leftDiff  = 0f;

                            if (kneeLeft > kneeRight)
                            {
                                leftDiff = kneeLeft - kneeRight;
                            }
                            else
                            {
                                rightDiff = kneeRight - kneeLeft;
                            }


                            float _userHeight = (float)userHeight(wipUser);

                            _wip.update(rightDiff, leftDiff, hipCenterOrientationEulerAbsolute[1]);
                            dashboardLeftFootHeight.Text  = "" + Math.Round(leftDiff, 3);
                            dashboardRightFootHeight.Text = "" + Math.Round(rightDiff, 3);
                        }
                    }
                    #endregion
                }
            }
        }
Exemple #27
0
        public override void OnSkeletonFrameReady(
            object sender, SkeletonFrameReadyEventArgs e
            )
        {
            if (!Finished)
            {
                using (SkeletonFrame s = e.OpenSkeletonFrame())
                {
                    if (s != null)
                    {
                        Skeleton[] skels = new Skeleton[s.SkeletonArrayLength];
                        s.CopySkeletonDataTo(skels);

                        foreach (Skeleton data in skels)
                        {
                            if (
                                data.TrackingState == SkeletonTrackingState.Tracked
                                )
                            {
                                Point3d leftHip =
                                    PointFromVector(
                                        data.Joints[JointType.HipLeft].Position, false
                                        );
                                Point3d leftHand =
                                    PointFromVector(
                                        data.Joints[JointType.HandLeft].Position, false
                                        );
                                Point3d rightHand =
                                    PointFromVector(
                                        data.Joints[JointType.HandRight].Position, false
                                        );

                                if (leftHand.Z < leftHip.Z && rightHand.Z < leftHip.Z)
                                {
                                    if (switchm == 0)
                                    {
                                        switchm = 1;
                                    }
                                    else if (switchm == 1)
                                    {
                                        switchm = 0;
                                    }
                                }

                                if (
                                    leftHand.DistanceTo(Point3d.Origin) > 0 &&
                                    rightHand.DistanceTo(Point3d.Origin) > 0 &&
                                    leftHand.DistanceTo(rightHand) < 0.03)
                                {
                                    // Hands are less than 3cm from each other

                                    _drawing  = false;
                                    _resizing = false;
                                    Finished  = true;
                                }
                                else
                                {
                                    // Hands are within 10cm of each other vertically
                                    // and both hands are above the waist, so we resize
                                    // the profile radius

                                    _resizing =
                                        (leftHand.Z > leftHip.Z &&
                                         rightHand.Z > leftHip.Z &&
                                         Math.Abs(leftHand.Z - rightHand.Z) < 0.5);

                                    // If the left hand is below the waist, we draw

                                    _drawing = (leftHand.Z < leftHip.Z);
                                }

                                if (_resizing)
                                {
                                    // If resizing, set some data to help draw
                                    // a sphere where we're resizing

                                    Vector3d vec = (leftHand - rightHand) / 2;
                                    _resizeLocation = rightHand + vec;
                                    _profSide       = vec.Length / (Math.Sqrt(3));
                                }

                                if (_drawing)
                                {
                                    // If we have at least one prior vertex...

                                    if (_vertices.Count > 0)
                                    {
                                        // ... check whether we're a certain distance
                                        // away from the last one before adding it (this
                                        // smooths off the jitters of adding every point)

                                        Point3d lastVert =
                                            _vertices[_vertices.Count - 1];
                                        if (
                                            lastVert.DistanceTo(rightHand) > _profSide * 4
                                            )
                                        {
                                            // Add the new vertex to our list

                                            _vertices.Add(rightHand);
                                        }
                                    }
                                    else
                                    {
                                        // Add the first vertex to our list

                                        _vertices.Add(rightHand);
                                    }
                                }
                                break;
                            }
                        }
                    }
                }
            }
        }
Exemple #28
0
        void sensor_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            using (var skeletonFrame = e.OpenSkeletonFrame())
            {
                if (skeletonFrame == null)
                {
                    return;
                }

                if (skeletons == null ||
                    skeletons.Length != skeletonFrame.SkeletonArrayLength)
                {
                    skeletons = new Skeleton[skeletonFrame.SkeletonArrayLength];
                }

                // decide to identify only one skeleton at a time, choose the closest
                skeletonFrame.CopySkeletonDataTo(skeletons);
                Skeleton closestSkeleton = skeletons.Where(s => s.TrackingState == SkeletonTrackingState.Tracked)
                                           .OrderBy(s => s.Position.Z * Math.Abs(s.Position.X))
                                           .FirstOrDefault();

                if (closestSkeleton == null)
                {
                    return;
                }

                if (closestSkeleton.Joints[JointType.Spine].Position.Z < minVal)
                {
                    textBox1.Text = ("Skeleton Tracking disabled (too near)");
                    closestSkeleton.TrackingState = SkeletonTrackingState.NotTracked;
                }
                else if (closestSkeleton.Joints[JointType.Spine].Position.Z > maxVal)
                {
                    textBox1.Text = ("Skeleton Tracking disabled (too far)");
                    closestSkeleton.TrackingState = SkeletonTrackingState.NotTracked;
                }

                // The points that kinect track

                var head      = closestSkeleton.Joints[JointType.Head];
                var rightHand = closestSkeleton.Joints[JointType.HandRight];
                var leftHand  = closestSkeleton.Joints[JointType.HandLeft];

                var centerShoulder = closestSkeleton.Joints[JointType.ShoulderCenter];
                var leftShoulder   = closestSkeleton.Joints[JointType.ShoulderLeft];
                var rightShoulder  = closestSkeleton.Joints[JointType.ShoulderRight];

                var centerHip = closestSkeleton.Joints[JointType.HipCenter];

                if (head.TrackingState == JointTrackingState.NotTracked ||
                    rightHand.TrackingState == JointTrackingState.NotTracked ||
                    leftHand.TrackingState == JointTrackingState.NotTracked ||
                    centerHip.TrackingState == JointTrackingState.NotTracked ||
                    centerShoulder.TrackingState == JointTrackingState.NotTracked ||
                    leftShoulder.TrackingState == JointTrackingState.NotTracked ||
                    rightShoulder.TrackingState == JointTrackingState.NotTracked)
                {
                    //Don't have a good read on the joints so we cannot process gestures
                    return;
                }

                //SetEllipsePosition is the method to color canvas element

                SetEllipsePosition(ellipseHead, head, false);
                SetEllipsePosition(ellipseLeftHand, leftHand, isBackGestureActive);
                SetEllipsePosition(ellipseRightHand, rightHand, isForwardGestureActive);

                if (isStartGestureActive)
                {
                    SetEllipsePosition(ellipseLeftHand, leftHand, isStartGestureActive);
                    SetEllipsePosition(ellipseRightHand, rightHand, isStartGestureActive);
                }
                else if (isExitGestureActive)
                {
                    SetEllipsePosition(ellipseLeftHand, leftHand, isExitGestureActive);
                    SetEllipsePosition(ellipseRightHand, rightHand, isExitGestureActive);
                }

                ProcessForwardBackGesture(head, rightHand, leftHand, centerShoulder, rightShoulder, leftShoulder, centerHip);
            }
        }
        /// <summary>
        /// Event handler for Kinect sensor's SkeletonFrameReady event
        /// </summary>
        /// <param name="sender">object sending the event</param>
        /// <param name="e">event arguments</param>
        private void SensorSkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            Skeleton[] skeletons = new Skeleton[0];

            using (SkeletonFrame skeletonFrame = e.OpenSkeletonFrame())
            {
                if (skeletonFrame != null)
                {
                    skeletons = new Skeleton[skeletonFrame.SkeletonArrayLength];
                    skeletonFrame.CopySkeletonDataTo(skeletons);

                    Skeleton skel = new Skeleton();

                    if (skeletons.Length != 0)
                    {
                        foreach (Skeleton skele in skeletons)
                        {
                            if (skele.TrackingState == SkeletonTrackingState.Tracked)
                            {
                                skel = skele;
                            }
                        }
                    }

                    if (skel.TrackingState == SkeletonTrackingState.Tracked)
                    {
                        int pos = ejercicio.CompruebaMovimiento(skel);

                        if (pos == 0)
                        {
                            //this.Joints(skel);
                        }
                        else if (pos == 1)
                        {
                            this.borPos1.Background = Brushes.Green;
                            //Brush color = Brushes.Red;
                            //this.Joints(skel, color);
                        }
                        else if (pos == 2)
                        {
                            this.borPos1.Background = Brushes.Purple;
                            this.borPos2.Background = Brushes.Green;
                        }
                        else if (pos == 3)
                        {
                            this.borPos2.Background = Brushes.Purple;
                            this.borPos3.Background = Brushes.Green;
                        }
                        else if (pos == 4)
                        {
                            this.borPos3.Background = Brushes.Purple;
                            this.borPos4.Background = Brushes.Green;
                        }
                        else if (pos == 5)
                        {
                            this.borPos4.Background = Brushes.Purple;
                            this.borPos5.Background = Brushes.Green;
                        }
                        else if (pos == 6)
                        {
                            this.borPos5.Background = Brushes.Purple;
                            this.borPos6.Background = Brushes.Green;
                        }
                        else if (pos == 7)
                        {
                            this.borPos6.Background = Brushes.Purple;
                            this.borPos7.Background = Brushes.Green;
                        }
                        else if (pos == 8)
                        {
                            this.borPos7.Background = Brushes.Purple;
                            this.borPos8.Background = Brushes.Green;
                        }
                        if (pos == 9)
                        {
                            this.borPos1.Background = Brushes.Purple;
                            this.borPos2.Background = Brushes.Purple;
                            this.borPos3.Background = Brushes.Purple;
                            this.borPos4.Background = Brushes.Purple;
                            this.borPos5.Background = Brushes.Purple;
                            this.borPos6.Background = Brushes.Purple;
                            this.borPos7.Background = Brushes.Purple;
                            this.borPos8.Background = Brushes.Purple;
                        }
                        else if (pos == -1)
                        {
                            this.borPos1.Background = Brushes.Red;
                            this.borPos2.Background = Brushes.Red;
                            this.borPos3.Background = Brushes.Red;
                            this.borPos4.Background = Brushes.Red;
                            this.borPos5.Background = Brushes.Red;
                            this.borPos6.Background = Brushes.Red;
                            this.borPos7.Background = Brushes.Red;
                            this.borPos8.Background = Brushes.Red;
                        }
                    }
                }
            }
        }
Exemple #30
0
        void newsensor_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            using (SkeletonFrame skeletonFrame = e.OpenSkeletonFrame())
            {
                if (skeletonFrame != null)
                {
                    if (this.skeletons == null)
                    {
                        this.skeletons = new Skeleton[skeletonFrame.SkeletonArrayLength];
                    }
                    skeletonFrame.CopySkeletonDataTo(this.skeletons);
                    Skeleton skeleton = this.skeletons.Where(s => s.TrackingState == SkeletonTrackingState.Tracked).FirstOrDefault();

                    /*// saving the images captured
                     * RenderTargetBitmap bmp = new RenderTargetBitmap(800, 600, 96, 96, PixelFormats.Pbgra32);
                     *  //bmp.Render(window.image);
                     *
                     *  JpegBitmapEncoder encoder = new JpegBitmapEncoder();
                     *  // create frame from the writable bitmap and add to encoder
                     *
                     *  encoder.Frames.Add(BitmapFrame.Create(bmp));
                     *  string myPhotos = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures);
                     *  string path = skeletonFrame.Timestamp + ".jpg";
                     *  using (FileStream fs = new FileStream(path, FileMode.Create))
                     *  {
                     *      encoder.Save(fs);
                     *      if (fs.Length > 1024)
                     *      {
                     *          fs.Close();
                     *
                     *      }
                     *
                     *  }*/


                    /* if (skeleton != null)
                     * {
                     *   // Calculate height.
                     *   double height = Math.Round(skeleton.Height(), 2);
                     *
                     *   // Draw skeleton joints.
                     *   foreach (JointType joint in Enum.GetValues(typeof(JointType)))
                     *   {
                     *       DrawJoint(skeleton.Joints[joint].ScaleTo(640, 480));
                     *   }
                     *
                     *   // Display height.
                     *   tblHeight.Text = "Height: " + height.ToString() + "m";
                     *
                     *
                     *
                     */

                    /*if (skeleton != null)
                     * {
                     *   // Calculate height.
                     * //  double height = Math.Round(skeleton.Height(), 2);
                     *
                     * }*/

                    /*
                     *
                     * if (skeleton != null)
                     * {
                     *  // DrawingContext drawing;
                     *
                     *  SetEllipsePosition(HipCenter, skeleton.Joints[JointType.HipCenter]);
                     *
                     *  //DrawText(new FormattedText("Hipcenter", CultureInfo.GetCultureInfo("en-us"), FlowDirection.LeftToRight, new Typeface("Verdana"), 12, System.Windows.Media.Brushes.Black), new System.Windows.Point(200, 116));
                     *
                     *  SetEllipsePosition(Spine, skeleton.Joints[JointType.Spine]);
                     *
                     *  SetEllipsePosition(ShoulderCenter, skeleton.Joints[JointType.ShoulderCenter]);
                     *  SetEllipsePosition(Head, skeleton.Joints[JointType.Head]);
                     *  SetEllipsePosition(ShoulderLeft, skeleton.Joints[JointType.ShoulderLeft]);
                     *  SetEllipsePosition(ElbowLeft, skeleton.Joints[JointType.ElbowLeft]);
                     *  SetEllipsePosition(WristLeft, skeleton.Joints[JointType.WristLeft]);
                     *  SetEllipsePosition(HandLeft, skeleton.Joints[JointType.HandLeft]);
                     *  SetEllipsePosition(ShoulderRight, skeleton.Joints[JointType.ShoulderRight]);
                     *  SetEllipsePosition(ElbowRight, skeleton.Joints[JointType.ElbowRight]);
                     *  SetEllipsePosition(WristRight, skeleton.Joints[JointType.WristRight]);
                     *  SetEllipsePosition(HandRight, skeleton.Joints[JointType.HandRight]);
                     *  SetEllipsePosition(HipLeft, skeleton.Joints[JointType.HipLeft]);
                     *  SetEllipsePosition(KneeLeft, skeleton.Joints[JointType.KneeLeft]);
                     *  SetEllipsePosition(AnkleLeft, skeleton.Joints[JointType.AnkleLeft]);
                     *  SetEllipsePosition(FootLeft, skeleton.Joints[JointType.FootLeft]);
                     *  SetEllipsePosition(HipRight, skeleton.Joints[JointType.HipRight]);
                     *  SetEllipsePosition(KneeRight, skeleton.Joints[JointType.KneeRight]);
                     *  SetEllipsePosition(AnkleRight, skeleton.Joints[JointType.AnkleRight]);
                     *  SetEllipsePosition(FootRight, skeleton.Joints[JointType.FootRight]);
                     *
                     *
                     * }
                     */



                    if (skeleton != null)
                    {
                        Joint hipcenter  = skeleton.Joints[JointType.HipCenter];
                        Joint hipright   = skeleton.Joints[JointType.HipRight];
                        Joint kneeright  = skeleton.Joints[JointType.KneeRight];
                        Joint ankleright = skeleton.Joints[JointType.AnkleRight];
                        Joint footright  = skeleton.Joints[JointType.FootRight];
                        Joint hipleft    = skeleton.Joints[JointType.HipLeft];
                        Joint kneeleft   = skeleton.Joints[JointType.KneeLeft];
                        Joint ankleleft  = skeleton.Joints[JointType.AnkleLeft];
                        Joint footleft   = skeleton.Joints[JointType.FootLeft];

                        Time = DateTime.Now;

                        //Joint j2 = skeleton.Joints[JointType.KneeLeft];
                        //writer.Writeline("X Y z");

                        /*
                         *
                         * if (hipcenter.TrackingState == JointTrackingState.Tracked )//|| hipcenter.TrackingState== JointTrackingState.Inferred || hipcenter.TrackingState == JointTrackingState.NotTracked)
                         *
                         *  writer.Write("hipcenter:\t " + hipcenter.Position.X + "\t" + hipcenter.Position.Y + "\t" + hipcenter.Position.Z + "\t ");
                         * else
                         *
                         *
                         *  writer.Write("hipcenter:\t NA \t NA \t NA \t");
                         *
                         * if (hipright.TrackingState == JointTrackingState.Tracked)// || hipright.TrackingState == JointTrackingState.Inferred || hipright.TrackingState==JointTrackingState.NotTracked)
                         *
                         *  writer.Write("hipright:\t " + hipright.Position.X + "\t" + hipright.Position.Y + "\t" + hipright.Position.Z + "\t");
                         * else
                         *
                         *  writer.Write("hipright:\t NA \t NA \t NA \t");
                         *
                         *
                         * if (kneeright.TrackingState == JointTrackingState.Tracked )//|| kneeright.TrackingState==JointTrackingState.Inferred || kneeright.TrackingState == JointTrackingState.NotTracked)
                         *
                         *  writer.Write("kneeright:\t " + kneeright.Position.X + "\t" + kneeright.Position.Y + "\t" + kneeright.Position.Z + "\t");
                         * else
                         *
                         *  writer.Write("kneeright:\t NA \t NA \t NA \t");
                         *
                         *
                         * if (ankleright.TrackingState == JointTrackingState.Tracked )//|| ankleright.TrackingState==JointTrackingState.Inferred || ankleright.TrackingState == JointTrackingState.NotTracked)
                         *
                         *  writer.Write("ankleright:\t " + ankleright.Position.X + "\t" + ankleleft.Position.Y + "\t" + ankleright.Position.Z + "\t");
                         * else
                         *
                         *  writer.Write("ankleright:\t NA \t NA \t NA \t");
                         *
                         *
                         * if (footright.TrackingState == JointTrackingState.Tracked )//|| footright.TrackingState == JointTrackingState.Inferred || footright.TrackingState ==JointTrackingState.NotTracked)
                         *
                         *  writer.Write("footright:\t " + footright.Position.X + "\t" + footright.Position.Y + "\t" + footright.Position.Z + "\t");
                         * else
                         *
                         *  writer.Write("footright:\t NA \t NA \t NA \t");
                         *
                         *
                         *
                         * if (hipleft.TrackingState == JointTrackingState.Tracked )//|| hipleft.TrackingState == JointTrackingState.Inferred || hipright.TrackingState == JointTrackingState.NotTracked)
                         *
                         *  writer.Write("hip left:\t " + hipleft.Position.X + "\t" + hipleft.Position.Y + "\t" + hipleft.Position.Z + "\t");
                         * else
                         *
                         *  writer.Write("hipleft:\t NA \t NA \t NA \t");
                         *
                         *
                         * if (kneeleft.TrackingState == JointTrackingState.Tracked )//|| kneeleft.TrackingState==JointTrackingState.Inferred || kneeleft.TrackingState== JointTrackingState.NotTracked )
                         *
                         *  writer.Write("knee left:\t " + kneeleft.Position.X + "\t" + kneeleft.Position.Y + "\t" + kneeleft.Position.Z + "\t");
                         * else
                         *
                         *  writer.Write("kneeleft:\t NA \t NA \t NA \t ");
                         *
                         * if (ankleleft.TrackingState == JointTrackingState.Tracked )//|| ankleleft.TrackingState == JointTrackingState.Inferred || ankleleft.TrackingState == JointTrackingState.NotTracked)
                         *
                         *  writer.Write("ankleleft:\t " + ankleleft.Position.X + "\t" + ankleleft.Position.Y + "\t" + ankleleft.Position.Z + "\t");
                         * else
                         *
                         *  writer.Write("ankleleft:\t NA \t NA \t NA \t ");
                         *
                         *
                         * if (footleft.TrackingState == JointTrackingState.Tracked)// || footleft.TrackingState == JointTrackingState.Inferred || footleft.TrackingState == JointTrackingState.NotTracked)
                         *
                         *  writer.Write("footleft:\t " + footleft.Position.X + "\t" + footleft.Position.Y + "\t" + footleft.Position.Z + "\t");
                         * else
                         *
                         *  writer.Write("footleft:\t NA \t NA \t NA \t ");
                         *
                         *
                         * writer.WriteLine("TIME:\t" + DateTime.Now + "\t"); */



                        if (hipcenter.TrackingState == JointTrackingState.Tracked)
                        {
                            writer.Write("hipcenter:\t " + hipcenter.Position.X + "\t" + hipcenter.Position.Y + "\t" + hipcenter.Position.Z + "\t ");
                        }
                        else
                        if (hipcenter.TrackingState == JointTrackingState.Inferred)
                        {
                            writer.Write("hipcenter/INF/:\t " + hipcenter.Position.X + "\t" + hipcenter.Position.Y + "\t" + hipcenter.Position.Z + "\t ");
                        }

                        else

                        if (hipcenter.TrackingState == JointTrackingState.NotTracked)
                        {
                            writer.Write("hipcenter/[NT/]:\t " + hipcenter.Position.X + "\t" + hipcenter.Position.Y + "\t" + hipcenter.Position.Z + "\t ");
                        }
                        else
                        {
                            writer.Write("hipcenter/[" + hipcenter.TrackingState + "/]:\t NA \t NA \t NA ");
                        }

                        if (hipright.TrackingState == JointTrackingState.Tracked)
                        {
                            writer.Write("hipright:\t " + hipright.Position.X + "\t" + hipright.Position.Y + "\t" + hipright.Position.Z + "\t ");
                        }
                        else
                        if (hipright.TrackingState == JointTrackingState.Inferred)
                        {
                            writer.Write("hipright/INF/:\t " + hipright.Position.X + "\t" + hipright.Position.Y + "\t" + hipright.Position.Z + "\t ");
                        }

                        else

                        if (hipright.TrackingState == JointTrackingState.NotTracked)
                        {
                            writer.Write("hipright/NT/:\t " + hipright.Position.X + "\t" + hipright.Position.Y + "\t" + hipright.Position.Z + "\t ");
                        }
                        else
                        {
                            writer.Write("hipright/[" + hipright.TrackingState + "/]:\t NA \t NA \t NA ");
                        }

                        if (kneeright.TrackingState == JointTrackingState.Tracked)
                        {
                            writer.Write("kneeright:\t " + kneeright.Position.X + "\t" + kneeright.Position.Y + "\t" + kneeright.Position.Z + "\t ");
                        }
                        else
                        if (kneeright.TrackingState == JointTrackingState.Inferred)
                        {
                            writer.Write("kneeright/INF/:\t " + kneeright.Position.X + "\t" + kneeright.Position.Y + "\t" + kneeright.Position.Z + "\t ");
                        }

                        else

                        if (kneeright.TrackingState == JointTrackingState.NotTracked)
                        {
                            writer.Write("kneeright/NT/:\t " + kneeright.Position.X + "\t" + kneeright.Position.Y + "\t" + kneeright.Position.Z + "\t ");
                        }
                        else
                        {
                            writer.Write("kneeright/[" + kneeright.TrackingState + "/]:\t NA \t NA \t NA ");
                        }

                        if (ankleright.TrackingState == JointTrackingState.Tracked)
                        {
                            writer.Write("ankleright:\t " + ankleright.Position.X + "\t" + ankleright.Position.Y + "\t" + ankleright.Position.Z + "\t ");
                        }
                        else
                        if (ankleright.TrackingState == JointTrackingState.Inferred)
                        {
                            writer.Write("ankleright/INF/:\t " + ankleright.Position.X + "\t" + ankleright.Position.Y + "\t" + ankleright.Position.Z + "\t ");
                        }

                        else

                        if (ankleright.TrackingState == JointTrackingState.NotTracked)
                        {
                            writer.Write("ankleright/NT/:\t " + ankleright.Position.X + "\t" + ankleright.Position.Y + "\t" + ankleright.Position.Z + "\t ");
                        }
                        else
                        {
                            writer.Write("ankleright/[" + ankleright.TrackingState + "/]:\t NA \t NA \t NA ");
                        }


                        if (footright.TrackingState == JointTrackingState.Tracked)
                        {
                            writer.Write("footright:\t " + footright.Position.X + "\t" + footright.Position.Y + "\t" + footright.Position.Z + "\t ");
                        }
                        else
                        if (footright.TrackingState == JointTrackingState.Inferred)
                        {
                            writer.Write("footright/INF/:\t " + footright.Position.X + "\t" + footright.Position.Y + "\t" + footright.Position.Z + "\t ");
                        }

                        else

                        if (footright.TrackingState == JointTrackingState.NotTracked)
                        {
                            writer.Write("footright/NT/:\t " + footright.Position.X + "\t" + footright.Position.Y + "\t" + footright.Position.Z + "\t ");
                        }
                        else
                        {
                            writer.Write("footright/[" + footright.TrackingState + "/]:\t NA \t NA \t NA ");
                        }
/****************************************************************************************************/
                        // for left side
                        if (hipcenter.TrackingState == JointTrackingState.Tracked)
                        {
                            writer.Write("hipcenter:\t " + hipcenter.Position.X + "\t" + hipcenter.Position.Y + "\t" + hipcenter.Position.Z + "\t ");
                        }
                        else
                        if (hipcenter.TrackingState == JointTrackingState.Inferred)
                        {
                            writer.Write("hipcenter/INF/:\t " + hipcenter.Position.X + "\t" + hipcenter.Position.Y + "\t" + hipcenter.Position.Z + "\t ");
                        }

                        else

                        if (hipcenter.TrackingState == JointTrackingState.NotTracked)
                        {
                            writer.Write("hipcenter/[NT/]:\t " + hipcenter.Position.X + "\t" + hipcenter.Position.Y + "\t" + hipcenter.Position.Z + "\t ");
                        }
                        else
                        {
                            writer.Write("hipcenter/[" + hipcenter.TrackingState + "/]:\t NA \t NA \t NA ");
                        }



                        if (hipleft.TrackingState == JointTrackingState.Tracked)
                        {
                            writer.Write("hipleft:\t " + hipleft.Position.X + "\t" + hipleft.Position.Y + "\t" + hipleft.Position.Z + "\t ");
                        }
                        else
                        if (hipleft.TrackingState == JointTrackingState.Inferred)
                        {
                            writer.Write("hipleft/INF/:\t " + hipleft.Position.X + "\t" + hipleft.Position.Y + "\t" + hipleft.Position.Z + "\t ");
                        }

                        else

                        if (hipleft.TrackingState == JointTrackingState.NotTracked)
                        {
                            writer.Write("hipleft/NT/:\t " + hipleft.Position.X + "\t" + hipleft.Position.Y + "\t" + hipleft.Position.Z + "\t ");
                        }
                        else
                        {
                            writer.Write("hipleft/[" + hipleft.TrackingState + "/]:\t NA \t NA \t NA ");
                        }



                        if (kneeleft.TrackingState == JointTrackingState.Tracked)
                        {
                            writer.Write("kneeleft:\t " + kneeleft.Position.X + "\t" + kneeleft.Position.Y + "\t" + kneeleft.Position.Z + "\t ");
                        }
                        else
                        if (kneeleft.TrackingState == JointTrackingState.Inferred)
                        {
                            writer.Write("kneeleft/INF/:\t " + kneeleft.Position.X + "\t" + kneeleft.Position.Y + "\t" + kneeleft.Position.Z + "\t ");
                        }

                        else

                        if (kneeleft.TrackingState == JointTrackingState.NotTracked)
                        {
                            writer.Write("kneeleft/NT/:\t " + kneeleft.Position.X + "\t" + kneeleft.Position.Y + "\t" + kneeleft.Position.Z + "\t ");
                        }
                        else
                        {
                            writer.Write("kneeleft/[" + kneeleft.TrackingState + "/]:\t NA \t NA \t NA ");
                        }


                        if (ankleleft.TrackingState == JointTrackingState.Tracked)
                        {
                            writer.Write("ankleleft:\t " + ankleleft.Position.X + "\t" + ankleleft.Position.Y + "\t" + ankleleft.Position.Z + "\t ");
                        }
                        else
                        if (ankleleft.TrackingState == JointTrackingState.Inferred)
                        {
                            writer.Write("ankleleft/INF/:\t " + ankleleft.Position.X + "\t" + ankleleft.Position.Y + "\t" + ankleleft.Position.Z + "\t ");
                        }

                        else

                        if (ankleleft.TrackingState == JointTrackingState.NotTracked)
                        {
                            writer.Write("ankleleft/NT/:\t " + ankleleft.Position.X + "\t" + ankleleft.Position.Y + "\t" + ankleleft.Position.Z + "\t ");
                        }
                        else
                        {
                            writer.Write("ankleleft/[" + ankleleft.TrackingState + "/]:\t NA \t NA \t NA ");
                        }


                        if (footleft.TrackingState == JointTrackingState.Tracked)
                        {
                            writer.Write("footleft:\t " + footleft.Position.X + "\t" + footleft.Position.Y + "\t" + footleft.Position.Z + "\t ");
                        }
                        else
                        if (footleft.TrackingState == JointTrackingState.Inferred)
                        {
                            writer.Write("footleft/INF/:\t " + footleft.Position.X + "\t" + footleft.Position.Y + "\t" + footleft.Position.Z + "\t ");
                        }

                        else

                        if (footleft.TrackingState == JointTrackingState.NotTracked)
                        {
                            writer.Write("footleft/NT/:\t " + footleft.Position.X + "\t" + footleft.Position.Y + "\t" + footleft.Position.Z + "\t ");
                        }
                        else
                        {
                            writer.Write("footleft/[" + footleft.TrackingState + "/]:\t NA \t NA \t NA ");
                        }


                        /*
                         *
                         * if (hipleft.TrackingState == JointTrackingState.Tracked || hipleft.TrackingState == JointTrackingState.Inferred || hipleft.TrackingState == JointTrackingState.NotTracked)
                         *
                         *  writer.Write("hip left:\t " + hipleft.Position.X + "\t" + hipleft.Position.Y + "\t" + hipleft.Position.Z + "\t");
                         * else
                         *
                         *  writer.Write("hipleft:\t NA \t NA \t NA ");
                         *
                         *
                         * if (kneeleft.TrackingState == JointTrackingState.Tracked || kneeleft.TrackingState == JointTrackingState.Inferred || kneeleft.TrackingState == JointTrackingState.NotTracked)
                         *
                         *  writer.Write("knee left:\t " + kneeleft.Position.X + "\t" + kneeleft.Position.Y + "\t" + kneeleft.Position.Z + "\t");
                         * else
                         *
                         *  writer.Write("kneeleft:\t NA \t NA \t NA ");
                         *
                         * if (ankleleft.TrackingState == JointTrackingState.Tracked || ankleleft.TrackingState == JointTrackingState.Inferred || ankleleft.TrackingState == JointTrackingState.NotTracked)
                         *
                         *  writer.Write("ankleleft:\t " + ankleleft.Position.X + "\t" + ankleleft.Position.Y + "\t" + ankleleft.Position.Z + "\t");
                         * else
                         *
                         *  writer.Write("ankleleft:\t NA \t NA \t NA ");
                         *
                         *
                         * if (footleft.TrackingState == JointTrackingState.Tracked || footleft.TrackingState == JointTrackingState.Inferred || footleft.TrackingState == JointTrackingState.NotTracked)
                         *
                         *  writer.Write("footleft:\t " + footleft.Position.X + "\t" + footleft.Position.Y + "\t" + footleft.Position.Z + "\t");
                         * else
                         *
                         *  writer.Write("footleft:\t NA \t NA \t NA ");*/


                        writer.WriteLine("TIME:\t" + DateTime.Now + "\t");



                        /*
                         * if (hipcenter.TrackingState == JointTrackingState.Tracked
                         *  && hipright.TrackingState == JointTrackingState.Tracked
                         *  && kneeright.TrackingState == JointTrackingState.Tracked
                         *  && ankleright.TrackingState == JointTrackingState.Tracked
                         *  && footright.TrackingState == JointTrackingState.Tracked
                         *  && hipleft.TrackingState == JointTrackingState.Tracked
                         *  && kneeleft.TrackingState == JointTrackingState.Tracked
                         *  && ankleleft.TrackingState == JointTrackingState.Tracked
                         *  && footleft.TrackingState == JointTrackingState.Tracked)*/

                        /*{
                         *
                         *
                         *  //StreamWriter writer = new StreamWriter("myfile.txt", false);
                         *
                         *
                         *  //writer.Write();
                         *
                         *  //Console.WriteLine("The output of X Y Z coordinates");
                         *
                         *
                         *
                         *  writer.WriteLine("hipcenter: " + hipcenter.Position.X + "," + hipcenter.Position.Y + "," + hipcenter.Position.Z + "\t"
                         + "hipright: " + hipright.Position.X + "," + hipright.Position.Y + "," + hipright.Position.Z + "\t"
                         + "kneeright: " + kneeright.Position.X + "," + kneeright.Position.Y + "," + kneeright.Position.Z +"\t"
                         + "ankleright: " + ankleright.Position.X + "," + ankleright.Position.Y + "," + ankleright.Position.Z +"\t"
                         + "footright: " + footright.Position.X + "," + footright.Position.Y + "," + footright.Position.Z + "\t"
                         +"hipleft: " + hipleft.Position.X + "," + hipleft.Position.Y + "," + hipleft.Position.Z +"\t"
                         + "kneeleftleft: " + kneeleft.Position.X + "," + kneeleft.Position.Y + "," + kneeleft.Position.Z + "\t"
                         + "ankleleft: " + ankleleft.Position.X + "," + ankleleft.Position.Y + "," + ankleleft.Position.Z +"\t"
                         + "footleft: " + footleft.Position.X + "," + footleft.Position.Y + "," + footleft.Position.Z +"\t"
                         +"TIME" + DateTime.Now);
                         +  //writer.WriteLine(DateTime.Now);
                         +
                         +
                         +
                         +  //StreamWriter writer = new StreamWriter("myfile.txt");
                         +  // FileStream fs = new FileStream("myfile.txt", FileMode.Create);
                         +  // First, save the standard output.
                         +  //TextWriter tmp = Console.Out;
                         +  //StreamWriter sw = new StreamWriter(fs);
                         +
                         +
                         +  //writer.Close();
                         + }*/
                        //writer.Close();
                    }



                    /*  if (skeleton != null)
                     * {
                     *    Joint j = skeleton.Joints[JointType.KneeLeft];
                     *
                     *    if (j.TrackingState == JointTrackingState.Tracked)
                     *    {
                     *        Console.WriteLine("The output of X Y Z coordinates");
                     *
                     *        Console.WriteLine("Head: X AXIS" + j.Position.X + ",Y AXIS \t " + j.Position.Y + ",Z AXIS\t " + j.Position.Z);
                     *    }
                     * }*/
                }
            }
        }
        /// <summary>
        /// Event handler for Kinect sensor's SkeletonFrameReady event
        /// </summary>
        /// <param name="sender">object sending the event</param>
        /// <param name="e">event arguments</param>
        private void SensorSkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            Skeleton[] skeletons = new Skeleton[0];

            using (SkeletonFrame skeletonFrame = e.OpenSkeletonFrame())
            {
                if (skeletonFrame != null)
                {
                    skeletons = new Skeleton[skeletonFrame.SkeletonArrayLength];
                    skeletonFrame.CopySkeletonDataTo(skeletons);
                }
            }

            using (DrawingContext dc = this.drawingGroup.Open())
            {
                // Draw a transparent background to set the render size
                dc.DrawRectangle(Brushes.Black, null, new Rect(0.0, 0.0, RenderWidth, RenderHeight));

                if (skeletons.Length != 0)
                {
                    foreach (Skeleton skel in skeletons)
                    {
                        RenderClippedEdges(skel, dc);

                        if (skel.TrackingState == SkeletonTrackingState.Tracked)
                        {
                            this.DrawBonesAndJoints(skel, dc);

                            if (skel.Joints[JointType.HandRight].TrackingState == JointTrackingState.Tracked)
                            {
                                jpr = skel.Joints[JointType.HandRight]; //右手
                            }
                            if (skel.Joints[JointType.WristRight].TrackingState == JointTrackingState.Tracked)
                            {
                                jprw = skel.Joints[JointType.WristRight];//右腕关节
                            }
                            if (skel.Joints[JointType.ElbowRight].TrackingState == JointTrackingState.Tracked)
                            {
                                jpre = skel.Joints[JointType.ElbowRight];//右肘关节
                            }
                            if (skel.Joints[JointType.ShoulderRight].TrackingState == JointTrackingState.Tracked)
                            {
                                jprs = skel.Joints[JointType.ShoulderRight];//右肩关节
                            }
                            if (skel.Joints[JointType.ShoulderCenter].TrackingState == JointTrackingState.Tracked)
                            {
                                jpsc = skel.Joints[JointType.ShoulderCenter];//两肩中心
                            }
                            if (skel.Joints[JointType.ShoulderLeft].TrackingState == JointTrackingState.Tracked)
                            {
                                jpls = skel.Joints[JointType.ShoulderLeft];//左肩关节
                            }
                            if (skel.Joints[JointType.ElbowLeft].TrackingState == JointTrackingState.Tracked)
                            {
                                jple = skel.Joints[JointType.ElbowLeft];//左肩关节
                            }
                            if (skel.Joints[JointType.Spine].TrackingState == JointTrackingState.Tracked)
                            {
                                jpspine = skel.Joints[JointType.Spine];//脊柱关节
                            }
                            if (skel.Joints[JointType.Head].TrackingState == JointTrackingState.Tracked)
                            {
                                head = skel.Joints[JointType.Head];//头
                            }
                            if (skel.Joints[JointType.WristLeft].TrackingState == JointTrackingState.Tracked)
                            {
                                jplw = skel.Joints[JointType.WristLeft];//头
                            }
                            rightWristAngle   = CalculateWristAngleForWrist(jpr, jprw, jpre);
                            rightElbowAngle   = CalculateAngleForElbow(jprw, jpre, jprs);
                            leftElbowAngle    = CalculateAngleForElbow(jplw, jple, jpls);
                            rightshouderAngle = CalculateAngleForShouder(jpre, jprs, jpsc, jpspine);
                            waistturnAngle    = CalculateAngleForShouder(jpre, jprs, jpls);
                            leftshouderAngle  = CalculateAngleForShouder(jple, jpls, jpsc, jpspine);
                            rightheaddir      = CalculateAngleForShouder(head, jpsc, jprs);
                            label7.Content    = rightheaddir;
                            if (switchMode)     //swith mode || rightheaddir < 50
                            {
                                //rightWristAngle = AmplitudeLimiterFilter(rightWristAngle, rightWristAngle2);
                                //rightElbowAngle = AmplitudeLimiterFilter(rightElbowAngle, rightElbowAngle2);
                                //rightshouderAngle = AmplitudeLimiterFilter(rightshouderAngle, rightshouderAngle2);
                                //waistturnAngle = AmplitudeLimiterFilter(waistturnAngle, waistturnAngle2);
                                //leftshouderAngle = AmplitudeLimiterFilter(leftshouderAngle, leftshouderAngle2);
                                //long endTime2 = DateTime.Now.Ticks;
                                //while (DateTime.Now.Ticks - endTime2 < 2000) ;

                                endTime = DateTime.Now.Ticks;
                                if (endTime - beginTime > 2000) //delay 2s
                                {
                                    if (temp == 0)              //value last time
                                    {
                                        rightWristAngle2   = rightWristAngle;
                                        leftElbowAngle2    = leftElbowAngle;
                                        rightElbowAngle2   = rightElbowAngle;
                                        rightshouderAngle2 = rightshouderAngle;
                                        waistturnAngle2    = waistturnAngle;
                                        leftshouderAngle2  = leftshouderAngle;
                                        rightheaddir2      = rightheaddir;
                                        temp++;
                                    }
                                    else
                                    {
                                        rightWristAngle   = (float)(rightWristAngle * 0.7 + rightWristAngle2 * 0.3);
                                        rightElbowAngle   = (float)(rightElbowAngle * 0.7 + rightElbowAngle2 * 0.3);
                                        leftElbowAngle    = (float)(leftElbowAngle * 0.7 + leftElbowAngle2 * 0.3);
                                        rightshouderAngle = (float)(rightshouderAngle * 0.7 + rightshouderAngle2 * 0.3);
                                        waistturnAngle    = (float)(waistturnAngle * 0.7 + waistturnAngle2 * 0.3);
                                        leftshouderAngle  = (float)(leftshouderAngle * 0.7 + leftshouderAngle2 * 0.3);
                                        rightheaddir      = (float)(rightheaddir * 0.7 + rightheaddir2 * 0.3);

                                        //rightWristAngle = (rightWristAngle + rightWristAngle2) / 2;
                                        //rightElbowAngle = (rightElbowAngle + rightElbowAngle2) / 2;
                                        //rightshouderAngle = (rightshouderAngle + rightshouderAngle2) / 2;
                                        //waistturnAngle = (waistturnAngle + waistturnAngle2) / 2;
                                        //leftshouderAngle = (leftshouderAngle + leftshouderAngle2) / 2;

                                        textBox1.Text = Convert.ToString(leftshouderAngle);//rightWristAngle replaced by left arm

                                        textBox2.Text = Convert.ToString(rightElbowAngle);

                                        textBox3.Text = Convert.ToString(leftElbowAngle);

                                        textBox5.Text = Convert.ToString(rightshouderAngle);

                                        //textBox3.Text = Convert.ToString(leftshouderAngle);
                                        try
                                        {
                                            scrollBar1.Value = leftshouderAngle;//rightWristAngle replaced by left arm
                                            byte[] data1 = { 0xFF, 0X01, 0X01, Convert.ToByte(scrollBar1.Value), 0XFF };
                                            //stream.Write(data1, 0, data1.Length);

                                            if (leftElbowAngle > 60 && leftElbowAngle < 120)
                                            {
                                                scrollBar3.Value = 150;
                                                byte[] data3 = { 0xFF, 0X01, 0X03, Convert.ToByte(scrollBar3.Value), 0XFF };
                                                //stream.Write(data3, 0, data3.Length);
                                            }
                                            else
                                            {
                                                scrollBar3.Value = 30;
                                                byte[] data3 = { 0xFF, 0X01, 0X03, Convert.ToByte(scrollBar3.Value), 0XFF };
                                                //stream.Write(data3, 0, data3.Length);
                                            }
                                            //scrollBar3.Value = leftElbowAngle;
                                            //byte[] data3 = { 0xFF, 0X01, 0X03, Convert.ToByte(scrollBar3.Value), 0XFF };
                                            //stream.Write(data3, 0, data3.Length);

                                            scrollBar2.Value = rightElbowAngle;
                                            byte[] data2 = { 0xFF, 0X01, 0X02, Convert.ToByte(scrollBar2.Value), 0XFF };
                                            //stream.Write(data2, 0, data2.Length);

                                            scrollBar5.Value = rightshouderAngle;
                                            byte[] data5 = { 0xFF, 0X01, 0X05, Convert.ToByte(scrollBar5.Value), 0XFF };
                                            //stream.Write(data5, 0, data5.Length);

                                            scrollBar6.Value = waistturnAngle;
                                            byte[] data6 = { 0xFF, 0X01, 0X06, Convert.ToByte(scrollBar6.Value), 0XFF };
                                            //stream.Write(data6, 0, data6.Length);
                                        }
                                        catch (Exception ex)
                                        {
                                            MessageBox.Show(ex.Message);
                                        }
                                        rightWristAngle2   = rightWristAngle;
                                        rightElbowAngle2   = rightElbowAngle;
                                        leftElbowAngle2    = leftElbowAngle;
                                        rightshouderAngle2 = rightshouderAngle;
                                        waistturnAngle2    = waistturnAngle;
                                        leftshouderAngle2  = leftshouderAngle;
                                        rightheaddir2      = rightheaddir;
                                    }
                                    beginTime = endTime;
                                }
                            }
                        }
                        else if (skel.TrackingState == SkeletonTrackingState.PositionOnly)
                        {
                            dc.DrawEllipse(
                                this.centerPointBrush,
                                null,
                                this.SkeletonPointToScreen(skel.Position),
                                BodyCenterThickness,
                                BodyCenterThickness);
                        }
                    }
                }
                // prevent drawing outside of our render area
                this.drawingGroup.ClipGeometry = new RectangleGeometry(new Rect(0.0, 0.0, RenderWidth, RenderHeight));
            }
        }
        void runtime_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            SkeletonFrame skeletonSet = e.SkeletonFrame;

            SkeletonData data = (from s in skeletonSet.Skeletons
                                 where s.TrackingState == SkeletonTrackingState.Tracked
                                 select s).FirstOrDefault();

            vlcHipCentre.Visibility = data.TrackingState == SkeletonTrackingState.NotTracked ?
                System.Windows.Visibility.Hidden : System.Windows.Visibility.Visible;

            var head = data.Joints[JointID.Head];
            var rightHand = data.Joints[JointID.HandRight];
            var leftHand = data.Joints[JointID.HandLeft];
            var shoulderCentre = data.Joints[JointID.ShoulderCenter];
            var hipcentre = data.Joints[JointID.HipCenter];

            SetEllipsePosition(ellipseHead, head, isBowGesture);

            SetEllipsePosition(ellipseShoulderCentre, shoulderCentre, false);

            ShowVLCHipCentre(vlcHipCentre, hipcentre);

            SetEllipsePosition(ellipseLeftHand, leftHand, isForwardGestureActive || isBackGestureActive || isBackUpGestureActive);
            SetEllipsePosition(ellipseRightHand, rightHand, isBackGestureActive || isForwardGestureActive || isForwardUpGestureActive);

            ProcessGestures(head,shoulderCentre, hipcentre, rightHand, leftHand);
        }
        void nui_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            ticksToNextEventAllowed--;
            SkeletonFrame skeletonFrame = e.SkeletonFrame;
            int iSkeleton = 0;
            Brush[] brushes = new Brush[6];
            brushes[0] = new SolidColorBrush(Color.FromRgb(255, 0, 0));
            brushes[1] = new SolidColorBrush(Color.FromRgb(0, 255, 0));
            brushes[2] = new SolidColorBrush(Color.FromRgb(64, 255, 255));
            brushes[3] = new SolidColorBrush(Color.FromRgb(255, 255, 64));
            brushes[4] = new SolidColorBrush(Color.FromRgb(255, 64, 255));
            brushes[5] = new SolidColorBrush(Color.FromRgb(128, 128, 255));

            skeleton.Children.Clear();
            foreach (SkeletonData data in skeletonFrame.Skeletons)
            {
                if (SkeletonTrackingState.Tracked == data.TrackingState)
                {
                    // Draw bones
                    Brush brush = brushes[iSkeleton % brushes.Length];
                    skeleton.Children.Add(getBodySegment(data.Joints, brush, JointID.HipCenter, JointID.Spine, JointID.ShoulderCenter, JointID.Head));
                    skeleton.Children.Add(getBodySegment(data.Joints, brush, JointID.ShoulderCenter, JointID.ShoulderLeft, JointID.ElbowLeft, JointID.WristLeft, JointID.HandLeft));
                    skeleton.Children.Add(getBodySegment(data.Joints, brush, JointID.ShoulderCenter, JointID.ShoulderRight, JointID.ElbowRight, JointID.WristRight, JointID.HandRight));
                    skeleton.Children.Add(getBodySegment(data.Joints, brush, JointID.HipCenter, JointID.HipLeft, JointID.KneeLeft, JointID.AnkleLeft, JointID.FootLeft));
                    skeleton.Children.Add(getBodySegment(data.Joints, brush, JointID.HipCenter, JointID.HipRight, JointID.KneeRight, JointID.AnkleRight, JointID.FootRight));
                    if (ticksToNextEventAllowed <= 0)
                    {
                        if (
                            data.Joints[JointID.HandLeft].Position.X < -0.6
                            && data.Joints[JointID.HandRight].Position.X < -0.6
                            )
                        {
                            this.SendKeysOnce("Welcome to my new tech meeting format!\n");
                        }
                        else if (data.Joints[JointID.HandLeft].Position.X > 0.6
                            && data.Joints[JointID.HandRight].Position.X > 0.6
                            )
                        {
                            this.SendKeysOnce("U MAD, bros?\n");
                        }
                        else if (
                            data.Joints[JointID.HandLeft].Position.X < -0.5
                            &&
                            data.Joints[JointID.HandRight].Position.X > 0.5

                            /*(data.Joints[JointID.HandLeft].Position.X - data.Joints[JointID.HandRight].Position.X < 0.2)
                            &&
                            (data.Joints[JointID.HandLeft].Position.Y < data.Joints[JointID.HandRight].Position.Y)
                            &&
                            (data.Joints[JointID.HandLeft].Position.X > -0.25 && data.Joints[JointID.HandLeft].Position.X < 0.25) // in the center section
                             * */
                        )
                        {
                            this.SendKeysOnce("COME AT ME, BROS!");
                        }
                    }
                    // Draw joints
                    foreach (Joint joint in data.Joints)
                    {
                        Point jointPos = getDisplayPosition(joint);
                        Line jointLine = new Line();
                        jointLine.X1 = jointPos.X - 3;
                        jointLine.X2 = jointLine.X1 + 6;
                        jointLine.Y1 = jointLine.Y2 = jointPos.Y;
                        jointLine.Stroke = jointColors[joint.ID];
                        jointLine.StrokeThickness = 6;
                        skeleton.Children.Add(jointLine);
                    }
                }
                iSkeleton++;
            } // for each skeleton
        }
        void sensor_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            using (SkeletonFrame skeletonFrame = e.OpenSkeletonFrame())
            {
                if (skeletonFrame == null)
                {
                    return;
                }

                inputmethod = W.inputmethod;
                skeletonFrame.CopySkeletonDataTo(allSkeletons);

                //get the first tracked skeleton
                Skeleton first = (from s in allSkeletons
                                  where s.TrackingState == SkeletonTrackingState.Tracked
                                  select s).FirstOrDefault();

                // skeleton data may not be available
                if (first == null)
                {
                    return;
                }

                // display skeleton on window
                displaySkeleton(first);

                // Selecting the input method
                switch (inputmethod)
                {
                case 0:     // input version 1
                    Angles angles1 = new Angles(first);
                    AxisAngles = angles1.getFinalAngles();
                    break;

                case 2:     // input version 2
                    HandPosition angles2 = new HandPosition(first);
                    AxisAngles = angles2.getFinalAngles();
                    break;

                case 1:     // input version 3
                    HandPositionLower angles3 = new HandPositionLower(first);
                    AxisAngles = angles3.getFinalAngles();
                    break;

                default:
                    MessageBox.Show("Error !!!");
                    break;
                }

                AxisAngles = medians.getNextMedian(AxisAngles);


                // Displaying on GUI
                W.axis1.Content = AxisAngles[1].ToString();
                W.axis2.Content = AxisAngles[2].ToString();
                W.axis3.Content = AxisAngles[3].ToString();
                W.axis4.Content = AxisAngles[4].ToString();
                W.axis5.Content = AxisAngles[5].ToString();
                W.axis6.Content = AxisAngles[6].ToString();


                if (W.RoboticArmMovement)
                {
                    MoveRoboticArm(AxisAngles);
                }
            }
        }
        void nui_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            SkeletonFrame skeletonFrame = e.SkeletonFrame;
            int iSkeleton = 0;
            Brush[] brushes = new Brush[6];
            brushes[0] = new SolidColorBrush(Color.FromRgb(255, 0, 0));
            brushes[1] = new SolidColorBrush(Color.FromRgb(0, 255, 0));
            brushes[2] = new SolidColorBrush(Color.FromRgb(64, 255, 255));
            brushes[3] = new SolidColorBrush(Color.FromRgb(255, 255, 64));
            brushes[4] = new SolidColorBrush(Color.FromRgb(255, 64, 255));
            brushes[5] = new SolidColorBrush(Color.FromRgb(128, 128, 255));

            skeleton.Children.Clear();
            foreach (SkeletonData data in skeletonFrame.Skeletons)
            {
                if (SkeletonTrackingState.Tracked == data.TrackingState)
                {
                    // Draw bones
                    Brush brush = brushes[iSkeleton % brushes.Length];
                    skeleton.Children.Add(getBodySegment(data.Joints, brush, JointID.HipCenter, JointID.Spine, JointID.ShoulderCenter, JointID.Head));
                    skeleton.Children.Add(getBodySegment(data.Joints, brush, JointID.ShoulderCenter, JointID.ShoulderLeft, JointID.ElbowLeft, JointID.WristLeft, JointID.HandLeft));
                    skeleton.Children.Add(getBodySegment(data.Joints, brush, JointID.ShoulderCenter, JointID.ShoulderRight, JointID.ElbowRight, JointID.WristRight, JointID.HandRight));
                    skeleton.Children.Add(getBodySegment(data.Joints, brush, JointID.HipCenter, JointID.HipLeft, JointID.KneeLeft, JointID.AnkleLeft, JointID.FootLeft));
                    skeleton.Children.Add(getBodySegment(data.Joints, brush, JointID.HipCenter, JointID.HipRight, JointID.KneeRight, JointID.AnkleRight, JointID.FootRight));

                    // Draw joints
                    foreach (Joint joint in data.Joints)
                    {
                        Point jointPos = getDisplayPosition(joint);
                        Line jointLine = new Line();
                        jointLine.X1 = jointPos.X - 3;
                        jointLine.X2 = jointLine.X1 + 6;
                        jointLine.Y1 = jointLine.Y2 = jointPos.Y;
                        jointLine.Stroke = jointColors[joint.ID];
                        jointLine.StrokeThickness = 6;
                        skeleton.Children.Add(jointLine);
                    }
                }
                iSkeleton++;
            } // for each skeleton
        }
        /// <summary>
        /// Event handler for Kinect sensor's SkeletonFrameReady event
        /// </summary>
        /// <param name="sender">object sending the event</param>
        /// <param name="e">event arguments</param>
        private void SensorSkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            Skeleton[] skeletons = new Skeleton[0];

            using (SkeletonFrame skeletonFrame = e.OpenSkeletonFrame())
            {
                if (skeletonFrame != null)
                {
                    skeletons = new Skeleton[skeletonFrame.SkeletonArrayLength];
                    skeletonFrame.CopySkeletonDataTo(skeletons);
                }
            }

            using (DrawingContext dc = this.drawingGroup.Open())
            {
                // Draw a transparent background to set the render size
                dc.DrawRectangle(Brushes.Transparent, null, new Rect(0.0, 0.0, RenderWidth, RenderHeight));

                if (skeletons.Length != 0)
                {
                    textBoxMensaje.Clear();
                    textBoxTiempo.Clear();
                    textBoxInfo.Clear();
                    foreach (Skeleton skel in skeletons)
                    {
                        RenderClippedEdges(skel, dc);
                        //RenderClippedEdges(newSkel, dc);
                        if (skel.TrackingState == SkeletonTrackingState.Tracked)
                        {
                            this.DrawBonesAndJoints(skel, dc);
                            //CREATE A NEW SKELETON TO RECEIVE PROJECTED POINTS
                            //DrawRect(skel, mov.projectedWristL, trackedBonePen, dc);
                            //if the correct movement is tracked then color the skeleton bones with green
                            if (mov.deteccion(skel) || mov.deteccion5 == 5)
                            {
                                trackedBonePen = new Pen(Brushes.Green, 6);
                                DrawRect(skel, mov.projectedWristL, trackedBonePen, dc);
                                DrawRect(skel, mov.projectedWristR, trackedBonePen, dc);
                                DrawRect(skel, mov.projectedAnkR, trackedBonePen, dc);
                                DrawRect(skel, mov.projectedAnkL, trackedBonePen, dc);
                            }
                            //if the incorrect movement is tracked then color skeleton bones with red
                            else
                            {
                                trackedBonePen = new Pen(Brushes.Red, 6);
                                //paintRect(skel, mov.projectedWristL, inferredBonePen, dc);
                                DrawRect(skel, mov.projectedWristL, trackedBonePen, dc);
                                DrawRect(skel, mov.projectedWristR, trackedBonePen, dc);
                                DrawRect(skel, mov.projectedAnkR, trackedBonePen, dc);
                                DrawRect(skel, mov.projectedAnkL, trackedBonePen, dc);
                            }
                            //solucionP.Content = mov.getEstado();
                            //send messages of Correct or Incorrect movement
                            textBoxMensaje.AppendText(mov.getEstado() + "\n");
                            //textBoxMensaje.AppendText(this.SkeletonPointToScreen(mov.projectedWristL) + "\n");
                            //send message time span to the correct movement to be tracked
                            textBoxTiempo.AppendText(mov.contador + "\n");
                            //send message of the next movement to be tracked
                            textBoxInfo.AppendText(mov.proxMov + "\n");
                        }
                        else if (skel.TrackingState == SkeletonTrackingState.PositionOnly)
                        {
                            dc.DrawEllipse(
                                this.centerPointBrush,
                                null,
                                this.SkeletonPointToScreen(skel.Position),
                                BodyCenterThickness,
                                BodyCenterThickness);
                            textBoxMensaje.AppendText("Inicie el movimiento" + "\n");
                        }
                    }
                }

                // prevent drawing outside of our render area
                this.drawingGroup.ClipGeometry = new RectangleGeometry(new Rect(0.0, 0.0, RenderWidth, RenderHeight));
            }
        }
Exemple #37
0
        static void sensor_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            // We only use the frame if the timer reset (this is to limit the frame rate)
            if (reset)
            {
                Debug("Next Frame Ready");
                // Here we get all 6 skeletons (even if they are not all being used)
                Skeleton[] skeletons = new Skeleton[0];
                using (SkeletonFrame skeletonFrame = e.OpenSkeletonFrame())
                {
                    if (skeletonFrame != null)
                    {
                        skeletons = new Skeleton[skeletonFrame.SkeletonArrayLength];
                        skeletonFrame.CopySkeletonDataTo(skeletons);
                    }
                }

                // Get the skeleton we want
                Skeleton ourSkel      = null;
                Skeleton ourOtherSkel = null;
                foreach (Skeleton skel in skeletons)
                {
                    if (skel.TrackingState == SkeletonTrackingState.Tracked)
                    {
                        if (ourSkel == null)
                        {
                            ourSkel = skel;
                        }
                        else
                        {
                            ourOtherSkel = skel;
                        }
                    }
                }
                if (ourSkel == null)
                {
                    Debug("No tracked skeleton.");
                    reset = true;//try to find a skeleton again
                    return;
                }
                else
                {
                    Debug("skeleton state = " + ourSkel.TrackingState);
                }

                // Get the joints we want
                Joint left   = ourSkel.Joints[JointType.ShoulderLeft];
                Joint head   = ourSkel.Joints[JointType.Head];
                Joint right  = ourSkel.Joints[JointType.ShoulderRight];
                Joint center = ourSkel.Joints[JointType.ShoulderCenter];

                // We then set the previousFrame and currentFrame
                if (currentFrame[0] == null)
                {
                    // If this is the first frame, then we can't set the previousFrame
                    currentFrame[0] = left.Position;
                    currentFrame[1] = right.Position;
                    currentFrame[2] = head.Position;
                    currentFrame[3] = center.Position;
                    // We will wait until the next frame so we have a previous frame
                    return;
                }
                previousFrame[0] = currentFrame[0];
                previousFrame[1] = currentFrame[1];
                previousFrame[2] = currentFrame[2];
                previousFrame[3] = currentFrame[3];
                currentFrame[0]  = left.Position;
                currentFrame[1]  = right.Position;
                currentFrame[2]  = head.Position;
                currentFrame[3]  = center.Position;

                // What we do with the skeleton data is determined by the state the program is in
                switch (state)
                {
                // If the program is calibrating, we will get the calibration data from this frame
                case State.Calibrate:
                    float totalDist = 0;    //use distance formulas to get real distances between joints
                    totalDist += Distance(previousFrame[0], currentFrame[0]);
                    totalDist += Distance(previousFrame[1], currentFrame[1]);
                    totalDist += Distance(previousFrame[2], currentFrame[2]);
                    totalDist += Distance(previousFrame[3], currentFrame[3]);
                    Debug("Total dist: " + totalDist);
                    if (totalDist < .0075f)    //this determines if the person has mooved too much or not
                    {
                        if (calibrated < 3)
                        {
                            Debug("Calibration frame: " + (calibrated + 1) + "/3");
                            calibrationPoints[calibrated, 0] = left.Position;
                            calibrationPoints[calibrated, 1] = right.Position;
                            calibrationPoints[calibrated, 2] = head.Position;
                            calibrationPoints[calibrated, 3] = center.Position;
                            calibrated++;
                        }
                        if (calibrated == 3)
                        {
                            calibration[0]  = Center(calibrationPoints[0, 0], calibrationPoints[1, 0], calibrationPoints[2, 0]);   //normalize points here
                            calibration[1]  = Center(calibrationPoints[0, 1], calibrationPoints[1, 1], calibrationPoints[2, 1]);
                            calibration[2]  = Center(calibrationPoints[0, 2], calibrationPoints[1, 2], calibrationPoints[2, 2]);
                            calibration[3]  = Center(calibrationPoints[0, 3], calibrationPoints[1, 3], calibrationPoints[2, 3]);
                            currentFrame[0] = calibration[0];
                            currentFrame[1] = calibration[1];
                            currentFrame[2] = calibration[2];
                            currentFrame[3] = calibration[3];
                            normalize();
                            normalizedCalibration = normalized;
                            state          = State.Run;
                            timer.Interval = 1000;
                            Console.WriteLine("Calibration complete.");
                            state = State.Run;
                        }
                    }
                    else
                    {
                        calibrated = 0;
                    }

                    break;

                // If the program is running, we will determin if the user has good or bad posture
                case State.Run:
                    normalize();
                    classify();
                    break;

                // This state is for testing.  Here we put whatever we want and it will not interfere with the rest of the program.
                // Use this state by setting state = State.Testing where it is declared.
                case State.Test:
                    Console.WriteLine(skeletons.Length.ToString() + " skeleton frames:");

                    foreach (Skeleton skel in skeletons)
                    {
                        if (skel.TrackingState == SkeletonTrackingState.Tracked)
                        {
                            //Console.WriteLine("tracked");
                            Console.WriteLine(head.Position.X.ToString() + head.Position.Y.ToString() + head.Position.Z.ToString());
                        }
                        else if (skel.TrackingState == SkeletonTrackingState.PositionOnly)
                        {
                            Console.WriteLine("position only");
                        }
                        else
                        {
                            Console.WriteLine("Not tracked");
                        }
                    }
                    break;

                default:
                    break;
                }
                reset = false;
            }
        }
        // eventhandler voor skeletonframe
        private void Sensor_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            this.Skeletons = new Skeleton[0];


            using (SkeletonFrame skeletonFrame = e.OpenSkeletonFrame()) //skelet openen
            {
                if (skeletonFrame != null)                              // checken of een frame beschikbaar is
                {
                    canvas.Children.Clear();

                    this.Skeletons = new Skeleton[skeletonFrame.SkeletonArrayLength];
                    skeletonFrame.CopySkeletonDataTo(this.Skeletons); // skelet informatie van het frame bemachtigen
                    foreach (Skeleton skel in Skeletons)
                    {
                        if (skel.TrackingState == SkeletonTrackingState.Tracked)
                        {
                            Dictionary <string, Point> dictionary = new Dictionary <string, Point>();


                            foreach (Joint joint in skel.Joints)
                            {
                                //3D coordinaten in meter
                                SkeletonPoint skeletonPoint = joint.Position;

                                // 2D coordinaten in pixels
                                Point point = new Point();


                                // Skelet naar color mapping
                                ColorImagePoint colorPoint = Sensor.CoordinateMapper.MapSkeletonPointToColorPoint(skeletonPoint, ColorImageFormat.RgbResolution640x480Fps30);

                                point.X = colorPoint.X;
                                point.Y = colorPoint.Y;

                                string type   = joint.JointType.ToString();
                                Point  point2 = point;


                                dictionary.Add(type, point2);


                                Ellipse ellipse = new Ellipse
                                {
                                    Fill   = Brushes.Red,
                                    Width  = 10,
                                    Height = 10
                                };



                                Canvas.SetLeft(ellipse, point.X - ellipse.Width / 2);
                                Canvas.SetTop(ellipse, point.Y - ellipse.Height / 2);

                                canvas.Children.Add(ellipse);
                            }

                            DrawBones(dictionary);
                        }
                    }
                }
            }
        }
Exemple #39
0
        /// <summary>
        /// Event handler for Kinect sensor's SkeletonFrameReady event
        /// </summary>
        /// <param name="sender">object sending the event</param>
        /// <param name="e">event arguments</param>
        private void SensorSkeletonFrameReady(SkeletonFrameReadyEventArgs e)
        {
            Skeleton[] skeletons = new Skeleton[0];

            using (SkeletonFrame skeletonFrame = e.OpenSkeletonFrame())
            {
                if (skeletonFrame != null)
                {
                    skeletons = new Skeleton[skeletonFrame.SkeletonArrayLength];
                    skeletonFrame.CopySkeletonDataTo(skeletons);
                }
            }

            using (DrawingContext dc = this.drawingGroup.Open())
            {
                // Draw a transparent background to set the render size
                dc.DrawRectangle(Brushes.Transparent, null, new Rect(0.0, 0.0, RenderWidth, RenderHeight));

                if (skeletons.Length != 0)
                {
                    Skeleton user     = null;
                    float    distance = 50000f;

                    foreach (Skeleton skel in skeletons)
                    {
                        RenderClippedEdges(skel, dc);

                        if (skel.TrackingState == SkeletonTrackingState.Tracked)
                        {
                            //this.DrawBonesAndJoints(skel, dc);


                            float skelDistance = skel.Joints[JointType.HipCenter].Position.Z;
                            if (skelDistance < distance)
                            {
                                distance = skelDistance;
                                user     = skel;
                            }
                        }
                        else if (skel.TrackingState == SkeletonTrackingState.PositionOnly)
                        {
                            //dc.DrawEllipse(
                            //this.centerPointBrush,
                            //null,
                            //this.SkeletonPointToScreen(skel.Position),
                            //BodyCenterThickness,
                            //BodyCenterThickness);
                        }
                    }

                    if (user != null)
                    {
                        this.DrawBonesAndJoints(user, dc);
                    }
                    //    float ankleRight = user.Joints[JointType.AnkleRight].Position.Y;
                    //    float ankleLeft = user.Joints[JointType.AnkleLeft].Position.Y;

                    //    float rightDiff = 0f;
                    //    float leftDiff = 0;

                    //    if (ankleLeft > ankleRight)
                    //    {
                    //        leftDiff = ankleLeft - ankleRight;
                    //    }
                    //    else
                    //    {
                    //        rightDiff = ankleRight - ankleLeft;
                    //    }


                    //    System.Diagnostics.Debug.WriteLine("\n\n[USER] " + user.TrackingId);
                    //    System.Diagnostics.Debug.WriteLine("\n[ABSOLUTE ORIENTATION] " + user.BoneOrientations[JointType.HipCenter].AbsoluteRotation.Quaternion.X);
                    //    System.Diagnostics.Debug.WriteLine("\n[RIGHT FOOT] " + (rightDiff*100));
                    //    System.Diagnostics.Debug.WriteLine("\n[LEFT FOOT] " + (leftDiff*100));
                    //}
                }

                // prevent drawing outside of our render area
                this.drawingGroup.ClipGeometry = new RectangleGeometry(new Rect(0.0, 0.0, RenderWidth, RenderHeight));
            }
        }
 void sensor_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
 {
     throw new NotImplementedException();
 }
Exemple #41
0
        private void SkeletonsReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            using (SkeletonFrame skeletonFrame = e.OpenSkeletonFrame())
            {
                if (skeletonFrame != null)
                {
                    int skeletonSlot = 0;

                    if ((this.skeletonData == null) || (this.skeletonData.Length != skeletonFrame.SkeletonArrayLength))
                    {
                        this.skeletonData = new Skeleton[skeletonFrame.SkeletonArrayLength];
                    }

                    skeletonFrame.CopySkeletonDataTo(this.skeletonData);

                    foreach (Skeleton skeleton in this.skeletonData)
                    {
                        if (SkeletonTrackingState.Tracked == skeleton.TrackingState)
                        {
                            Player player;
                            if (this.players.ContainsKey(skeletonSlot))
                            {
                                player = this.players[skeletonSlot];
                            }
                            else
                            {
                                player = new Player(skeletonSlot);
                                player.SetBounds(this.playerBounds);
                                this.players.Add(skeletonSlot, player);
                            }

                            player.LastUpdated = DateTime.Now;

                            // Update player's bone and joint positions
                            if (skeleton.Joints.Count > 0)
                            {
                                player.IsAlive = true;

                                // Head, hands, feet (hit testing happens in order here)
                                player.UpdateJointPosition(skeleton.Joints, JointType.Head);
                                player.UpdateJointPosition(skeleton.Joints, JointType.HandLeft);
                                player.UpdateJointPosition(skeleton.Joints, JointType.HandRight);
                                player.UpdateJointPosition(skeleton.Joints, JointType.FootLeft);
                                player.UpdateJointPosition(skeleton.Joints, JointType.FootRight);

                                // Hands and arms
                                player.UpdateBonePosition(skeleton.Joints, JointType.HandRight, JointType.WristRight);
                                player.UpdateBonePosition(skeleton.Joints, JointType.WristRight, JointType.ElbowRight);
                                player.UpdateBonePosition(skeleton.Joints, JointType.ElbowRight, JointType.ShoulderRight);

                                player.UpdateBonePosition(skeleton.Joints, JointType.HandLeft, JointType.WristLeft);
                                player.UpdateBonePosition(skeleton.Joints, JointType.WristLeft, JointType.ElbowLeft);
                                player.UpdateBonePosition(skeleton.Joints, JointType.ElbowLeft, JointType.ShoulderLeft);

                                // Head and Shoulders
                                player.UpdateBonePosition(skeleton.Joints, JointType.ShoulderCenter, JointType.Head);
                                player.UpdateBonePosition(skeleton.Joints, JointType.ShoulderLeft, JointType.ShoulderCenter);
                                player.UpdateBonePosition(skeleton.Joints, JointType.ShoulderCenter, JointType.ShoulderRight);

                                // Legs
                                player.UpdateBonePosition(skeleton.Joints, JointType.HipLeft, JointType.KneeLeft);
                                player.UpdateBonePosition(skeleton.Joints, JointType.KneeLeft, JointType.AnkleLeft);
                                player.UpdateBonePosition(skeleton.Joints, JointType.AnkleLeft, JointType.FootLeft);

                                player.UpdateBonePosition(skeleton.Joints, JointType.HipRight, JointType.KneeRight);
                                player.UpdateBonePosition(skeleton.Joints, JointType.KneeRight, JointType.AnkleRight);
                                player.UpdateBonePosition(skeleton.Joints, JointType.AnkleRight, JointType.FootRight);

                                player.UpdateBonePosition(skeleton.Joints, JointType.HipLeft, JointType.HipCenter);
                                player.UpdateBonePosition(skeleton.Joints, JointType.HipCenter, JointType.HipRight);

                                // Spine
                                player.UpdateBonePosition(skeleton.Joints, JointType.HipCenter, JointType.ShoulderCenter);
                            }
                        }

                        skeletonSlot++;
                    }
                }
            }
        }
        private void Sensor_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            Skeleton[] skeletons = new Skeleton[0];

            using (SkeletonFrame skeletonFrame = e.OpenSkeletonFrame())
            {
                if (skeletonFrame != null)
                {
                    skeletons = new Skeleton[skeletonFrame.SkeletonArrayLength];
                    skeletonFrame.CopySkeletonDataTo(skeletons);
                }
            }

            using (DrawingContext dc = this.drawingGroup.Open())
            {
                // Draw a transparent background to set the render size
                dc.DrawRectangle(Brushes.Black, null, new Rect(0.0, 0.0, RenderWidth, RenderHeight));

                if (skeletons.Length != 0)
                {
                    foreach (Skeleton skel in skeletons)
                    {
                        RenderClippedEdges(skel, dc);

                        if (skel.TrackingState == SkeletonTrackingState.Tracked)
                        {
                            this.DrawBonesAndJoints(skel, dc);
                        }
                        else if (skel.TrackingState == SkeletonTrackingState.PositionOnly)
                        {
                            dc.DrawEllipse(
                                this.centerPointBrush,
                                null,
                                this.SkeletonPointToScreen(skel.Position),
                                BodyCenterThickness,
                                BodyCenterThickness);
                        }
                    }
                }

                // prevent drawing outside of our render area
                this.drawingGroup.ClipGeometry = new RectangleGeometry(new Rect(0.0, 0.0, RenderWidth, RenderHeight));
            }



            int  track    = 0;
            bool isperson = false;

            foreach (Skeleton S in skeletons)
            {
                if (S.TrackingState == SkeletonTrackingState.Tracked)
                {
                    isperson = true;
                    break;
                }
                track++;
            }

            if (!firsttime && isperson)
            {
                //    J1 = skeletons[track].Joints[JointType.KneeLeft].Position.Y;
                //  J2 = skeletons[track].Joints[JointType.KneeRight].Position.Y;

                firsttime = true;
                WalkingSetting.SetFirstThreshold(skeletons[track]);
                ANGLES.FirstTime(skeletons[track]);
            }

            if (isperson)
            {
                //string Walking=prevwalk;

                ///if (((Math.Abs((skeletons[track].Joints[JointType.KneeLeft].Position.Y -J1 )) >= 0.05) || (Math.Abs(skeletons[track].Joints[JointType.KneeRight].Position.Y - J2) >= 0.05)))
                /// {
                ///
                ///      J1 = skeletons[track].Joints[JointType.KneeLeft].Position.Y;
                ///      J2 = skeletons[track].Joints[JointType.KneeRight].Position.Y;
                ///     if (prevwalk == "0")
                ///     {
                ///         Walking = "1";
                ///         prevwalk = Walking;
                ///     }
                ///
                ///    else if (prevwalk=="1")
                ///     {
                ///         Walking = "2";
                ///     }
                ///
                ///     counter = 0;
                ///  }
                /// else
                /// {
                ///     if (counter >= 12)
                ///     {
                ///         Walking = "0";
                ///         prevwalk=Walking;
                ///         counter = 0;
                ///     }
                ///     else
                ///     {
                ///  *       counter++;
                /// *    }
                /// *}
                /// */


                ANGLES.SetJoints(skeletons[track]);
                WalkingSetting.CheckStatus(skeletons[track]);



                ///string TEXT = "1 " + RShoulderPitch+" " +RShoulderRoll + " " +Relbowroll+" "+"3" + " " +LShoulderPitch + " " +LShoulderRoll + " " + LElbowRoll + " " + Walking;
                /// string ASJAD = "1" + " "+RElbowRoll;
                ///TEXT="1 "+  + " " + RightShoulderRoll() + " " + RightElbowRoll() + " " + RightElbowYaw() + " "+ LeftShoulderPitch() + " " + LeftShoulderRoll() + " " + LeftElbowRoll();

                string TEXT = "1 " + ANGLES.GetAllAngles() + " " + WalkingSetting.GetStatus();
                System.IO.File.WriteAllText(@"D:\fyp\test\movement.txt", TEXT);
            }

            else
            {
                string text = "0";
                try
                {
                    System.IO.File.WriteAllText(@"D:\fyp\test\movement.txt", text);
                }
                catch
                {
                }

                //Ye If Statement Hata k Check Krni hai

                if (!isperson)
                {
                    firsttime = false;
                }
            }
        }
        private void MyKinect_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            try {
                /*canvSkel.Children.Clear();*/
                //string msg = "";
                //string msgC = "";
                Skeleton[] skels = null;

                using (SkeletonFrame frameSkeleton = e.OpenSkeletonFrame())
                {
                    if (frameSkeleton != null)
                    {
                        skels = new Skeleton[frameSkeleton.SkeletonArrayLength];
                        frameSkeleton.CopySkeletonDataTo(skels);
                    }
                }

                if (skels == null)
                {
                    return;
                }

                /*
                 * Color[] skelcol = new Color[16];
                 * skelcol[0] = Colors.Blue;
                 * skelcol[1] = Colors.Green;
                 * skelcol[2] = Colors.Red;
                 * skelcol[3] = Colors.Yellow;
                 * skelcol[4] = Colors.Pink;
                 * skelcol[5] = Colors.Blue;
                 * skelcol[6] = Colors.Green;
                 * skelcol[7] = Colors.Red;
                 * skelcol[8] = Colors.Yellow;
                 * skelcol[9] = Colors.Pink;
                 * skelcol[10] = Colors.Blue;
                 * skelcol[11] = Colors.Green;
                 * skelcol[12] = Colors.Red;
                 * skelcol[13] = Colors.Yellow;
                 * skelcol[14] = Colors.Pink;
                 * skelcol[15] = Colors.Blue;
                 */
                int sk_indx  = 0;
                int sk_indx1 = 0;
                int sk_cl    = 0;

                foreach (Skeleton skel in skels)
                {
                    sk_indx = sk_indx + 1;
                    if (skel.TrackingState == SkeletonTrackingState.Tracked)
                    {
                        sk_indx1 = sk_indx1 + 1;
                        if (skel.ClippedEdges == 0)
                        {
                            sk_cl = 0;
                        }
                        else
                        {
                            sk_cl = 1;
                        }

                        //Joint[] jsp = new Joint[4];
                        //jsp[0] = skel.Joints[JointType.Head];
                        if (sk_indx1 == 1)
                        {
                            OnKinect1?.Invoke(sk_indx, sk_cl, skel);
                        }
                        else if (sk_indx1 == 2)
                        {
                            OnKinect2?.Invoke(sk_indx, sk_cl, skel);
                        }
                        else if (sk_indx1 == 3)
                        {
                            OnKinect3?.Invoke(sk_indx, sk_cl, skel);
                        }
                        else if (sk_indx1 == 4)
                        {
                            OnKinect4?.Invoke(sk_indx, sk_cl, skel);
                        }
                    }
                }
            } catch (Exception ex) {
                OnKinectInitError("Error " + ex.Message);
            }
        }
        private void KinectSkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            if (responseReceived == true)
            {
                var skeletons = new Skeleton[0];
                using (var skeletonFrame = e.OpenSkeletonFrame())
                {
                    if (skeletonFrame != null)
                    {
                        skeletons = new Skeleton[skeletonFrame.SkeletonArrayLength];
                        skeletonFrame.CopySkeletonDataTo(skeletons);
                    }
                }

                if (skeletons.Length == 0)
                {
                    return;
                }

                var skel = skeletons.FirstOrDefault(x => x.TrackingState == SkeletonTrackingState.Tracked);
                if (skel == null)
                {
                    return;
                }

                var leftHand   = skel.Joints[JointType.WristLeft];  // 1
                var rightHand  = skel.Joints[JointType.WristRight]; // 2
                var leftElbow  = skel.Joints[JointType.ElbowLeft];  // 3
                var rightElbow = skel.Joints[JointType.ElbowRight]; // 4
                var leftKnee   = skel.Joints[JointType.KneeLeft];   // 5
                var rightKnee  = skel.Joints[JointType.KneeRight];  // 6
                var leftAnkle  = skel.Joints[JointType.AnkleLeft];  // 7
                var rightAnkle = skel.Joints[JointType.AnkleRight]; // 8

                var centreHip      = skel.Joints[JointType.HipCenter];
                var centreShoulder = skel.Joints[JointType.ShoulderCenter];

                var allJoints = new[] { leftHand, rightHand, leftElbow, rightElbow, leftAnkle, leftKnee, rightAnkle, rightKnee };

                //XValueRight.Text = rightHand.Position.X.ToString(CultureInfo.InvariantCulture);
                // YValueRight.Text = rightHand.Position.Y.ToString(CultureInfo.InvariantCulture);
                // ZValueRight.Text = rightHand.Position.Z.ToString(CultureInfo.InvariantCulture);

                // XValueLeft.Text = leftHand.Position.X.ToString(CultureInfo.InvariantCulture);
                // YValueLeft.Text = leftHand.Position.Y.ToString(CultureInfo.InvariantCulture);
                // ZValueLeft.Text = leftHand.Position.Z.ToString(CultureInfo.InvariantCulture);

                int    jointcnt = 0;
                string res      = "";
                foreach (var joint in allJoints)
                {
                    jointcnt++;
                    int angle = 0;
                    if (jointcnt == 1)  // lefthand, relative to leftElbow
                    {
                        double radians = Math.Atan((joint.Position.Y - leftElbow.Position.Y) / (joint.Position.X - leftElbow.Position.X));
                        angle = (int)(radians * (180 / Math.PI) + 90); // 90 is the default angle(horizontal)
                    }
                    if (jointcnt == 2)                                 // righthand
                    {                                                  // righthand
                        double radians = Math.Atan((joint.Position.Y - rightElbow.Position.Y) / (joint.Position.X - rightElbow.Position.X));
                        angle = (int)(radians * (180 / Math.PI) + 90); // 90 is the default angle(horizontal)
                    }
                    if (jointcnt == 3)                                 // leftelbow, relative to centreShoulder
                    {
                        double radians = Math.Atan((joint.Position.Y - centreShoulder.Position.Y) / (joint.Position.X - centreShoulder.Position.X));
                        angle = (int)(radians * (180 / Math.PI) + 90); // 90 is the default angle(horizontal)
                    }
                    if (jointcnt == 4)                                 // right elbow
                    {
                        double radians = Math.Atan((joint.Position.Y - centreShoulder.Position.Y) / (joint.Position.X - centreShoulder.Position.X));
                        angle = (int)(radians * (180 / Math.PI) + 90); // 90 is the default angle(horizontal)
                    }

                    if (jointcnt == 5)
                    {
                        double radians = Math.Atan((joint.Position.Y - leftKnee.Position.Y) / (joint.Position.X - leftKnee.Position.X));
                        angle = (int)(radians * (180 / Math.PI) + 90); // 90 is the default angle(horizontal)
                    }
                    if (jointcnt == 6)
                    {
                        double radians = Math.Atan((joint.Position.Y - centreHip.Position.Y) / (joint.Position.X - centreHip.Position.X));
                        angle = (int)(radians * (180 / Math.PI) + 90); // 90 is the default angle(horizontal)
                    }
                    if (jointcnt == 7)
                    {
                        double radians = Math.Atan((joint.Position.Y - rightKnee.Position.Y) / (joint.Position.X - rightKnee.Position.X));
                        angle = (int)(radians * (180 / Math.PI) + 90); // 90 is the default angle(horizontal)
                    }
                    if (jointcnt == 8)
                    {
                        double radians = Math.Atan((joint.Position.Y - centreHip.Position.Y) / (joint.Position.X - centreHip.Position.X));
                        angle = (int)(radians * (180 / Math.PI) + 90); // 90 is the default angle(horizontal)
                    }
                    res = res + jointcnt.ToString() + ',' + angle.ToString() + ',';
                }
                lenSent = res.Length;
                port.WriteLine(res);  // 1,90
                System.Diagnostics.Debug.WriteLine("sending.." + res);

                SerialMonitor.Text += "   sent:" + res + Environment.NewLine;
                responseReceived    = false;
            }
        }
Exemple #45
0
        // Skeleton Stream Actions
        private void Sensor_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            // Initialise skeleton array to store available skeletons (maximum 6)
            Skeleton[] skeletons = new Skeleton[0];
            // Store skeletons from available skeleton frame to the array
            using (SkeletonFrame skeletonFrame = e.OpenSkeletonFrame())
            {
                if (skeletonFrame == null)
                {
                    return;
                }
                skeletons = new Skeleton[skeletonFrame.SkeletonArrayLength];
                skeletonFrame.CopySkeletonDataTo(skeletons);
            }
            // Choose the first/nearest skeleton as the main skeleton
            Skeleton skel = (from trackskeleton in skeletons
                             where trackskeleton.TrackingState == SkeletonTrackingState.Tracked
                             select trackskeleton).FirstOrDefault();

            // Code to go ahead if any skeletons are available
            if (skel == null)
            {
                return;
            }
            //Draw Skeleton
            using (DrawingContext dc = drawingGroup.Open())
            {
                // Draw a transparent background to set the render size
                dc.DrawRectangle(Brushes.Black, null, new Rect(0.0, 0.0, RenderWidth, RenderHeight));
                RenderClippedEdges(skel, dc);
                if (skel.TrackingState == SkeletonTrackingState.Tracked)
                {
                    DrawBonesAndJoints(skel, dc);
                }
                else if (skel.TrackingState == SkeletonTrackingState.PositionOnly)
                {
                    dc.DrawEllipse(centerPointBrush, null, SkeletonPointToScreen(skel.Position), BodyCenterThickness, BodyCenterThickness);
                }
                // prevent drawing outside of our render area
                drawingGroup.ClipGeometry = new RectangleGeometry(new Rect(0.0, 0.0, RenderWidth, RenderHeight));
            }
            // If skeletons are being tracked in real time in synchronisation, process angles
            if (skel.Joints[JointType.ShoulderRight].TrackingState == JointTrackingState.Tracked &&
                skel.Joints[JointType.ElbowRight].TrackingState == JointTrackingState.Tracked &&
                skel.Joints[JointType.WristRight].TrackingState == JointTrackingState.Tracked &&
                skel.Joints[JointType.ShoulderLeft].TrackingState == JointTrackingState.Tracked &&
                skel.Joints[JointType.ElbowLeft].TrackingState == JointTrackingState.Tracked &&
                skel.Joints[JointType.WristLeft].TrackingState == JointTrackingState.Tracked)
            {
                // Print angles on the WPF application's labels
                int[] ang = PrintAngles(skel);
                ls1.Content = ang[0];
                rs1.Content = ang[1];
                ls2.Content = ang[2];
                rs2.Content = ang[3];
                le.Content  = ang[4];
                re.Content  = ang[5];
                lh.Content  = ang[6];
                rh.Content  = ang[7];
                lk.Content  = ang[8];
                rk.Content  = ang[9];
                // Print angles on the serial port
                string toSend = "";
                for (int i = 0; i < 6; i++)
                {
                    toSend += (i + "." + ang[i] + ":");
                }
                Console.WriteLine(toSend);
                if (first)
                {
                    lastTime = DateTime.UtcNow;
                    port.WriteLine(toSend);
                    return;
                }
                TimeSpan difference = lastTime.Subtract(DateTime.UtcNow);
                if (difference.Seconds > 4)
                {
                    port.WriteLine(toSend);
                    lastTime = DateTime.UtcNow;
                }
            }
        }
        private void sensor_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            // If controller was deactivated less than one second before, it won't track any thing
            if (justDeactivated == true)
            {
                return;
            }

            using (SkeletonFrame skeletonFrame = e.OpenSkeletonFrame())
            {
                // if the frame has data then copy to skeletons array
                if (skeletonFrame != null)
                {
                    skeletons = new Skeleton[skeletonFrame.SkeletonArrayLength];
                    skeletonFrame.CopySkeletonDataTo(skeletons);
                }
                // if skeletons array is null then go out
                if (skeletons == null)
                {
                    return;
                }


                // if a skeleton is already given control then ignore others
                if (skeletonSelected)
                {
                    foreach (Skeleton skeleton in skeletons)
                    {
                        // set the activeSkeleton as the one that holds the skeletonId stored previously
                        if (skeleton.TrackingId == skeletonId)
                        {
                            activeSkeleton = skeleton;
                        }
                    }

                    // if the skeleton went out of range then they will lose his status as active
                    if (activeSkeleton.Position.X < minX || activeSkeleton.Position.X > maxX ||
                        activeSkeleton.Position.Z < minZ || activeSkeleton.Position.Z > maxZ)
                    {
                        deactivateActions();

                        return;
                    }


                    leftHandPoint  = this.ScalePosition(activeSkeleton.Joints[JointType.HandLeft].Position);
                    leftElbowPoint = this.ScalePosition(activeSkeleton.Joints[JointType.ElbowLeft].Position);
                    rightHandPoint = this.ScalePosition(activeSkeleton.Joints[JointType.HandRight].Position);


                    // move mouse
                    actionWhenTracked();

                    // This is to deal with the event of someone crossing in front of the sensor when you are using
                    if (activeSkeleton.TrackingState == SkeletonTrackingState.NotTracked ||
                        activeSkeleton.Joints[JointType.Spine].TrackingState == JointTrackingState.NotTracked)
                    {
                        deactivateActions();

                        // if I wanted not to close the window when someone crosses
                        //someoneCrossedInFrontOfUser = true;
                    }


                    if (activeSkeleton == null)
                    {
                        deactivateActions();
                    }
                }

                // if no user is active then go through all skeletons to detect new users
                else
                {
                    foreach (Skeleton skeleton in skeletons)
                    {
                        // skeleton not tracked then do nothing
                        if (skeleton.TrackingState == SkeletonTrackingState.NotTracked)
                        {
                            ;
                        }
                        // skeleton not in a specific range in terms of x and z, then ignore user and return
                        else if (skeleton.Position.X < minX || skeleton.Position.X > maxX ||
                                 skeleton.Position.Z < minZ || skeleton.Position.Z > maxZ)
                        {
                            skeleton.TrackingState = SkeletonTrackingState.PositionOnly;
                        }
                        else
                        {
                            // if you reach this point, the person is standing a certain distance from the Kinect.
                            // Not too close, not too far away and he is also in front of sensor.

                            // mark him as a tracked skeleton to be detected and interacted with
                            skeleton.TrackingState = SkeletonTrackingState.Tracked;

                            //// Automatic activation as long as you are in the activation position
                            skeletonSelected = true;
                            skeletonId       = skeleton.TrackingId;
                            activateActions();
                        }
                    }
                }
            }
        }
Exemple #47
0
        void nui_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            var trackedSkeletons = from s in e.SkeletonFrame.Skeletons
                                   where s.TrackingState == SkeletonTrackingState.Tracked
                                   select s;
            trackedSkeletonsCount = trackedSkeletons.Count();

            skeletons = new SkeletonData[trackedSkeletonsCount];
            for (int i = 0; i < trackedSkeletonsCount; i++)
            {
                skeletons[i] = trackedSkeletons.ElementAt(i);
            }

            // If a skeleton was recognized, get the first one to work with
            if (skeletons.Length > 0 && skeletons[0] != null)
            {
                // Grab the left hand coordinates and scale them to the canvas
                var leftHand = skeletons[0].Joints[JointID.HandLeft];
                var scaledLeftHand = leftHand.ScaleTo((int)canvasKinect.ActualWidth, (int)canvasKinect.ActualHeight, 1f, 1f);
                float leftX = scaledLeftHand.Position.X;
                float leftY = scaledLeftHand.Position.Y;
                float leftZ = scaledLeftHand.Position.Z;

                // Grab the right hand coordinates and scale them to the canvas
                var rightHand = skeletons[0].Joints[JointID.HandRight];
                var scaledRightHand = rightHand.ScaleTo((int) canvasKinect.ActualWidth, (int) canvasKinect.ActualHeight, 1f, 1f);
                float rightX = scaledRightHand.Position.X;
                float rightY = scaledRightHand.Position.Y;
                float rightZ = scaledRightHand.Position.Z;

                draw(leftX, leftY, rightX, rightY);

                // Stretch phase logic
                if (phase == "stretch" && !box1.isStretching)
                {
                    bool isLeftOnLeft = isOnLeftSide(leftX, leftY);
                    bool isLeftOnTop = isOnTopSide(leftX, leftY);
                    bool isLeftOnBottom = isOnBottomSide(leftX, leftY);
                    bool isRightOnRight = isOnRightSide(rightX, rightY);
                    bool isRightOnTop = isOnTopSide(rightX, rightY);
                    bool isRightOnBottom = isOnBottomSide(rightX, rightY);

                    if ((isLeftOnLeft && isRightOnRight)
                        || (isLeftOnTop && isRightOnBottom)
                        || (isLeftOnBottom && isRightOnTop))
                    {
                        box1.isStretching = true;
                    }
                }
                else if (phase == "stretch" && box1.isStretching)
                {
                    // If the left hand was on the left side and the right hand was on the right side
                    if (isOnLeftSide(leftX, leftY) && isOnRightSide(rightX, rightY))
                    {
                        box1.Left = leftX;
                        box1.BoxRect.Width += prevLeftX - leftX;
                        box1.BoxRect.Width += rightX - prevRightX;
                    }
                    // If the left hand was on the bottom and the right hand was on the right top
                    else if (isOnBottomSide(leftX, leftY) && isOnTopSide(rightX, rightY))
                    {
                        box1.Top = rightY;
                        box1.BoxRect.Height += prevRightY - rightY;
                        box1.BoxRect.Height += leftY - prevLeftY;
                    }
                    // If the left hand was on the top and the right hand was on the bottom
                    else if (isOnTopSide(leftX, leftY) && isOnBottomSide(rightX, rightY))
                    {
                        box1.Top = leftY;
                        box1.BoxRect.Height += prevLeftY - leftY;
                        box1.BoxRect.Height += rightY - prevRightY;
                    }
                }

                // Transport phase logic
                if (phase == "transport" && !box1.isMoving)
                {
                    // If the left hand was on the left side and the right hand was on the right side
                    bool leftValid = isOnLeftSide(leftX, leftY);
                    bool rightValid = isOnRightSide(rightX, rightY);

                    if (leftValid && rightValid)
                    {
                        box1.isMoving = true;
                    }
                }
                else if (phase == "transport" && box1.isMoving)
                {
                    double centerX = (rightX + leftX) / 2;
                    double centerY = (rightY + leftY) / 2;

                    box1.Left = centerX - box1.BoxRect.Width / 2;
                    box1.Top = centerY - box1.BoxRect.Height / 2;
                }

                // Scale phase logic
                if (phase == "scale" && !box1.isScaling)
                {
                    bool isLeftOnLeft = isOnLeftSide(leftX, leftY);
                    bool isLeftOnTop = isOnTopSide(leftX, leftY);
                    bool isLeftOnBottom = isOnBottomSide(leftX, leftY);
                    bool isRightOnRight = isOnRightSide(rightX, rightY);
                    bool isRightOnTop = isOnTopSide(rightX, rightY);
                    bool isRightOnBottom = isOnBottomSide(rightX, rightY);

                    // If the left hand was on the left side and the right hand was on the right side
                    // or if the left hand was on the bottom and the right hand was on the right top
                    // or if the left hand was on the top and the right hand was on the bottom
                    if ((isLeftOnLeft && isRightOnRight)
                        || (isLeftOnTop && isRightOnBottom)
                        || (isLeftOnBottom && isRightOnTop))
                    {
                        box1.isScaling = true;
                    }
                }
                else if (phase == "scale" && box1.isScaling)
                {
                    // If the left hand was on the left side and the right hand was on the right side
                    if (isOnLeftSide(leftX, leftY) && isOnRightSide(rightX, rightY))
                    {
                        double newWidth = box1.BoxRect.Width;
                        double newHeight = box1.BoxRect.Height;

                        box1.Left = leftX;
                        newWidth += prevLeftX - leftX;
                        newWidth += rightX - prevRightX;
                        box1.Top -= (prevLeftX - leftX) / box1.AspectRatio;
                        box1.Top -= (rightX - prevRightX) / box1.AspectRatio;
                        newHeight += (prevLeftX - leftX) / box1.AspectRatio;
                        newHeight += (rightX - prevRightX) / box1.AspectRatio;

                        box1.BoxRect.Width = newWidth;
                        box1.BoxRect.Height = newHeight;
                    }
                    // If the left hand was on the bottom and the right hand was on the right top
                    else if (isOnBottomSide(leftX, leftY) && isOnTopSide(rightX, rightY))
                    {
                        double newWidth = box1.BoxRect.Width;
                        double newHeight = box1.BoxRect.Height;

                        box1.Top = rightY;
                        newHeight += prevRightY - rightY;
                        newHeight += leftY - prevLeftY;
                        box1.Left -= (leftY - prevLeftY) * box1.AspectRatio;
                        box1.Left -= (prevRightY - rightY) * box1.AspectRatio;
                        newWidth += (leftY - prevLeftY) * box1.AspectRatio;
                        newWidth += (prevRightY - rightY) * box1.AspectRatio;

                        box1.BoxRect.Width = newWidth;
                        box1.BoxRect.Height = newHeight;
                    }
                    // If the left hand was on the top and the right hand was on the bottom
                    else if (isOnTopSide(leftX, leftY) && isOnBottomSide(rightX, rightY))
                    {
                        double newWidth = box1.BoxRect.Width;
                        double newHeight = box1.BoxRect.Height;

                        box1.Top = leftY;
                        newHeight += prevLeftY - leftY;
                        newHeight += rightY - prevRightY;
                        box1.Left -= (prevLeftY - leftY) * box1.AspectRatio;
                        box1.Left -= (rightY - prevRightY) * box1.AspectRatio;
                        newWidth += (rightY - prevRightY) * box1.AspectRatio;
                        newWidth += (prevLeftY - leftY) * box1.AspectRatio;

                        box1.BoxRect.Width = newWidth;
                        box1.BoxRect.Height = newHeight;
                    }
                }

                prevLeftX = leftX;
                prevLeftY = leftY;
                prevRightX = rightX;
                prevRightY = rightY;
            }
        }
Exemple #48
0
        private void kinectSensor_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            if (pause)
            {
                return;
            }

            Skeleton[] skeletons = new Skeleton[0];

            using (SkeletonFrame skeletonFrame = e.OpenSkeletonFrame())
            {
                if (skeletonFrame != null)
                {
                    skeletons = new Skeleton[skeletonFrame.SkeletonArrayLength];
                    skeletonFrame.CopySkeletonDataTo(skeletons);
                }
            }


            using (DrawingContext dc = this.drawingGroup.Open())
            {
                // Draw a transparent background to set the render size
                dc.DrawRectangle(Brushes.Black, null, new Rect(0.0, 0.0, RenderWidth, RenderHeight));

                if (skeletons.Length != 0)
                {
                    foreach (Skeleton skel in skeletons)
                    {
                        RenderClippedEdges(skel, dc);

                        if (skel.TrackingState == SkeletonTrackingState.Tracked)
                        {
                            this.DrawBonesAndJoints(skel, dc);


                            index++;

                            if (actionState)
                            {
                                BitmapSource colorFrame = (BitmapSource)this.colorImageElement.Source;
                                //BitmapSource skeletonFrame = (BitmapSource)this.skeletonImageElement.Source;


                                actionData.add(colorFrame, null, skel);
                            }

                            if (index == 30)
                            {
                                index = 0;
                                Posture posture = PostureRecognition.computePosture(skel, PostureType.Both);
                                Text_PostureData.Text = posture.toJsonString();
                            }
                        }
                        else if (skel.TrackingState == SkeletonTrackingState.PositionOnly)
                        {
                            dc.DrawEllipse(
                                this.centerPointBrush,
                                null,
                                this.SkeletonPointToScreen(skel.Position),
                                BodyCenterThickness,
                                BodyCenterThickness);
                        }
                    }
                }

                // prevent drawing outside of our render area
                this.drawingGroup.ClipGeometry = new RectangleGeometry(new Rect(0.0, 0.0, RenderWidth, RenderHeight));
            }
        }
Exemple #49
0
        private void ShowSkeleton(SkeletonFrameReadyEventArgs e)
        {
            canvasSkeleton.Children.Clear();

            SkeletonFrame skeletonFrame = e.OpenSkeletonFrame();

            if (skeletonFrame != null)
            {
                Skeleton[] skeletons = new Skeleton[skeletonFrame.SkeletonArrayLength];
                skeletonFrame.CopySkeletonDataTo(skeletons);

                foreach (Skeleton skeleton in skeletons)
                {
                    if (skeleton.TrackingState == SkeletonTrackingState.Tracked)
                    {
                        this.skeletonPoing_HandRight = skeleton.Joints[JointType.HandRight].Position;

                        //xdepth.Text = string.Format("{0}mm", skeletonPoing_HandRight.X);
                        //ydepth.Text = string.Format("{0}mm", skeletonPoing_HandRight.Y);
                        if (skeletonPoing_HandRight.Z > 0.90 && skeletonPoing_HandRight.Z < 1.00)
                        {
                            zdepth.Foreground = new SolidColorBrush(Colors.Red);
                            zdepth.Text       = string.Format("{0}m", skeletonPoing_HandRight.Z);
                        }
                        else
                        {
                            zdepth.Foreground = new SolidColorBrush(Colors.Black);
                            zdepth.Text       = string.Format("{0}m", skeletonPoing_HandRight.Z);
                        }

                        //this.writer.WriteLine(
                        //    (double)(sw.ElapsedMilliseconds) / 1000
                        //    + "," +
                        //    skeleton.Joints[JointType.HandRight].Position.X
                        //    + ","
                        //    + skeleton.Joints[JointType.HandRight].Position.Y
                        //    + ","
                        //    + skeleton.Joints[JointType.HandRight].Position.Z
                        //    );

                        ColorImagePoint handpoint = kinect.CoordinateMapper.MapSkeletonPointToColorPoint(skeletonPoing_HandRight, kinect.ColorStream.Format);

                        this.writer.WriteLine((double)(sw.ElapsedMilliseconds) / 1000 + "," + handpoint.X + "," + handpoint.Y + "," + skeletonPoing_HandRight.Z);
                        xdepth.Text = string.Format("{0}pixel", handpoint.X);
                        ydepth.Text = string.Format("{0}pixel", handpoint.Y);

                        foreach (Joint joint in skeleton.Joints)
                        {
                            const int R = 4;
                            //ColorImagePoint point = kinect.CoordinateMapper.MapSkeletonPointToColorPoint(joint.Position, kinect.ColorStream.Format);
                            ColorImagePoint point = kinect.CoordinateMapper.MapSkeletonPointToColorPoint(skeletonPoing_HandRight, kinect.ColorStream.Format);

                            point.X = (int)ScaleTo(point.X, kinect.ColorStream.FrameWidth, canvasSkeleton.Width);
                            point.Y = (int)ScaleTo(point.Y, kinect.ColorStream.FrameHeight, canvasSkeleton.Height);

                            canvasSkeleton.Children.Add(new Ellipse()
                            {
                                Fill   = new SolidColorBrush(Colors.Red),
                                Margin = new Thickness(point.X - R, point.Y, 0, 0),
                                Width  = R * 2,
                                Height = R * 2,
                            });
                        }
                    }
                }
                skeletonFrame.Dispose();
            }
        }
        private void SensorSkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            Skeleton[] skeletons = new Skeleton[0];

            using (SkeletonFrame skeletonFrame = e.OpenSkeletonFrame())
            {
                if (skeletonFrame != null)
                {
                    skeletons = new Skeleton[skeletonFrame.SkeletonArrayLength];
                    skeletonFrame.CopySkeletonDataTo(skeletons);
                }
            }

            using (DrawingContext dc = this.drawingGroup.Open())
            {
                // Draw a transparent background to set the render size
                //dc.DrawRectangle(Brushes.Black, null, new Rect(0.0, 0.0, RenderWidth, RenderHeight));
                dc.DrawImage(this.colorBitmap, new Rect(0.0, 0.0, RenderWidth, RenderHeight));
                if (skeletons.Length != 0)
                {
                    foreach (Skeleton skel in skeletons)
                    {
                        RenderClippedEdges(skel, dc);

                        if (skel.TrackingState == SkeletonTrackingState.Tracked)
                        {
                            this.DrawBonesAndJoints(skel, dc);
                        }
                        else if (skel.TrackingState == SkeletonTrackingState.PositionOnly)
                        {
                            dc.DrawEllipse(
                                this.centerPointBrush,
                                null,
                                this.SkeletonPointToScreen(skel.Position),
                                BodyCenterThickness,
                                BodyCenterThickness);
                        }

                        // Toma de Mediciones
                        Joint handRight      = skel.Joints[JointType.HandRight];
                        Joint handLeft       = skel.Joints[JointType.HandLeft];
                        Joint shoulderCenter = skel.Joints[JointType.ShoulderCenter];
                        Joint elbowLeft      = skel.Joints[JointType.ElbowLeft];

                        if ((handLeft.TrackingState == JointTrackingState.Tracked) &&
                            (handRight.TrackingState == JointTrackingState.Tracked))
                        {
                            dc.DrawLine(this.HandHandPen, this.SkeletonPointToScreen(handRight.Position), this.SkeletonPointToScreen(handLeft.Position));
                            //DistanceHelper.Angulos(handLeft, shoulderCenter, handRight);

                            string        distance      = DistanceHelper.ObtenerDistancia(handLeft, handRight).ToString();
                            FormattedText formattedText = new FormattedText(distance, CultureInfo.CurrentCulture, FlowDirection.LeftToRight
                                                                            , new Typeface("Verdana"), 50, Brushes.Red);
                            double x = ((handLeft.Position.X + handRight.Position.X) / 2) * 320;
                            double y = 240 - (((handLeft.Position.Y + handRight.Position.Y) / 2) * 240);
                            //double x = 320;
                            //double y = 240;
                            //640x480
                            dc.DrawText(formattedText, new Point(x, y));
                            Console.WriteLine("x" + x.ToString());
                            Console.WriteLine("y" + y.ToString());
                        }
                        string setDistanceHands;
                        setDistanceHands = "" + DistanceHelper.ObtenerDistancia(handLeft, handRight);
                        if (setDistanceHands != "0")
                        {
                            DistanceHandHand.Text = setDistanceHands;
                        }
                        Console.WriteLine("La distancia es:" + setDistanceHands);
                    }
                }

                // prevent drawing outside of our render area
                this.drawingGroup.ClipGeometry = new RectangleGeometry(new Rect(0.0, 0.0, RenderWidth, RenderHeight));
            }
        }
        void kinectDevice_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            foreach (SkeletonData skeleton in e.SkeletonFrame.Skeletons)
            {
                //make sure he's just the first players
                if (skeleton.TrackingState == SkeletonTrackingState.Tracked)
                {
                    foreach (Joint joint in skeleton.Joints)
                    {
                        if (joint.ID == JointID.HandRight)
                        {

                            float depthX, depthY;
                            kinectDevice.SkeletonEngine.SkeletonToDepthImage(joint.Position, out depthX, out depthY);

                            depthX = Math.Max(0, Math.Min(depthX * 320, 320));
                            depthY = Math.Max(0, Math.Min(depthY * 240, 240));


                            int colorX, colorY;
                            kinectDevice.NuiCamera.GetColorPixelCoordinatesFromDepthPixel(ImageResolution.Resolution640x480, new ImageViewArea(), (int)depthX, (int)depthY, (short)0, out colorX, out colorY);

                            player.UpdateHand(new Vector2((float)(800 * (colorX) / 640.0), (float)(600 * (colorY) / 480.0)));
                        }
                    }
                }
            }
        }
        /// <summary>
        /// Event handler for Kinect sensor's SkeletonFrameReady event
        /// </summary>
        /// <param name="sender">object sending the event</param>
        /// <param name="e">event arguments</param>
        private void SensorSkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            //Fetching the first skeleton from the skeleton array in the sensor data
            Skeleton[] skeletons = new Skeleton[0];

            using (SkeletonFrame skeletonFrame = e.OpenSkeletonFrame())
            {
                if (skeletonFrame != null)
                {
                    skeletons = new Skeleton[skeletonFrame.SkeletonArrayLength];
                    skeletonFrame.CopySkeletonDataTo(skeletons);

                    // fire event to button to check
                    Skeleton tracked = null;
                    foreach (Skeleton s in skeletons)
                    {
                        if (s.TrackingState == SkeletonTrackingState.Tracked)
                        {
                            tracked = s;
                            break;
                        }
                    }

                    if (tracked != null)
                    {
                        SkeletonPoint relativePoint = tracked.Joints[JointType.HandRight].Position;
                        Point         absolutePoint = SkeletonPointToScreen(relativePoint);

                        if (this.SendRightHandPointToButton != null)
                        {
                            this.SendRightHandPointToButton(this, new RightHandEventArgs(absolutePoint));
                        }
                    }
                }
            }

            using (DrawingContext dc = this.drawingGroup.Open())
            {
                // Draw a transparent background to set the render size
                //dc.DrawRectangle(Brushes.White, null, new Rect(0.0, 0.0, RenderWidth, RenderHeight));

                //This is where the magic happens. The video image from the kinect is moved to the screen here
                //dc.DrawImage(colorBitmap, new Rect(0.0, 0.0, RenderWidth, RenderHeight));

                //This is where the spooky skeleton dark magic happens. Bones happen and get drawn to the screen and stuff I guess
                if (skeletons.Length != 0)
                {
                    foreach (Skeleton skel in skeletons)
                    {
                        if (skel.TrackingState == SkeletonTrackingState.Tracked)
                        {
                            this.DrawBonesAndJoints(skel, dc);
                        }
                        else if (skel.TrackingState == SkeletonTrackingState.PositionOnly)
                        {
                            dc.DrawEllipse(
                                this.centerPointBrush,
                                null,
                                this.SkeletonPointToScreen(skel.Position),
                                BodyCenterThickness,
                                BodyCenterThickness);
                        }
                    }
                }

                // prevent drawing outside of our render area
                this.drawingGroup.ClipGeometry = new RectangleGeometry(new Rect(0.0, 0.0, RenderWidth, RenderHeight));
            }
        }
        /// <summary>
        /// Handler for the Kinect sensor's SkeletonFrameReady event
        /// </summary>
        /// <param name="sender">object sending the event</param>
        /// <param name="skeletonFrameReadyEventArgs">event arguments</param>
        private void SensorSkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs skeletonFrameReadyEventArgs)
        {
            // Even though we un-register all our event handlers when the sensor
            // changes, there may still be an event for the old sensor in the queue
            // due to the way the KinectSensor delivers events.  So check again here.
            if (this.KinectSensor != sender)
            {
                return;
            }

            using (SkeletonFrame skeletonFrame = skeletonFrameReadyEventArgs.OpenSkeletonFrame())
            {
                if (null != skeletonFrame)
                {
                    try
                    {
                        // Copy the skeleton data from the frame to an array used for temporary storage
                        skeletonFrame.CopySkeletonDataTo(this.skeletons);

                        var accelerometerReading = this.KinectSensor.AccelerometerGetCurrentReading();

                        // Hand data to Interaction framework to be processed
                        this.interactionStream.ProcessSkeleton(this.skeletons, accelerometerReading, skeletonFrame.Timestamp);
                    }
                    catch (InvalidOperationException)
                    {
                        // SkeletonFrame functions may throw when the sensor gets
                        // into a bad state.  Ignore the frame in that case.
                    }
                }
            }
        }
        void sensor_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            using (var skeletonFrame = e.OpenSkeletonFrame())
            {
                if (skeletonFrame == null)
                {
                    return;
                }

                if (skeletons == null ||
                    skeletons.Length != skeletonFrame.SkeletonArrayLength)
                {
                    skeletons = new Skeleton[skeletonFrame.SkeletonArrayLength];
                }

                skeletonFrame.CopySkeletonDataTo(skeletons);
            }

            Skeleton closestSkeleton = skeletons.Where(s => s.TrackingState == SkeletonTrackingState.Tracked)
                                       .OrderBy(s => s.Position.Z * Math.Abs(s.Position.X))
                                       .FirstOrDefault();

            if (closestSkeleton == null)
            {
                return;
            }

            var rightElbow = closestSkeleton.Joints[JointType.ElbowRight];
            var leftKnee   = closestSkeleton.Joints[JointType.KneeLeft];
            var rightKnee  = closestSkeleton.Joints[JointType.KneeRight];
            var rightLeg   = closestSkeleton.Joints[JointType.FootRight];
            var leftLeg    = closestSkeleton.Joints[JointType.FootLeft];
            var head       = closestSkeleton.Joints[JointType.Head];
            var rightHand  = closestSkeleton.Joints[JointType.HandRight];
            var leftHand   = closestSkeleton.Joints[JointType.HandLeft];
            var hip        = closestSkeleton.Joints[JointType.HipCenter];

            if (head.TrackingState == JointTrackingState.NotTracked ||
                rightHand.TrackingState == JointTrackingState.NotTracked ||
                leftHand.TrackingState == JointTrackingState.NotTracked)
            {
                ////// Action robot STOP
                //Don't have a good read on the joints so we cannot process gestures
                return;
            }

            SetEllipsePosition(ellipseRightLeg, rightLeg, isStop);
            // SetEllipsePosition(ellipseRightElbow, rightElbow, isStop);
            SetEllipsePosition(ellipseHip, hip, false);
            SetEllipsePosition(ellipseLeftKnee, leftKnee, isBackGestureActive);
            SetEllipsePosition(ellipseRightKnee, rightKnee, isForwardGestureActive);
            SetEllipsePosition(ellipseHead, head, false);
            SetEllipsePosition(ellipseLeftHand, leftHand, isTurnLeft);
            SetEllipsePosition(ellipseRightHand, rightHand, isTurnRight);


            /*
             *
             *   bool isTurnRight = false;
             * bool isTurnLeft = false;
             * bool isStop = false;
             * bool isForwardGestureActive = false;
             * bool isBackGestureActive = false;
             * */
            ProcessForwardBackGesture(head, rightHand, leftHand, hip, rightKnee, leftKnee, rightElbow, rightLeg);
        }
        void nui_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            SkeletonFrame allSkeletons = e.SkeletonFrame;

            //get the first tracked skeleton
            SkeletonData skeleton = (from s in allSkeletons.Skeletons
                                     where s.TrackingState == SkeletonTrackingState.Tracked
                                     select s).FirstOrDefault();

            #region Set Positions
            //set position
            SetEllipsePosition(RHand, skeleton.Joints[JointID.HandRight]);
            var scaledJoint = skeleton.Joints[JointID.HandRight].ScaleTo(640, 480, .5f, .5f);
            rightHandX = scaledJoint.Position.X;
            rightHandY = scaledJoint.Position.Y;
            SetEllipsePosition(LHand, skeleton.Joints[JointID.HandLeft]);
            scaledJoint = skeleton.Joints[JointID.HandLeft].ScaleTo(640, 480, .5f, .5f);
            leftHandX = scaledJoint.Position.X;
            leftHandY = scaledJoint.Position.Y;
            if (target.Visibility == Visibility.Visible)
            {
                if (Math.Sqrt((rightHandX - targetX) * (rightHandX - targetX) + (rightHandY - targetY) * (rightHandY - targetY)) < 50 ||
                Math.Sqrt((leftHandX - targetX) * (leftHandX - targetX) + (leftHandY - targetY) * (leftHandY - targetY)) < 50)
                {
                    int currScore = int.Parse((string)ScoreNumber.Content);
                    currScore++;
                    ScoreNumber.Content = currScore + "";
                    targetX = (float)(rand.Next(540) + 50);
                    targetY = (float)(rand.Next(230) + 100);
                    while (Math.Sqrt((rightHandX - targetX) * (rightHandX - targetX) + (rightHandY - targetY) * (rightHandY - targetY)) < 50 ||
                           Math.Sqrt((leftHandX - targetX) * (leftHandX - targetX) + (leftHandY - targetY) * (leftHandY - targetY)) < 50)
                    {
                        targetX = (float)(rand.Next(540) + 50);
                        targetY = (float)(rand.Next(230) + 100);
                    }
                    Canvas.SetLeft(target, targetX - 100);
                    Canvas.SetTop(target, targetY - 100);
                }
            }
            #endregion

            #region Check Inferred
            if (!tracking || skeleton.Joints[JointID.HandRight].TrackingState == JointTrackingState.NotTracked)
            {
                Canvas.SetLeft(RHand, -100);
                Canvas.SetTop(RHand, -100);
            }
            if (!tracking || skeleton.Joints[JointID.HandLeft].TrackingState == JointTrackingState.NotTracked)
            {
                Canvas.SetLeft(LHand, -100);
                Canvas.SetTop(LHand, -100);
            }
            #endregion

            //set position
            #region recordData
            string[] stuff = new string[(int)JointID.Count * 4];
            for (int i = 0; i < (int)JointID.Count; i++)
            {
                if (skeleton.Joints[(JointID)i].TrackingState == JointTrackingState.Tracked)
                {
                    stuff[4 * i] = skeleton.Joints[(JointID)i].ID.ToString();
                    stuff[4 * i + 1] = skeleton.Joints[(JointID)i].Position.X.ToString();
                    stuff[4 * i + 2] = skeleton.Joints[(JointID)i].Position.Y.ToString();
                    stuff[4 * i + 3] = skeleton.Joints[(JointID)i].Position.Z.ToString();
                }
                else
                {
                    stuff[4 * i] = skeleton.Joints[(JointID)i].ID.ToString();
                    stuff[4 * i + 1] = "Not Found X";
                    stuff[4 * i + 2] = "Not Found Y";
                    stuff[4 * i + 3] = "Not Found Z";
                }
            }
            try
            {
                System.IO.File.WriteAllLines(@"C:\Users\Alexander Ramirez\Desktop\Kinect E87\SkeletalTracking\Data.txt", stuff);
            }
            catch (Exception ex) { }
            #endregion
        }
Exemple #56
0
        /// <summary>
        /// Event handler for Kinect sensor's SkeletonFrameReady event
        /// </summary>
        /// <param name="sender">object sending the event</param>
        /// <param name="e">event arguments</param>
        private void SensorSkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            Skeleton[] skeletons = new Skeleton[0];
            DateTime   jointTime;
            DateTime   jointTime2;

            using (SkeletonFrame skeletonFrame = e.OpenSkeletonFrame())
            {
                if (skeletonFrame != null)
                {
                    skeletons = new Skeleton[skeletonFrame.SkeletonArrayLength];
                    skeletonFrame.CopySkeletonDataTo(skeletons);

                    jointTime  = DateTime.Now;
                    jointTime2 = DateTime.Now.AddSeconds(10);

                    //get the time ex 10 second. every 10 second get the skeleton from the list an calculate the angles then compare
                    TimeSpan timeSpan = jointTime2.Subtract(jointTime);

                    //Debug.WriteLine(jointTime);
                    if (timeSpan.Equals(10))
                    {
                        List <Skeleton> _savedSkeletons = new List <Skeleton>();
                        foreach (var skeleton in skeletons)
                        {
                            if (skeleton.TrackingState != SkeletonTrackingState.Tracked)
                            {
                                continue;
                            }

                            _savedSkeletons.Add(skeleton);
                        }
                    }
                }
            }

            using (DrawingContext dc = this.drawingGroup.Open())
            {
                // Draw a transparent background to set the render size
                dc.DrawRectangle(Brushes.Black, null, new Rect(0.0, 0.0, RenderWidth, RenderHeight));

                if (skeletons.Length != 0)
                {
                    foreach (Skeleton skel in skeletons)
                    {
                        RenderClippedEdges(skel, dc);

                        if (skel.TrackingState == SkeletonTrackingState.Tracked)
                        {
                            this.DrawBonesAndJoints(skel, dc);
                        }
                        else if (skel.TrackingState == SkeletonTrackingState.PositionOnly)
                        {
                            dc.DrawEllipse(
                                this.centerPointBrush,
                                null,
                                this.SkeletonPointToScreen(skel.Position),
                                BodyCenterThickness,
                                BodyCenterThickness);
                        }
                    }
                }

                // prevent drawing outside of our render area
                this.drawingGroup.ClipGeometry = new RectangleGeometry(new Rect(0.0, 0.0, RenderWidth, RenderHeight));
            }
        }
 void SkeletonsReady(object sender, SkeletonFrameReadyEventArgs e)
 {
     SkeletonFrame skeletonFrame = e.SkeletonFrame;
     SkeletonData skeleton = (from aFrame in skeletonFrame.Skeletons where aFrame.TrackingState == SkeletonTrackingState.Tracked select aFrame).FirstOrDefault();
     if (kinectPlayerSkeleton == null)
     {
         kinectPlayerSkeleton = new SkeletonProcessing(skeleton, 1f);
     }
     else
     {
         kinectPlayerSkeleton.SetSkeletonData(skeleton);
     }
 }
Exemple #58
0
        private void SensorSkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            Skeleton[] skeletons = new Skeleton[0];

            using (SkeletonFrame skeletonFrame = e.OpenSkeletonFrame())
            {
                if (skeletonFrame != null)
                {
                    skeletons = new Skeleton[skeletonFrame.SkeletonArrayLength];
                    skeletonFrame.CopySkeletonDataTo(skeletons);
                }
            }


            using (DrawingContext dc = this.drawingGroup.Open())
            {
                // Draw a transparent background to set the render size
                dc.DrawRectangle(System.Windows.Media.Brushes.Black, null, new Rect(0.0, 0.0, RenderWidth, RenderHeight));

                for (int i = 0; i < balls.Length; i++)
                {
                    if (balls[i].getColor() == 'g')
                    {
                        dc.DrawEllipse(System.Windows.Media.Brushes.Lime, null, balls[i].getPosition(), balls[i].getRadius(), balls[i].getRadius());
                    }
                    else if (balls[i].getColor() == 'r')
                    {
                        dc.DrawEllipse(System.Windows.Media.Brushes.Red, null, balls[i].getPosition(), balls[i].getRadius(), balls[i].getRadius());
                    }
                    else if (balls[i].getColor() == 'b')
                    {
                        dc.DrawEllipse(System.Windows.Media.Brushes.DeepSkyBlue, null, balls[i].getPosition(), balls[i].getRadius(), balls[i].getRadius());
                    }
                    else if (balls[i].getColor() == 'y')
                    {
                        dc.DrawEllipse(System.Windows.Media.Brushes.Yellow, null, balls[i].getPosition(), balls[i].getRadius(), balls[i].getRadius());
                    }
                    else if (balls[i].getColor() == 'p')
                    {
                        dc.DrawEllipse(System.Windows.Media.Brushes.MediumVioletRed, null, balls[i].getPosition(), balls[i].getRadius(), balls[i].getRadius());
                    }
                    else if (balls[i].getColor() == 'o')
                    {
                        dc.DrawEllipse(System.Windows.Media.Brushes.Orange, null, balls[i].getPosition(), balls[i].getRadius(), balls[i].getRadius());
                    }
                    //dc.DrawEllipse(System.Windows.Media.Brushes.Black, null, balls[i].getPosition(), balls[i].getRadius()-2, balls[i].getRadius()-2);
                    balls[i].update();
                }

                for (int i = 0; i < balls.Length; i++)
                {
                    for (int j = 0; j < balls.Length; j++)
                    {
                        if (i != j)
                        {
                            balls[i].checkBallCollision(balls[j]);
                        }
                    }
                }

                MrSpooks spooks = new MrSpooks();

                if (skeletons.Length != 0)
                {
                    foreach (Skeleton skel in skeletons)
                    {
                        //RenderClippedEdges(skel, dc);
                        if (skel.TrackingState == SkeletonTrackingState.Tracked)
                        {
                            this.DrawBonesAndJoints(skel, dc, spooks);
                            spooks.newId();
                        }
                    }
                }

                //Fixes Disapearing Ball Glitch
                for (int i = 0; i < balls.Length; i++)
                {
                    if (Double.IsNaN(balls[i].getPosition().X) || Double.IsNaN(balls[i].getPosition().Y))
                    {
                        System.Windows.Point ErrorPoint = new System.Windows.Point();
                        ErrorPoint.X      = (float)ran.Next((int)RenderWidth);
                        ErrorPoint.Y      = (float)ran.Next((int)RenderHeight);
                        balls[i].position = ErrorPoint;
                        balls[i].dX       = 0;
                        balls[i].dY       = 0;
                        balls[i].ax       = 0;
                        balls[i].ay       = 0;
                    }
                }

                // prevent drawing outside of our render area
                this.drawingGroup.ClipGeometry = new RectangleGeometry(new Rect(0.0, 0.0, RenderWidth, RenderHeight));
            }
        }
        void skeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            canvas1.Children.Clear();
            advanceThingPosition();
            canvas1.Children.Add(thing.Shape);

            using (SkeletonFrame skeletonFrame = e.OpenSkeletonFrame())
            {
                if (skeletonFrame == null)
                {
                    return;
                }
                skeletonFrame.CopySkeletonDataTo(totalSkeleton);
                skeleton = (from trackskeleton in totalSkeleton
                            where trackskeleton.TrackingState == SkeletonTrackingState.Tracked
                            select trackskeleton).FirstOrDefault();
                if (skeleton == null)
                {
                    return;
                }
                if (skeleton != null && this.currentSkeletonID != skeleton.TrackingId)
                {
                    this.currentSkeletonID = skeleton.TrackingId;
                    int    totalTrackedJoints = skeleton.Joints.Where(item => item.TrackingState == JointTrackingState.Tracked).Count();
                    string TrackedTime        = DateTime.Now.ToString("hh:mm:ss");
                    string status             = "Skeleton Id: " + this.currentSkeletonID + ", total tracked joints: " + totalTrackedJoints + ", TrackTime: " + TrackedTime + "\n";
                    this.textBlock1.Text += status;
                }
                DrawSkeleton(skeleton);
            }

            Point handPt = ScalePosition(skeleton.Joints[JointType.HandRight].Position);

            if (thing.Hit(handPt))
            {
                //this.thing.YVelocity = -1.0 * this.thing.YVelocity;
                //this.thing.XVelocity = -1.0 * this.thing.YVelocity;

                this.thing.YVelocity = (-2.0) * this.thing.YVelocity *
                                       Math.Abs(thing.Center.Y - handPt.Y) / (Math.Abs(thing.Center.Y - handPt.Y) + Math.Abs(thing.Center.X - handPt.X));
                this.thing.XVelocity = (-2.0) * this.thing.YVelocity *
                                       Math.Abs(thing.Center.X - handPt.X) / (Math.Abs(thing.Center.Y - handPt.Y) + Math.Abs(thing.Center.X - handPt.X));
                if (flag_release == 0)
                {
                    count        = count + 1;
                    flag_release = 1;
                }
                this.textBlock_count.Text = count.ToString();
            }

            Point handPtLeft = ScalePosition(skeleton.Joints[JointType.HandLeft].Position);

            if (thing.Hit(handPtLeft))
            {
                //this.thing.YVelocity = -1.0 * this.thing.YVelocity;
                //this.thing.XVelocity = -1.0 * this.thing.YVelocity;

                this.thing.YVelocity = (-2.0) * this.thing.YVelocity *
                                       Math.Abs(thing.Center.Y - handPtLeft.Y) / (Math.Abs(thing.Center.Y - handPtLeft.Y) + Math.Abs(thing.Center.X - handPtLeft.X));
                this.thing.XVelocity = (-2.0) * this.thing.YVelocity *
                                       Math.Abs(thing.Center.X - handPtLeft.X) / (Math.Abs(thing.Center.Y - handPtLeft.Y) + Math.Abs(thing.Center.X - handPtLeft.X));
                if (flag_release == 0)
                {
                    count        = count + 1;
                    flag_release = 1;
                }
                this.textBlock_count.Text = count.ToString();
            }



            Point joint1 = this.ScalePosition(skeleton.Joints[JointType.WristRight].Position);

            if (thing.Center.Y - joint1.Y < -50)
            {
                flag_release = 0;
            }
        }
Exemple #60
0
        //骨架追踪
        void kinectSensor_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            bool receivedData = false;

            using (SkeletonFrame SFrame = e.OpenSkeletonFrame())
            {
                if (SFrame == null)
                {
                    Console.WriteLine("Skeleton Frame null");
                    // The image processing took too long. More than 2 frames behind.
                }
                else
                {
                    //Console.WriteLine("Skeleton Frame Exist");
                    frameSkeletons = new Skeleton[SFrame.SkeletonArrayLength];
                    SFrame.CopySkeletonDataTo(frameSkeletons);
                    receivedData = true;
                    Polyline figure;
                    Brush    userBrush;
                    Skeleton skeleton;
                    LayoutRoot.Children.Clear();
                    SFrame.CopySkeletonDataTo(this.frameSkeletons);


                    for (int i = 0; i < this.frameSkeletons.Length; i++)
                    {
                        skeleton = this.frameSkeletons[i];

                        if (skeleton.TrackingState == SkeletonTrackingState.Tracked)
                        {
                            userBrush = this.skeletonBrushes[i % this.skeletonBrushes.Length];

                            //绘制头和躯干
                            figure = CreateFigure(skeleton, userBrush, new[] { JointType.Head, JointType.ShoulderCenter,
                                                                               JointType.ShoulderLeft, JointType.Spine,
                                                                               JointType.ShoulderRight, JointType.ShoulderCenter,
                                                                               JointType.HipCenter });
                            LayoutRoot.Children.Add(figure);

                            figure = CreateFigure(skeleton, userBrush, new[] { JointType.HipLeft, JointType.HipRight });
                            LayoutRoot.Children.Add(figure);

                            //绘制作腿
                            figure = CreateFigure(skeleton, userBrush, new[] { JointType.HipCenter, JointType.HipLeft,
                                                                               JointType.KneeLeft, JointType.AnkleLeft, JointType.FootLeft });
                            LayoutRoot.Children.Add(figure);

                            //绘制右腿
                            figure = CreateFigure(skeleton, userBrush, new[] { JointType.HipCenter, JointType.HipRight,
                                                                               JointType.KneeRight, JointType.AnkleRight, JointType.FootRight });
                            LayoutRoot.Children.Add(figure);

                            //绘制左臂
                            figure = CreateFigure(skeleton, userBrush, new[] { JointType.ShoulderLeft, JointType.ElbowLeft,
                                                                               JointType.WristLeft, JointType.HandLeft });
                            LayoutRoot.Children.Add(figure);

                            //绘制右臂
                            figure = CreateFigure(skeleton, userBrush, new[] { JointType.ShoulderRight, JointType.ElbowRight,
                                                                               JointType.WristRight, JointType.HandRight });
                            LayoutRoot.Children.Add(figure);
                        }
                    }
                }
            }

            Polyline CreateFigure(Skeleton skeleton, Brush brush, JointType[] joints)
            {
                Polyline figure = new Polyline();

                figure.StrokeThickness = 8;
                figure.Stroke          = brush;

                for (int i = 0; i < joints.Length; i++)
                {
                    figure.Points.Add(GetJointPoint(skeleton.Joints[joints[i]]));
                }

                return(figure);
            }

            Point GetJointPoint(Joint joint)
            {
                ColorImagePoint point = this.sensor.CoordinateMapper.MapSkeletonPointToColorPoint(joint.Position, this.sensor.ColorStream.Format);

                point.X *= (int)this.LayoutRoot.ActualWidth / sensor.DepthStream.FrameWidth;
                point.Y *= (int)this.LayoutRoot.ActualHeight / sensor.DepthStream.FrameHeight;

                return(new Point(point.X, point.Y));
            }

            if (receivedData)
            {
                Skeleton currentSkeleton = (from s in frameSkeletons
                                            where s.TrackingState == SkeletonTrackingState.Tracked
                                            select s).FirstOrDefault();

                if (currentSkeleton != null)
                {
                    //Console.WriteLine("检测到骨架");
                    //获取关节点
                    Joint jointRight         = currentSkeleton.Joints[JointType.HandRight];
                    Joint jointLeft          = currentSkeleton.Joints[JointType.HandLeft];
                    Joint jointElbowRight    = currentSkeleton.Joints[JointType.ElbowRight];
                    Joint jointElbowLeft     = currentSkeleton.Joints[JointType.ElbowLeft];
                    Joint jointShoulderRight = currentSkeleton.Joints[JointType.ShoulderRight];
                    Joint jointShoulderLeft  = currentSkeleton.Joints[JointType.ShoulderLeft];
                    Joint jointHead          = currentSkeleton.Joints[JointType.Head];
                    Joint jointSpine         = currentSkeleton.Joints[JointType.Spine];
                    Joint jointFootRight     = currentSkeleton.Joints[JointType.FootRight];
                    Joint jointFootLeft      = currentSkeleton.Joints[JointType.FootLeft];

                    //控制键盘---多次点击
                    //if (jointRight.Position.Y > 0.7)
                    //{
                    //    System.Windows.Forms.SendKeys.SendWait("b");
                    //}

                    //控制键盘---持续点击
                    if (flag == 1)
                    {
                        bool Know = jointLeft.Position.Z - jointShoulderLeft.Position.Z < -0.45;
                        if (Know && !Klast)
                        {
                            keybd_event(75, 0, 0, 0);
                        }
                        if (!Know && Klast)
                        {
                            keybd_event(75, 0, 2, 0);
                        }
                        Klast = Know;

                        bool Bnow = jointRight.Position.Y > 0.7;
                        if (Bnow && !Blast)
                        {
                            keybd_event(66, 0, 0, 0);
                        }
                        if (!Bnow && Blast)
                        {
                            keybd_event(66, 0, 2, 0);
                        }
                        Blast = Bnow;

                        bool Jnow = jointRight.Position.Z - jointShoulderRight.Position.Z < -0.45;
                        if (Jnow && !Jlast)
                        {
                            keybd_event(74, 0, 0, 0);
                        }
                        if (!Jnow && Jlast)
                        {
                            keybd_event(74, 0, 2, 0);
                        }
                        Jlast = Jnow;


                        bool Wnow = jointLeft.Position.Y > 0.5;
                        if (Wnow && !Wlast)
                        {
                            keybd_event(87, 0, 0, 0);
                        }
                        if (!Wnow && Wlast)
                        {
                            keybd_event(87, 0, 2, 0);
                        }
                        Wlast = Wnow;


                        bool Snow = jointLeft.Position.Y < 0;
                        if (Snow && !Slast)
                        {
                            keybd_event(83, 0, 0, 0);
                        }
                        if (!Snow && Slast)
                        {
                            keybd_event(83, 0, 2, 0);
                        }
                        Slast = Snow;


                        bool Dnow = jointLeft.Position.X - jointSpine.Position.X > -0.2;
                        if (Dnow && !Dlast)
                        {
                            keybd_event(68, 0, 0, 0);
                        }
                        if (!Dnow && Dlast)
                        {
                            keybd_event(68, 0, 2, 0);
                        }
                        Dlast = Dnow;


                        bool Anow = jointLeft.Position.X - jointSpine.Position.X < -0.5;
                        if (Anow && !Alast)
                        {
                            keybd_event(65, 0, 0, 0);
                        }
                        if (!Anow && Alast)
                        {
                            keybd_event(65, 0, 2, 0);
                        }
                        Alast = Anow;
                    }
                    else if (flag == 2)
                    {
                        bool Onow = (jointLeft.Position.Y > 0.7) && (jointRight.Position.Y > 0.7);
                        if (Onow && !Olast)
                        {
                            keybd_event(79, 0, 0, 0);
                        }
                        if (!Onow && Olast)
                        {
                            keybd_event(79, 0, 2, 0);
                        }
                        Olast = Onow;

                        bool Unow = jointLeft.Position.X - jointSpine.Position.X < -0.5;
                        if (Unow && !Ulast)
                        {
                            keybd_event(85, 0, 0, 0);
                        }
                        if (!Unow && Ulast)
                        {
                            keybd_event(85, 0, 2, 0);
                        }
                        Ulast = Unow;

                        bool Inow = jointFootLeft.Position.Z - jointSpine.Position.Z < -0.6;
                        if (Inow && !Ilast)
                        {
                            keybd_event(73, 0, 0, 0);
                        }
                        if (!Inow && Ilast)
                        {
                            keybd_event(73, 0, 2, 0);
                        }
                        Ilast = Inow;

                        bool Know = jointFootRight.Position.Z - jointSpine.Position.Z < -0.6;
                        if (Know && !Klast)
                        {
                            keybd_event(75, 0, 0, 0);
                        }
                        if (!Know && Klast)
                        {
                            keybd_event(75, 0, 2, 0);
                        }
                        Klast = Know;

                        bool Jnow = jointRight.Position.X - jointSpine.Position.X > 0.5;
                        if (Jnow && !Jlast)
                        {
                            keybd_event(74, 0, 0, 0);
                        }
                        if (!Jnow && Jlast)
                        {
                            keybd_event(74, 0, 2, 0);
                        }
                        Jlast = Jnow;


                        bool Wnow = ((jointSpine.Position.Y - SpineY) * 100 > 1) && (jointSpine.Position.Y > 0);
                        if (Wnow && !Wlast)
                        {
                            keybd_event(87, 0, 0, 0);
                        }
                        if (!Wnow && Wlast)
                        {
                            keybd_event(87, 0, 2, 0);
                        }
                        Wlast = Wnow;

                        bool Snow = ((jointSpine.Position.Y - SpineY) * 100 < -1);
                        if (Snow && !Slast)
                        {
                            keybd_event(83, 0, 0, 0);
                        }
                        if (!Snow && Slast)
                        {
                            keybd_event(83, 0, 2, 0);
                        }
                        Slast  = Snow;
                        SpineY = jointSpine.Position.Y;

                        bool Dnow = (jointSpine.Position.X - SpineX) * 100 > 1;
                        if (Dnow && !Dlast)
                        {
                            keybd_event(68, 0, 0, 0);
                        }
                        if (!Dnow && Dlast)
                        {
                            keybd_event(68, 0, 2, 0);
                        }
                        Dlast = Dnow;


                        bool Anow = (jointSpine.Position.X - SpineX) * 100 < -1;
                        if (Anow && !Alast)
                        {
                            keybd_event(65, 0, 0, 0);
                        }
                        if (!Anow && Alast)
                        {
                            keybd_event(65, 0, 2, 0);
                        }
                        Alast  = Anow;
                        SpineX = jointSpine.Position.X;
                    }
                }
                else
                {
                    //Console.WriteLine("未检测到骨架");
                }
            }
        }