private void KinectSensorOnAllFramesReady(object sender, AllFramesReadyEventArgs e) { if (frameProccessed[1] == false) { frameProccessed[1] = true; } else { frameProccessed[1] = false; return; } ColorImageFrame colorImageFrame = null; DepthImageFrame depthImageFrame = null; SkeletonFrame skeletonFrame = null; try { colorImageFrame = e.OpenColorImageFrame(); depthImageFrame = e.OpenDepthImageFrame(); skeletonFrame = e.OpenSkeletonFrame(); if (colorImageFrame == null || depthImageFrame == null || skeletonFrame == null) { return; } if (this.depthImageFormat != depthImageFrame.Format) { this.depthImage = null; this.depthImageFormat = depthImageFrame.Format; } if (this.colorImageFormat != colorImageFrame.Format) { this.colorImage = null; this.colorImageFormat = colorImageFrame.Format; } if (this.depthImage == null) { this.depthImage = new short[depthImageFrame.PixelDataLength]; } if (this.colorImage == null) { this.colorImage = new byte[colorImageFrame.PixelDataLength]; } if (this.skeletonData == null || this.skeletonData.Length != skeletonFrame.SkeletonArrayLength) { this.skeletonData = new Skeleton[skeletonFrame.SkeletonArrayLength]; } colorImageFrame.CopyPixelDataTo(this.colorImage); depthImageFrame.CopyPixelDataTo(this.depthImage); skeletonFrame.CopySkeletonDataTo(this.skeletonData); } finally { if (colorImageFrame != null) { colorImageFrame.Dispose(); } if (depthImageFrame != null) { depthImageFrame.Dispose(); } if (skeletonFrame != null) { skeletonFrame.Dispose(); } using (depthImageFrame) { if (depthImageFrame != null && skeletonData != null) { foreach (Skeleton sd in skeletonData) { if (sd.TrackingState == SkeletonTrackingState.Tracked || sd.TrackingState == SkeletonTrackingState.PositionOnly) { Joint joint = sd.Joints[JointType.Head]; DepthImagePoint depthPoint; CoordinateMapper coordinateMapper = new CoordinateMapper(frontSensor); depthPoint = coordinateMapper.MapSkeletonPointToDepthPoint(joint.Position, DepthImageFormat.Resolution320x240Fps30); point = new System.Windows.Point((int)(frontSensor.ColorStream.FrameWidth * depthPoint.X / depthImageFrame.Width), (int)(frontSensor.ColorStream.FrameHeight * depthPoint.Y / depthImageFrame.Height)); /* textBlock1.Text = string.Format("X:{0:0.00} Y:{1:0.00} Z:{2:0.00}", * point.X, * point.Y, * joint.Position.Z); */ Canvas.SetLeft(headEllipse, point.X - headEllipse.Width / 2); Canvas.SetTop(headEllipse, point.Y - headEllipse.Height / 2); if (this.faceTracker == null) { try { this.faceTracker = new FaceTracker(frontSensor); } catch (InvalidOperationException) { // During some shutdown scenarios the FaceTrack // is unable to be instantiated. Catch that exception // and don't track a face. this.faceTracker = null; } } if (this.faceTracker != null) { FaceTrackFrame frame = this.faceTracker.Track( colorImageFormat, colorImage, depthImageFormat, depthImage, sd); if (frame.TrackSuccessful) { faceTriangles = frame.GetTriangles(); this.facePoints = frame.GetProjected3DShape(); var faceModelPts = new List <Point>(); var faceModel = new List <FaceModelTriangle>(); for (int i = 0; i < this.facePoints.Count; i++) { faceModelPts.Add(new Point(this.facePoints[i].X + 0.5f, this.facePoints[i].Y + 0.5f)); } foreach (var t in faceTriangles) { var triangle = new FaceModelTriangle(); triangle.P1 = faceModelPts[t.First]; //triangle.P2 = faceModelPts[t.Second]; //triangle.P3 = faceModelPts[t.Third]; faceModel.Add(triangle); } Canvas.SetLeft(noseEllipse, faceModel[108].P1.X - noseEllipse.Width / 2); Canvas.SetTop(noseEllipse, faceModel[108].P1.Y - noseEllipse.Height / 2); nosePoint = new Point(faceModel[108].P1.X, faceModel[108].P1.Y); } } } } } } getAttentionAngle(nosePoint); } }
private void KinectSensorOnAllFramesReady(object sender, AllFramesReadyEventArgs e) { if (frameProccessed[1] == false) { frameProccessed[1] = true; } else { frameProccessed[1] = false; return; } ColorImageFrame colorImageFrame = null; DepthImageFrame depthImageFrame = null; SkeletonFrame skeletonFrame = null; try { colorImageFrame = e.OpenColorImageFrame(); depthImageFrame = e.OpenDepthImageFrame(); skeletonFrame = e.OpenSkeletonFrame(); if (colorImageFrame == null || depthImageFrame == null || skeletonFrame == null) { return; } if (this.depthImageFormat != depthImageFrame.Format) { this.depthImage = null; this.depthImageFormat = depthImageFrame.Format; } if (this.colorImageFormat != colorImageFrame.Format) { this.colorImage = null; this.colorImageFormat = colorImageFrame.Format; } if (this.depthImage == null) { this.depthImage = new short[depthImageFrame.PixelDataLength]; } if (this.colorImage == null) { this.colorImage = new byte[colorImageFrame.PixelDataLength]; } if (this.skeletonData == null || this.skeletonData.Length != skeletonFrame.SkeletonArrayLength) { this.skeletonData = new Skeleton[skeletonFrame.SkeletonArrayLength]; } colorImageFrame.CopyPixelDataTo(this.colorImage); depthImageFrame.CopyPixelDataTo(this.depthImage); skeletonFrame.CopySkeletonDataTo(this.skeletonData); } finally { if (colorImageFrame != null) { colorImageFrame.Dispose(); } if (depthImageFrame != null) { depthImageFrame.Dispose(); } if (skeletonFrame != null) { skeletonFrame.Dispose(); } using (depthImageFrame) { if (depthImageFrame != null && skeletonData != null) { foreach (Skeleton sd in skeletonData) { if (sd.TrackingState == SkeletonTrackingState.Tracked || sd.TrackingState == SkeletonTrackingState.PositionOnly) { Joint joint = sd.Joints[JointType.Head]; DepthImagePoint depthPoint; CoordinateMapper coordinateMapper = new CoordinateMapper(frontSensor); depthPoint = coordinateMapper.MapSkeletonPointToDepthPoint(joint.Position, DepthImageFormat.Resolution320x240Fps30); point = new System.Windows.Point((int)(frontSensor.ColorStream.FrameWidth * depthPoint.X / depthImageFrame.Width), (int)(frontSensor.ColorStream.FrameHeight * depthPoint.Y / depthImageFrame.Height)); /* textBlock1.Text = string.Format("X:{0:0.00} Y:{1:0.00} Z:{2:0.00}", point.X, point.Y, joint.Position.Z); */ Canvas.SetLeft(headEllipse, point.X - headEllipse.Width / 2); Canvas.SetTop(headEllipse, point.Y - headEllipse.Height / 2); if (this.faceTracker == null) { try { this.faceTracker = new FaceTracker(frontSensor); } catch (InvalidOperationException) { // During some shutdown scenarios the FaceTrack // is unable to be instantiated. Catch that exception // and don't track a face. this.faceTracker = null; } } if (this.faceTracker != null) { FaceTrackFrame frame = this.faceTracker.Track( colorImageFormat, colorImage, depthImageFormat, depthImage, sd); if (frame.TrackSuccessful) { faceTriangles = frame.GetTriangles(); this.facePoints = frame.GetProjected3DShape(); var faceModelPts = new List<Point>(); var faceModel = new List<FaceModelTriangle>(); for (int i = 0; i < this.facePoints.Count; i++) { faceModelPts.Add(new Point(this.facePoints[i].X + 0.5f, this.facePoints[i].Y + 0.5f)); } foreach (var t in faceTriangles) { var triangle = new FaceModelTriangle(); triangle.P1 = faceModelPts[t.First]; //triangle.P2 = faceModelPts[t.Second]; //triangle.P3 = faceModelPts[t.Third]; faceModel.Add(triangle); } Canvas.SetLeft(noseEllipse, faceModel[108].P1.X - noseEllipse.Width / 2); Canvas.SetTop(noseEllipse, faceModel[108].P1.Y - noseEllipse.Height / 2); nosePoint = new Point(faceModel[108].P1.X, faceModel[108].P1.Y); } } } } } } getAttentionAngle(nosePoint); } }