Beispiel #1
0
        //骨骼数据处理事件
        private void SensorSkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            bool received = false;

            using (SkeletonFrame skeletonFrame = e.OpenSkeletonFrame())
            {
                if (skeletonFrame != null)
                {
                    skeletonFrame.CopySkeletonDataTo(this.skeletonData);
                    received = true;
                }
            }

            if (received)
            {
                foreach (Skeleton skeleton in this.skeletonData)
                {
                    if (skeleton.TrackingState == SkeletonTrackingState.Tracked)
                    {
                        _gestureController.Update(skeleton);
                    }
                }

                //重绘整个画面,冲掉原有骨骼图像
                skeletonImage.Draw(new Rectangle(0, 0, skeletonImage.Width, skeletonImage.Height), new Bgr(0.0, 0.0, 0.0), -1);

                DrawSkeletons(skeletonImage, 0);
                imageBoxSkeleton.Image = skeletonImage;
            }
        }
Beispiel #2
0
        void Reader_MultiSourceFrameArrived(object sender, MultiSourceFrameArrivedEventArgs e)
        {
            var reference = e.FrameReference.AcquireFrame();

            // Color
            using (var frame = reference.ColorFrameReference.AcquireFrame())
            {
                if (frame != null)
                {
                    if (viewer.Visualization == Visualization.Color)
                    {
                        viewer.Image = frame.ToBitmap();
                    }
                }
            }

            // Body
            using (var frame = reference.BodyFrameReference.AcquireFrame())
            {
                if (frame != null)
                {
                    Body body = frame.Bodies().Closest();

                    if (body != null)
                    {
                        _gestureController.Update(body);
                    }
                }
            }
        }
Beispiel #3
0
        void Sensor_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            using (var frame = e.OpenSkeletonFrame())
            {
                if (frame != null)
                {
                    canvas.ClearSkeletons();
                    tblHeights.Text = string.Empty;

                    var skeletons = frame.Skeletons().Where(s => s.TrackingState == SkeletonTrackingState.Tracked);

                    foreach (var skeleton in skeletons)
                    {
                        if (skeleton != null)
                        {
                            // Update skeleton gestures.
                            _gestureController.Update(skeleton);

                            // Draw skeleton.
                            canvas.DrawSkeleton(skeleton);

                            // Display user height.
                            tblHeights.Text += string.Format("\nUser {0}: {1}cm", skeleton.TrackingId, skeleton.Height());
                        }
                    }
                }
            }
        }
        /// <summary>
        /// Handles body frame events
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BodyFrameReader_FrameArrived(object sender, BodyFrameArrivedEventArgs e)
        {
            // Body frame
            using (BodyFrame frame = e.FrameReference.AcquireFrame())
            {
                if (frame != null)
                {
                    Body body = frame.Bodies().Closest();

                    if (body != null && gesturesEnabled)
                    {
                        if (body.IsTracked && imageManager.IsImageDisplayed())
                        {
                            LHSValue.Text = body.HandLeftState.ToString();
                            RHSValue.Text = body.HandRightState.ToString();

                            if (lastGesture == GestureType.SwipeLeft && body.HandRightState == HandState.Lasso)
                            {
                                imageManager.ShowPreviousImage();
                            }

                            if (lastGesture == GestureType.SwipeRight && body.HandLeftState == HandState.Lasso)
                            {
                                imageManager.ShowNextImage();
                            }
                        }

                        gestureController.Update(body);
                    }
                }
            }
        }
        /// <summary>
        /// Handles the depth/color/body index frame data arriving from the sensor
        /// </summary>
        /// <param name="sender">object sending the event</param>
        /// <param name="e">event arguments</param>
        void Reader_MultiSourceFrameArrived(object sender, MultiSourceFrameArrivedEventArgs e)
        {
            var reference = e.FrameReference.AcquireFrame();

            using (var colorFrame = reference.ColorFrameReference.AcquireFrame())
                using (var depthFrame = reference.DepthFrameReference.AcquireFrame())
                    using (var bodyIndexFrame = reference.BodyIndexFrameReference.AcquireFrame())
                        using (var bodyFrame = reference.BodyFrameReference.AcquireFrame())
                        {
                            if (colorFrame != null && depthFrame != null && bodyIndexFrame != null)
                            {
                                // 3) Update the image source.
                                Camera.Source = _backgroundRemovalTool.GreenScreen(colorFrame, depthFrame, bodyIndexFrame);
                                CaptureOriginalColorFrame(colorFrame);
                            }
                            if (bodyFrame != null)
                            {
                                Body body = bodyFrame.Bodies().Closest();

                                if (body != null)
                                {
                                    _gestureController.Update(body);
                                }
                            }
                        }
        }
Beispiel #6
0
        private void Sensor_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            using (var frame = e.OpenSkeletonFrame())
                if (frame != null)
                {
                    if (_kinectViewer != null)
                    {
                        _kinectViewer.Clear();
                    }

                    var skeletons = frame.Skeletons().Where(s => s.TrackingState == SkeletonTrackingState.Tracked);

                    foreach (var skeleton in skeletons)
                    {
                        if (skeleton != null)
                        {
                            // Update skeleton gestures
                            _gestureController.Update(skeleton);

                            // Draw skeleton
                            if (_kinectViewer != null)
                            {
                                _kinectViewer.DrawBody(skeleton);
                            }

                            position = skeleton.Position;
                        }
                    }
                }
        }
Beispiel #7
0
        private void OnSkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            using (SkeletonFrame frame = e.OpenSkeletonFrame())
            {
                //skeletonCanvas.ClearSkeletons();
                if (frame == null)
                {
                    return;
                }

                // resize the skeletons array if needed
                if (skeletons.Length != frame.SkeletonArrayLength)
                {
                    skeletons = new Skeleton[frame.SkeletonArrayLength];
                }

                // get the skeleton data
                frame.CopySkeletonDataTo(skeletons);

                foreach (var skeleton in skeletons)
                {
                    // skip the skeleton if it is not being tracked
                    if (skeleton.TrackingState != SkeletonTrackingState.Tracked)
                    {
                        continue;
                    }

                    //skeletonCanvas.DrawSkeleton(skeleton);

                    GetJointLocations(skeleton);
                    DrawSkeleton();

                    _gestureController.Update(skeleton);

                    //if (IsPose(skeleton, this.startPose))
                    //{
                    //    MessageBox.Show("you select start Pose");

                    //    // 这里可以改变仿生手势
                    //}

                    //// 是否双手放下
                    //if (IsPose(skeleton, this.poseLibrary[1]))
                    //{
                    //    MessageBox.Show("your Arms both down!!!");
                    //    _wait = true;
                    //}
                }
            }
        }
Beispiel #8
0
        void Reader_MultiSourceFrameArrived(object sender, MultiSourceFrameArrivedEventArgs e)
        {
            //get the frame from the kinect
            var reference = e.FrameReference.AcquireFrame();

            // Body
            using (var frame = reference.BodyFrameReference.AcquireFrame())
            {
                if (frame != null)
                {
                    //detect the nearest body to the kinect
                    Body body = frame.Bodies().Closest();

                    if (body != null)
                    {
                        //update the skeleton of the body
                        _gestureController.Update(body);
                    }
                }
            }
        }
Beispiel #9
0
        void Reader_MultiSourceFrameArrived(object sender, MultiSourceFrameArrivedEventArgs e)
        {
            var reference = e.FrameReference.AcquireFrame();

            // Color
            using (var frame = reference.ColorFrameReference.AcquireFrame())
            {
                if (frame != null)
                {
                    if (viewer.Visualization == Visualization.Color)
                    {
                        viewer.Image = frame.ToBitmap();
                    }
                }
            }

            // Depth
            using (var frame = reference.DepthFrameReference.AcquireFrame())
            {
                if (frame != null)
                {
                    if (viewer.Visualization == Visualization.Depth)
                    {
                        viewer.Image = frame.ToBitmap();
                    }
                }
            }

            // Infrared
            using (var frame = reference.InfraredFrameReference.AcquireFrame())
            {
                if (frame != null)
                {
                    if (viewer.Visualization == Visualization.Infrared)
                    {
                        viewer.Image = frame.ToBitmap();
                    }
                }
            }

            // Body
            using (var frame = reference.BodyFrameReference.AcquireFrame())
            {
                if (frame != null)
                {
                    // Wait 100 frames until we can detect new gesture
                    if (sinceLastGesture > 0)
                    {
                        sinceLastGesture--;
                    }

                    bodies = new Body[frame.BodyFrameSource.BodyCount];
                    frame.GetAndRefreshBodyData(bodies);
                    playersController.Update(bodies);

                    foreach (Body body in bodies)
                    {
                        viewer.DrawBody(body);
                    }


                    int trackedBodies = bodies.Count(x => x.IsTracked == true);


                    if (trackedBodies > 0)
                    {
                        // text1.Text = (bodies.Where(x => x.IsTracked == true).ToList()[0].Joints[JointType.HandRight].Position.X - bodies.Where(x => x.IsTracked == true).ToList()[0].Joints[JointType.HandLeft].Position.X).ToString();
                        isRefreshed = false;
                        crowdController.Update(bodies);
                        gestureController.Update(crowdController.DetermineMainPerson());

                        if (!swipe_mode)
                        {
                            setCursor();
                        }
                    }
                    else
                    {
                        if (!isRefreshed)
                        {
                            restart_view();
                        }
                    }
                }
            }
        }
        void Reader_MultiSourceFrameArrived(object sender, MultiSourceFrameArrivedEventArgs e)
        {
            var reference = e.FrameReference.AcquireFrame();

            // Color
            using (var frame = reference.ColorFrameReference.AcquireFrame())
            {
                if (frame != null)
                {
                    if (_mode == Visualization.Color)
                    {
                        camera.Source = frame.ToBitmap();
                    }
                }
            }

            // Depth
            using (var frame = reference.DepthFrameReference.AcquireFrame())
            {
                if (frame != null)
                {
                    if (_mode == Visualization.Depth)
                    {
                        camera.Source = frame.ToBitmap();
                    }
                }
            }

            // Infrared
            using (var frame = reference.InfraredFrameReference.AcquireFrame())
            {
                if (frame != null)
                {
                    if (_mode == Visualization.Infrared)
                    {
                        camera.Source = frame.ToBitmap();
                    }
                }
            }

            // Body
            using (var frame = reference.BodyFrameReference.AcquireFrame())
            {
                if (frame != null)
                {
                    tblHeights.Text = string.Empty;

                    _bodies = frame.Bodies().Where(body => body.IsTracked);

                    foreach (var body in _bodies)
                    {
                        if (body.IsTracked)
                        {
                            // Update body gestures.
                            _gestureController.Update(body);

                            // Draw body.
                            //canvas.Source = body.ToBitmap(_mode);

                            // Display user height.
                            tblHeights.Text += string.Format("\nUser {0}: {1}cm", body.TrackingId, Math.Round(body.Height(), 2));
                        }
                    }
                }
            }
        }
Beispiel #11
0
        /// <summary>
        /// Check if one or two children are on the scene (adding/clearing children's skeleton to the list, )
        /// then shows skeletons and check the statues
        /// </summary>
        private void Sensor_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            using (var frame = e.OpenSkeletonFrame())
                if (frame != null)
                {
                    kinectViewer.Clear();
                    var skeletons = frame.Skeletons().Where(s => s.TrackingState == SkeletonTrackingState.Tracked);

                    if (skeletons.Count() == 0)
                    {
                        if (listSkeletons.Count != 0)
                        {
                            listSkeletons.Clear();
                            _mainGesture.setGreenFlag(false);
                            _mainGesture2.setGreenFlag(false);
                        }
                    }
                    else
                    {
                        if (skeletons.Count() == 2)
                        {
                            if (listSkeletons.Count == 2 && !recherche_skeleton(skeletons.Last().TrackingId))
                            {
                                if (listSkeletons.IndexOf(skeletons.First().TrackingId) == 1)
                                {
                                    listSkeletons[0] = 0;
                                    _listGestures1.Clear();
                                    listeGestes.Items.Clear();
                                }
                                if (listSkeletons.IndexOf(skeletons.First().TrackingId) == 0)
                                {
                                    listSkeletons.RemoveAt(1);
                                    _listGestures2.Clear();
                                    listeGestes2.Items.Clear();
                                }
                            }
                            else if (listSkeletons.Count == 2)
                            {
                                _mainGesture2.Update(skeletons.Last());
                            }
                            kinectViewer.DrawBody(skeletons.Last());
                        }

                        if (listSkeletons.Count == 0)
                        {
                            listeGestes.Items.Clear();
                            _listGestures1.Clear();
                            _mainGesture.setGreenFlag(false);
                            listSkeletons.Add(skeletons.First().TrackingId);
                            _listGestures1.Add(skeletons.First().TrackingId.ToString());
                        }
                        else if (listSkeletons.Count == 1)
                        {
                            if ((!recherche_skeleton(skeletons.Last().TrackingId)))
                            {
                                if (listSkeletons[0] == 0)
                                {
                                    _mainGesture.setGreenFlag(false);
                                    listSkeletons[0] = skeletons.Last().TrackingId;
                                    _listGestures1.Add(skeletons.Last().TrackingId.ToString());
                                }
                                else
                                {
                                    _mainGesture2.setGreenFlag(false);
                                    listSkeletons.Add(skeletons.Last().TrackingId);
                                    _listGestures2.Add(skeletons.Last().TrackingId.ToString());
                                }
                            }
                        }
                        if (skeletons.Count() == 1)
                        {
                            if (listSkeletons.IndexOf(skeletons.First().TrackingId) == 1)
                            {
                                _mainGesture2.Update(skeletons.First());
                            }
                            else
                            {
                                _mainGesture.Update(skeletons.First());
                            }
                        }
                        kinectViewer.DrawBody(skeletons.First());
                    }
                }
        }
        private void OnSkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            using (SkeletonFrame frame = e.OpenSkeletonFrame())
            {
                //skeletonCanvas.ClearSkeletons();
                if (frame == null)
                {
                    return;
                }

                // resize the skeletons array if needed
                if (skeletons.Length != frame.SkeletonArrayLength)
                {
                    skeletons = new Skeleton[frame.SkeletonArrayLength];
                }

                // get the skeleton data
                frame.CopySkeletonDataTo(skeletons);

                // 这里是防止人物过于混乱引起的错误
                //var primary_skeleton = skeletons.GetPrimarySkeleton();
                //if (primary_skeleton == null || primary_skeleton.TrackingState != SkeletonTrackingState.Tracked)
                //    return;
                //_gestureController.Update(primary_skeleton);

                foreach (var skeleton in skeletons)
                {
                    // skip the skeleton if it is not being tracked
                    if (skeleton.TrackingState != SkeletonTrackingState.Tracked)
                    {
                        continue;
                    }

                    //skeletonCanvas.DrawSkeleton(skeleton);


                    GetJointLocations(skeleton);
                    DrawSkeleton();

                    _gestureController.Update(skeleton);

                    // 是否右手举了起来
                    if (IsPose(skeleton, this.poseLibrary[3]) && !_clearTimer.Enabled)
                    {
                        if (isRealHand)
                        {
                            isRealHand         = false;
                            _debug             = "";
                            statusBarText.Text = "模仿模式已关闭";
                        }
                        else
                        {
                            isRealHand         = true;
                            _debug             = "模仿模式";
                            statusBarText.Text = "模仿模式已启用";
                        }

                        _clearTimer.Enabled = true;
                    }

                    // 是否开启了暂停模式
                    if (IsPose(skeleton, this.startPose) && !_clearTimer.Enabled)
                    {
                        // MessageBox.Show("your Arms both down!!!");
                        // 等待串口发送的时间
                        if (!_wait)
                        {
                            _waitTime = 5;
                            _wait     = true;
                        }
                        else
                        {
                            _wait = false;
                        }
                        _clearTimer.Enabled = true;
                    }
                }
            }
        }
        void Reader_MultiSourceFrameArrived(object sender, MultiSourceFrameArrivedEventArgs e)
        {
            var reference = e.FrameReference.AcquireFrame();

            // Color
            using (var frame = reference.ColorFrameReference.AcquireFrame())
            {
                if (frame != null)
                {
                    if (viewer.Visualization == Visualization.Color)
                    {
                        viewer.Image = frame.ToBitmap();
                    }
                }
            }



            // Body
            using (var frame = reference.BodyFrameReference.AcquireFrame())
            {
                if (frame != null)
                {
                    var bodies = frame.Bodies();
                    _playersController.Update(bodies);


                    Body bodyg = frame.Bodies().Closest();

                    viewer.DrawBody(bodyg);

                    if (bodyg != null)
                    {
                        _gestureController.Update(bodyg);
                        if (heightFlag == 0)
                        {
                            height = 100 * (bodyg.Height());

                            textBox.Text = height.ToString();
                            heightcm     = (Convert.ToInt32(height)) + Adder;
                            SendString   = "X" + heightcm.ToString() + '\n';

                            noHeightFlag = 0;

                            SendData();
                        }
                    }
                    else if (bodyg == null)
                    {
                        heightFlag = 0;
                    }
                    if (GestureString == "ZoomIn")
                    {
                        heightFlag    = 0;
                        GestureString = null;
                        textBox2.Text = null;

                        SendString = "X" + heightcm.ToString() + '\n';
                    }

                    /*if (GestureString == "SwipeLeft")
                     * {
                     *   heightFlag = 0;
                     *   GestureString = null;
                     *
                     *   SendString = "A"+ '\n';
                     *
                     *   SendData();
                     * }
                     * else if (GestureString == "SwipeRight")
                     * {
                     *   heightFlag = 0;
                     *   GestureString = null;
                     *
                     *   SendString = "E" + '\n';
                     *
                     *   SendData();
                     * }*/
                }
            }
        }