Example #1
0
        private void KinectWatcherThread(object data)
        {
            while (true) {

                WaitHandle.WaitAll(new WaitHandle[] { SkeletonStream.NextFrameReadyEvent, ColorStream.NextFrameReadyEvent }, 0);

                if (this.ColorStream != null && this.ColorFrameReady != null && ColorFrameReady.GetInvocationList().Length > 0) {
                    var args = new ImageFrameReadyEventArgs();

                    // Get the next colorframe.
                    var frame = this.ColorStream.OpenNextFrame();

                    if (frame != null) {
                        args.ImageFrame = frame;

                        // Fire ColorFrameReady event.
                        ColorFrameReady(this, args);
                    }
                }

                if (this.DepthStream != null && this.DepthFrameReady != null && DepthFrameReady.GetInvocationList().Length > 0) {

                    var args = new ImageFrameReadyEventArgs();

                    // Get the next depthframe.
                    var frame = this.DepthStream.OpenNextFrame();

                    if (frame != null) {
                        args.ImageFrame = frame;

                        // Fire DepthFrameReady event.
                        DepthFrameReady(this, args);
                    }
                }

                if (this.SkeletonStream != null && this.SkeletonFrameReady != null && SkeletonFrameReady.GetInvocationList().Length > 0) {

                    var args = new SkeletonFrameReadyEventArgs();

                    // Get the next frame of skeletons.
                    var frame = this.SkeletonStream.OpenNextFrame();

                    if (frame != null) {
                        args.SkeletonFrame = frame;

                        // Fire SkeletonFrameReady event.
                        SkeletonFrameReady(this, args);
                    }
                }
            }
        }
Example #2
0
        private void sensor_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            Dispatcher.BeginInvoke(() => {
                var skeletons = (from s in e.SkeletonFrame.Skeletons
                                 where s.TrackingState == SkeletonTrackingState.Tracked
                                 select s).ToArray();

                if (skeletons.Length > 0) {

                    skeletonCanvas.Children.Clear();

                    var joints = skeletons[0].Joints;

                    Draw(joints[JointType.Head], joints[JointType.ShoulderCenter]);
                    Draw(joints[JointType.ShoulderCenter], joints[JointType.Spine]);
                    Draw(joints[JointType.Spine], joints[JointType.HipCenter]);
                    Draw(joints[JointType.HipCenter], joints[JointType.HipLeft]);
                    Draw(joints[JointType.HipLeft], joints[JointType.KneeLeft]);
                    Draw(joints[JointType.KneeLeft], joints[JointType.AnkleLeft]);
                    Draw(joints[JointType.AnkleLeft], joints[JointType.FootLeft]);
                    Draw(joints[JointType.HipCenter], joints[JointType.HipRight]);
                    Draw(joints[JointType.HipRight], joints[JointType.KneeRight]);
                    Draw(joints[JointType.KneeRight], joints[JointType.AnkleRight]);
                    Draw(joints[JointType.AnkleRight], joints[JointType.FootRight]);
                    Draw(joints[JointType.ShoulderCenter], joints[JointType.ShoulderLeft]);
                    Draw(joints[JointType.ShoulderLeft], joints[JointType.ElbowLeft]);
                    Draw(joints[JointType.ElbowLeft], joints[JointType.WristLeft]);
                    Draw(joints[JointType.WristLeft], joints[JointType.HandLeft]);
                    Draw(joints[JointType.ShoulderCenter], joints[JointType.ShoulderRight]);
                    Draw(joints[JointType.ShoulderRight], joints[JointType.ElbowRight]);
                    Draw(joints[JointType.ElbowRight], joints[JointType.WristRight]);
                    Draw(joints[JointType.WristRight], joints[JointType.HandRight]);
                }
            });
        }
Example #3
0
        private static void sensor_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            try {
                if (e.SkeletonFrame == null)
                    return;

                // Get all tracked skeletons.
                var skeletons = (from s in e.SkeletonFrame.Skeletons
                                 where s.TrackingState == SkeletonTrackingState.Tracked
                                 select s).ToArray();

                // Check moves for each tracked skeleton.
                foreach (var skeleton in skeletons)
                    CheckMoves(skeleton);

            } catch (KinectException ex) {
                Deployment.Current.Dispatcher.BeginInvoke(() => {
                    OnKinectException(null, ex.Message);
                });
            }
        }
Example #4
0
        private static void SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            try {
                if (e.SkeletonFrame == null)
                    return;

                // Get all tracked skeletons.
                var newSkeletons = (from s in e.SkeletonFrame.Skeletons
                                    where s.TrackingState == SkeletonTrackingState.Tracked
                                    select s).ToArray();

                // Get all skeletons that left the frame.
                var leftSkeletons = new List<Skeleton>();
                foreach (var trackedSkeleton in trackedSkeletons) {
                    if (!newSkeletons.Any(n => n.TrackingID == trackedSkeleton.TrackingID))
                        leftSkeletons.Add(trackedSkeleton);
                }

                // Get all skeletons that entered the frame.
                var enteredSkeletons = new List<Skeleton>();
                foreach (var newSkeleton in newSkeletons) {
                    if (!trackedSkeletons.Any(t => t.TrackingID == newSkeleton.TrackingID))
                        enteredSkeletons.Add(newSkeleton);
                }

                // Fire OnPersonLeft event for each skeleton that left the frame.
                if (OnPersonLeft != null)
                    foreach (var skeleton in leftSkeletons)
                        Deployment.Current.Dispatcher.BeginInvoke(() => {
                            OnPersonLeft(Sensor, new PersonEventArgs(skeleton.TrackingID));
                        });

                // Fire OnPersonEntered event for each skeleton that entered the frame.
                if (OnPersonEntered != null)
                    foreach (var skeleton in enteredSkeletons)
                        Deployment.Current.Dispatcher.BeginInvoke(() => {
                            OnPersonEntered(Sensor, new PersonEventArgs(skeleton.TrackingID));
                        });

                trackedSkeletons = newSkeletons;

                // Check moves for each tracked skeleton.
                foreach (var skeleton in newSkeletons)
                    CheckMoves(skeleton);

            } catch (KinectException ex) {

                if (OnKinectException != null)

                    Deployment.Current.Dispatcher.BeginInvoke(() => {
                        OnKinectException(null, ex.Message);
                    });
            }
        }