/// <summary>
 /// 啟動骨架追蹤
 /// </summary>
 /// <param name="kinectSensor">要啟動的KinectSensor</param>
 private void activeSkeletonFunction(KinectSensor kinectSensor, SkeletonTrackingMode skeletonTrackingMode, bool inNearRange)
 {
     kinectSensor.SkeletonStream.TrackingMode = skeletonTrackingMode;
     kinectSensor.SkeletonStream.EnableTrackingInNearRange = inNearRange;
     kinectSensor.SkeletonFrameReady += kinect_SkeletonFrameReady;
     kinectSensor.SkeletonStream.Enable();
 }
		public ReplaySkeletonFrame(SkeletonFrame frame)
		{
			FloorClipPlane = frame.FloorClipPlane;
			FrameNumber = frame.FrameNumber;
			TimeStamp = frame.Timestamp;
            //Skeletons = frame.GetSkeletons();
			TrackingMode = frame.TrackingMode;
		}
 public ReplaySkeletonFrame(SkeletonFrame frame)
 {
     FloorClipPlane = frame.FloorClipPlane;
     FrameNumber    = frame.FrameNumber;
     TimeStamp      = frame.Timestamp;
     Skeletons      = frame.GetSkeletons();
     TrackingMode   = frame.TrackingMode;
 }
        /// <summary>
        /// Function for starting the tracking of the Kinect skeleton in order to recognize gestures
        /// </summary>
        /// <param name="trackingMode">Kinect tracking mode</param>
        public void Start(SkeletonTrackingMode trackingMode = SkeletonTrackingMode.Default)
        {
            // Ensure a sensor has been specified
            if (_sensor != null)
            {
                TrackingMode = trackingMode;
                if (_callbackProcessing != null)
                {
                    _callbackProcessing("Tracking Mode Set To " + TrackingMode.ToString());
                }

                // Build joint relationships based on the provided information
                JointRelationshipsUsed.Clear();
                foreach (GestureSequences gestureSequence in Gestures)
                {
                    foreach (GestureSequenceStep step in gestureSequence.steps)
                    {
                        foreach (JointRelationship rel in step.SuccessConditions)
                        {
                            if (!JointRelationshipsUsed.ContainsKey(rel.actor))
                            {
                                JointRelationshipsUsed.Add(rel.actor, new Dictionary <string, List <Relationship> >());
                            }
                            if (!JointRelationshipsUsed[rel.actor].ContainsKey(rel.relative))
                            {
                                JointRelationshipsUsed[rel.actor].Add(rel.relative, new List <Relationship>());
                            }
                            if (!JointRelationshipsUsed[rel.actor][rel.relative].Contains(rel.relation))
                            {
                                JointRelationshipsUsed[rel.actor][rel.relative].Add(rel.relation);
                            }
                        }
                        foreach (JointRelationship rel in step.FailureConditions)
                        {
                            if (!JointRelationshipsUsed.ContainsKey(rel.actor))
                            {
                                JointRelationshipsUsed.Add(rel.actor, new Dictionary <string, List <Relationship> >());
                            }
                            if (!JointRelationshipsUsed[rel.actor].ContainsKey(rel.relative))
                            {
                                JointRelationshipsUsed[rel.actor].Add(rel.relative, new List <Relationship>());
                            }
                            if (!JointRelationshipsUsed[rel.actor][rel.relative].Contains(rel.relation))
                            {
                                JointRelationshipsUsed[rel.actor][rel.relative].Add(rel.relation);
                            }
                        }
                    }
                }

                // Enabled Kinect tracking with callback to ProcessSkeleton when each Kinect frame is ready
                _sensor.SkeletonStream.Enable();
                _sensor.ColorStream.Enable(ColorImageFormat.RgbResolution640x480Fps30);
                _sensor.DepthStream.Enable(DepthImageFormat.Resolution640x480Fps30);
                _sensor.AllFramesReady += (s, e) => { ProcessSkeletons(e); };
                _sensor.Start();
            }
        }
        internal override void CreateFromReader(BinaryReader reader)
        {
            TimeStamp = reader.ReadInt64();
            TrackingMode = (SkeletonTrackingMode)reader.ReadInt32();
            FloorClipPlane = new Tuple<float, float, float, float>(
                reader.ReadSingle(), reader.ReadSingle(),
                reader.ReadSingle(), reader.ReadSingle());

            FrameNumber = reader.ReadInt32();

            BinaryFormatter formatter = new BinaryFormatter();
            Skeletons = (Skeleton[]) formatter.Deserialize(reader.BaseStream);
        }
        internal override void CreateFromReader(BinaryReader reader)
        {
            TimeStamp      = reader.ReadInt64();
            TrackingMode   = (SkeletonTrackingMode)reader.ReadInt32();
            FloorClipPlane = new Tuple <float, float, float, float>(
                reader.ReadSingle(), reader.ReadSingle(),
                reader.ReadSingle(), reader.ReadSingle());

            FrameNumber = reader.ReadInt32();

            var formatter = new BinaryFormatter();

            Skeletons = (Skeleton[])formatter.Deserialize(reader.BaseStream);
        }
        public static List <Skeleton> FromStream(Stream stream)
        {
            List <Skeleton> skeletonList = new List <Skeleton>();

            // Start reading the stream.
            BinaryReader reader = new BinaryReader(stream);

            // Check if the stream contains skeletons.
            KinectRecordOptions options = (KinectRecordOptions)reader.ReadInt32();

            if ((options & KinectRecordOptions.Skeletons) == 0)
            {
                throw new System.ArgumentException("The stream does not contain skeleton frames.");
            }

            while (reader.BaseStream.Position != reader.BaseStream.Length)
            {
                KinectRecordOptions header = (KinectRecordOptions)reader.ReadInt32();

                if (header != KinectRecordOptions.Skeletons)
                {
                    continue;
                }

                // Unneeded information for the converter cause.
                long timeStamp = reader.ReadInt64();
                SkeletonTrackingMode trackingMode = (SkeletonTrackingMode)reader.ReadInt32();
                Tuple <float, float, float, float> floorClipPlane = new Tuple <float, float, float, float>(
                    reader.ReadSingle(), reader.ReadSingle(),
                    reader.ReadSingle(), reader.ReadSingle()
                    );
                int frameNumber = reader.ReadInt32();

                BinaryFormatter formatter = new BinaryFormatter();
                Skeleton[]      skeletons = (Skeleton[])formatter.Deserialize(reader.BaseStream);

                // Append all skeletons to the list.
                skeletonList.AddRange(skeletons);
            }

            return(skeletonList);
        }
		internal override void CreateFromReader(BinaryReader reader)
		{
			TimeStamp = reader.ReadInt64();
			TrackingMode = (SkeletonTrackingMode)reader.ReadInt32();
			FloorClipPlane = new Tuple<float, float, float, float>(
				reader.ReadSingle(), reader.ReadSingle(),
				reader.ReadSingle(), reader.ReadSingle());

			FrameNumber = reader.ReadInt32();
            RightHandPositionX = reader.ReadInt32();
            RightHandPositionY = reader.ReadInt32();
            LeftHandPositionX = reader.ReadInt32();
            LeftHandPositionY = reader.ReadInt32();
            SpinePositionX = reader.ReadInt32();
            SpinePositionY = reader.ReadInt32();
            IsSkeletonDetected = reader.ReadBoolean();

            //var formatter = new BinaryFormatter();
            //Skeletons = (Skeleton[])formatter.Deserialize(reader.BaseStream);
		}
Beispiel #9
0
 public void SetSkeletonMode(SkeletonTrackingMode mode)
 {
     this.Runtime.SkeletonStream.TrackingMode = mode;
 }
        /// <summary>
        /// 啟動Sensor
        /// </summary>
        /// <param name="serial">Sersor序號</param>
        /// <param name="activeDepth">啟動深度追蹤</param>
        /// <param name="depthRange">深度資訊類型:Default(一般模式)、Near(近接模式)</param>
        /// <param name="depthImageFormat">影像資訊類型:Resolution320x240Fps30、Resolution640x480Fps30、Resolution80x60Fps30</param>
        /// <param name="activeSkeleton">啟動骨架追蹤</param>
        /// <param name="skeletonTrackingMode">骨架追蹤模式:Default(全身)、Seated(坐姿)</param>
        /// <param name="activeColor">啟動色彩追蹤</param>
        /// <param name="activeInteraction">啟動手勢追蹤</param>
        private KinectSensor activeSensor(int serial, bool activeDepth, DepthRange depthRange, DepthImageFormat depthImageFormat, bool activeSkeleton, SkeletonTrackingMode skeletonTrackingMode, bool activeColor, bool activeInteraction)
        {
            KinectSensor kinectSensor = KinectSensor.KinectSensors[serial];

            //深度追蹤
            if (activeDepth)
            {
                activeDepthFunction(kinectSensor, depthRange, depthImageFormat);
            }

            //骨架追蹤
            bool inNearRange = false; //是否為近接模式

            if (depthRange == DepthRange.Near)
            {
                inNearRange = true;
            }

            if (activeSkeleton)
            {
                activeSkeletonFunction(kinectSensor, skeletonTrackingMode, inNearRange);
            }

            //色彩追蹤
            if (activeColor)
            {
                activeColorFunction(kinectSensor);
            }

            //手勢追蹤
            //if (activeInteraction)
            //    activeInteractionFunction(kinectSensor);

            kinectSensor.Start();

            return(kinectSensor);
        }
Beispiel #11
0
 public void SetSkeletonMode(SkeletonTrackingMode mode)
 {
     this.Runtime.SkeletonStream.TrackingMode = mode;
 }
Beispiel #12
0
 /*-----------------------------PUBLIC SETTERS-----------------------------------------*/
 public void setTrackingMode(SkeletonTrackingMode trackingMode)
 {
     if (kinect != null)
     {
         kinect.SkeletonStream.TrackingMode = trackingMode;
     }
     else
     {
         MyConsole.print("No Kinect device ready");
     }
 }
Beispiel #13
0
        private void Window_Loaded_1(object sender, RoutedEventArgs e)
        {
            if (seated == true)
            {
                mode = SkeletonTrackingMode.Seated;
            }
            wristLastLocation = new SkeletonPoint[2];
            speedLeft = 0;
            speedRight = 0;

            // Create the drawing group we'll use for drawing
            this.drawingGroup = new DrawingGroup();

            // Create an image source that we can use in our image control
            this.imageSource = new DrawingImage(this.drawingGroup);

            // Display the drawing using our image control
            SKEImage.Source = this.imageSource;

            foreach (var potentialSensor in KinectSensor.KinectSensors)
            {
                if (potentialSensor.Status == KinectStatus.Connected)
                {
                    this.sensor = potentialSensor;
                    break;
                }
            }

            if (null != this.sensor)
            {
                this.sensor.SkeletonStream.TrackingMode = mode;
                this.sensor.ColorStream.Enable(ColorImageFormat.RgbResolution640x480Fps30);
                this.colorPixels = new byte[this.sensor.ColorStream.FramePixelDataLength];
                this.colorBitmap = new WriteableBitmap(this.sensor.ColorStream.FrameWidth, this.sensor.ColorStream.FrameHeight, 96.0, 96.0, PixelFormats.Bgr32, null);
                this.RGBImage.Source = this.colorBitmap;
                this.sensor.ColorFrameReady += this.SensorColorFrameReady;

                this.sensor.SkeletonStream.Enable();
                this.sensor.SkeletonFrameReady += this.sensor_SkeletonFrameReady;

                try
                {
                    this.sensor.Start();
                }
                catch (IOException)
                {
                    this.sensor = null;
                }

                ResetFrameRateCounters();
            }

            if (null == this.sensor)
            {
            }
        }