コード例 #1
0
 public void Paint(SensorBody body, Brush brush, Canvas canvas, SensorBodyFrame bodyFrame)
 {
     this.paintAlgorithm.Paint(body, brush, canvas);
     this.sensorRecorder.LogBodyFrame(bodyFrame);
 }
コード例 #2
0
 public void LogBodyFrame(SensorBodyFrame bodyFrame)
 {
     this.SensorData.BodyFrames.Add(bodyFrame);
 }
コード例 #3
0
 public void Paint(SensorBody body, System.Windows.Media.Brush brush, Canvas canvas, SensorBodyFrame bodyFrame)
 {
     this.paintingAlgorithm.Paint(body, brush, canvas);
 }
コード例 #4
0
        private void BodyReader_FrameArrived(object sender, BodyFrameArrivedEventArgs e)
        {
            using (BodyFrame frame = e.FrameReference.AcquireFrame())
            {
                if (frame != null)
                {
                    frame.GetAndRefreshBodyData(this.bodies);
                    if (Settings.IsDebugViewEnabled)
                    {
                        RefreshPersonDetectionStates();
                    }

                    DrawSkeletons();

                    if (this.primaryPerson == null)
                    {
                        // If we are not tracking anyone, make the first tracked person in the
                        // frame the primary body.
                        for (int i = 0; i < this.bodies.Count; i++)
                        {
                            var body = this.bodies[i];
                            if (body != null && body.IsTracked && PersonDetector.IsPersonPresent(body, this.bodyPresenceArea))
                            {
                                this.primaryPerson = new Person(i, body.TrackingId);
                                this.StateMachine.Fire(Trigger.PersonEnters);
                                break;
                            }
                        }
                    }
                    else
                    {
                        // If we are tracking someone, check if they are still present and still in
                        // the frame.
                        var primaryBody = this.bodies[this.primaryPerson.BodyIndex];
                        if (primaryBody != null && primaryBody.TrackingId == this.primaryPerson.TrackingId && primaryBody.IsTracked)
                        {
                            var isPrimaryPersonPresent = PersonDetector.IsPersonPresent(primaryBody, this.bodyPresenceArea, this.primaryPerson.ExpectedMaxDistance);
                            if (isPrimaryPersonPresent)
                            {
                                // Primary person is in the frame and is a valid distance from the camera.
                                if (this.StateMachine.IsInState(State.ConfirmingPresence))
                                {
                                    // Calibrate the primary person's distance
                                    this.personCalibrator.AddDistanceFromCamera(primaryBody.DistanceFromSensor());
                                }
                                else if (this.StateMachine.IsInState(State.Painting))
                                {
                                    var primaryBodyAsSensorBody = new SensorBody(primaryBody, this.sensor);
                                    var frameAsSensorFrame      = new SensorBodyFrame(frame, this.sensor);
                                    this.paintingSession.Paint(primaryBodyAsSensorBody, this.currentBrush, this.canvas, frameAsSensorFrame);
                                }
                            }
                            else
                            {
                                this.StateMachine.Fire(Trigger.PersonLeaves);
                            }
                        }
                        else
                        {
                            this.StateMachine.Fire(Trigger.PersonLeaves);
                        }
                    }
                }
            }
        }