/// <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); }
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); }
/*-----------------------------PUBLIC SETTERS-----------------------------------------*/ public void setTrackingMode(SkeletonTrackingMode trackingMode) { if (kinect != null) { kinect.SkeletonStream.TrackingMode = trackingMode; } else { MyConsole.print("No Kinect device ready"); } }
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) { } }