Exemplo n.º 1
0
        /// <summary>
        /// Allows individual skeleton tracking.
        /// </summary>
        /// <param name="origData">the original skeleton event data</param>
        /// <returns>true if traversing should continue with next skeleton, otherwise false</returns>
        protected override bool ProcessSkeleton(ISkeletonData origData)
        {
            if (this.CanHandleFrame)
            {
                ArrayList frameBuffer = base.FrameBuffer;

                // if we record more than max frames, this state should change
                if (frameBuffer.Count >= base.Context.MaxFrames)
                {
                    base.Controller.PerformTransition(FSMEventId.GoIdle);
                }
                else
                {
                    // add current skeleton data to recognition buffer
                    SkeletonTrackingData trackingData = new SkeletonTrackingData(origData, base.Context.IsJointTracked, this.Context);
                    frameBuffer.Add(trackingData.DTWData);
                    this.RaiseEvent(this.FrameRecorded);
                }
            }

            // result doesn't matter as this state only handles 1 skeleton at a time
            return(false);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Allows individual skeleton tracking.
        /// </summary>
        /// <param name="origData">the original skeleton event data</param>
        /// <returns>true if traversing should continue with next skeleton, otherwise false</returns>
        protected override bool ProcessSkeleton(ISkeletonData origData)
        {
            if (this.CanHandleFrame)
            {
                IGesture  gesture     = null;
                ArrayList frameBuffer = base.FrameBuffer;

                // handle recognition if we have some sequence already
                if (frameBuffer.Count > base.Context.MinFrames)
                {
                    gesture = this.recognizer.Recognize(frameBuffer);
                    if (gesture != null && gesture.Id != GestureId.Unknown)
                    {
                        base.Controller.RaiseGestureRecognizedEvent(new GestureRecognizedEventArgs(gesture,
                                                                                                   Configuration.Instance.GestureTransitions[new KeyValuePair <FSMStateId, GestureId>(base.Id, gesture.Id)]));

                        this.ResetState();
                    }

                    // check if current state should be exited (idle or unsuccessful for too long)
                    this.ExitStateOnIdle();
                }

                // maintain buffer size
                if (frameBuffer.Count > base.Context.MaxFrames)
                {
                    frameBuffer.RemoveAt(0);
                }

                // add current skeleton data to recognition buffer
                SkeletonTrackingData trackingData = new SkeletonTrackingData(origData, base.Context.IsJointTracked, this.Context);
                frameBuffer.Add(trackingData.DTWData);
            }

            // result doesn't matter as this state only handles 1 skeleton at a time
            return(false);
        }